Reorder Code.
This commit is contained in:
@@ -6,6 +6,7 @@ using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools.Workbench
|
||||
{
|
||||
@@ -235,6 +236,8 @@ namespace VAR.PdfTools.Workbench
|
||||
string textElementText = textElement.VisibleText;
|
||||
string textElementFontName = (textElement.Font == null ? string.Empty : textElement.Font.Name);
|
||||
|
||||
if (textElementHeight < 0.0001) { return; }
|
||||
|
||||
double textElementPageX = textElementX;
|
||||
double textElementPageY = pageHeight - textElementY;
|
||||
|
||||
@@ -245,22 +248,20 @@ namespace VAR.PdfTools.Workbench
|
||||
(int)(textElementHeight * Scale),
|
||||
Scale);
|
||||
|
||||
if (textElementHeight > 0.000)
|
||||
|
||||
using (Font font = new Font("Arial", (int)(textElementHeight * Scale), GraphicsUnit.Pixel))
|
||||
{
|
||||
using (Font font = new Font("Arial", (int)(textElementHeight * Scale), GraphicsUnit.Pixel))
|
||||
foreach (PdfCharElement c in textElement.Characters)
|
||||
{
|
||||
foreach (PdfCharElement c in textElement.Characters)
|
||||
{
|
||||
gc.DrawString(c.Char,
|
||||
font,
|
||||
Brushes.Black,
|
||||
(int)((textElementPageX + c.Displacement) * Scale),
|
||||
(int)(textElementPageY * Scale));
|
||||
gc.FillRectangle(Brushes.Red,
|
||||
(int)((textElementPageX + c.Displacement) * Scale),
|
||||
(int)(textElementPageY * Scale),
|
||||
2, 2);
|
||||
}
|
||||
gc.DrawString(c.Char,
|
||||
font,
|
||||
Brushes.Black,
|
||||
(int)((textElementPageX + c.Displacement) * Scale),
|
||||
(int)(textElementPageY * Scale));
|
||||
gc.FillRectangle(Brushes.Red,
|
||||
(int)((textElementPageX + c.Displacement) * Scale),
|
||||
(int)(textElementPageY * Scale),
|
||||
2, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
121
VAR.PdfTools/Maths/Matrix3x3.cs
Normal file
121
VAR.PdfTools/Maths/Matrix3x3.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
|
||||
namespace VAR.PdfTools.Maths
|
||||
{
|
||||
public class Matrix3x3
|
||||
{
|
||||
#region Declarations
|
||||
|
||||
public double[,] _matrix = new double[3, 3];
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public double[,] Matrix { get { return _matrix; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Creator
|
||||
|
||||
public Matrix3x3()
|
||||
{
|
||||
Idenity();
|
||||
}
|
||||
|
||||
public Matrix3x3(double a, double b, double c, double d, double e, double f)
|
||||
{
|
||||
Set(a, b, c, d, e, f);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
|
||||
public void Idenity()
|
||||
{
|
||||
_matrix[0, 0] = 1.0;
|
||||
_matrix[0, 1] = 0.0;
|
||||
_matrix[0, 2] = 0.0;
|
||||
_matrix[1, 0] = 0.0;
|
||||
_matrix[1, 1] = 1.0;
|
||||
_matrix[1, 2] = 0.0;
|
||||
_matrix[2, 0] = 0.0;
|
||||
_matrix[2, 1] = 0.0;
|
||||
_matrix[2, 2] = 1.0;
|
||||
}
|
||||
|
||||
public void Set(double a, double b, double c, double d, double e, double f)
|
||||
{
|
||||
_matrix[0, 0] = a;
|
||||
_matrix[1, 0] = b;
|
||||
_matrix[2, 0] = 0;
|
||||
_matrix[0, 1] = c;
|
||||
_matrix[1, 1] = d;
|
||||
_matrix[2, 1] = 0;
|
||||
_matrix[0, 2] = e;
|
||||
_matrix[1, 2] = f;
|
||||
_matrix[2, 2] = 1;
|
||||
}
|
||||
|
||||
public Vector3D Multiply(Vector3D vect)
|
||||
{
|
||||
Vector3D vectResult = new Vector3D();
|
||||
|
||||
vectResult.Vector[0] = (vect.Vector[0] * _matrix[0, 0]) + (vect.Vector[1] * _matrix[0, 1]) + (vect.Vector[2] * _matrix[0, 2]);
|
||||
vectResult.Vector[1] = (vect.Vector[0] * _matrix[1, 0]) + (vect.Vector[1] * _matrix[1, 1]) + (vect.Vector[2] * _matrix[1, 2]);
|
||||
vectResult.Vector[2] = (vect.Vector[0] * _matrix[2, 0]) + (vect.Vector[1] * _matrix[2, 1]) + (vect.Vector[2] * _matrix[2, 2]);
|
||||
|
||||
return vectResult;
|
||||
}
|
||||
|
||||
public Matrix3x3 Multiply(Matrix3x3 matrix)
|
||||
{
|
||||
Matrix3x3 newMatrix = new Matrix3x3();
|
||||
|
||||
newMatrix._matrix[0, 0] = (_matrix[0, 0] * matrix._matrix[0, 0]) + (_matrix[1, 0] * matrix._matrix[0, 1]) + (_matrix[2, 0] * matrix._matrix[0, 2]);
|
||||
newMatrix._matrix[0, 1] = (_matrix[0, 1] * matrix._matrix[0, 0]) + (_matrix[1, 1] * matrix._matrix[0, 1]) + (_matrix[2, 1] * matrix._matrix[0, 2]);
|
||||
newMatrix._matrix[0, 2] = (_matrix[0, 2] * matrix._matrix[0, 0]) + (_matrix[1, 2] * matrix._matrix[0, 1]) + (_matrix[2, 2] * matrix._matrix[0, 2]);
|
||||
newMatrix._matrix[1, 0] = (_matrix[0, 0] * matrix._matrix[1, 0]) + (_matrix[1, 0] * matrix._matrix[1, 1]) + (_matrix[2, 0] * matrix._matrix[1, 2]);
|
||||
newMatrix._matrix[1, 1] = (_matrix[0, 1] * matrix._matrix[1, 0]) + (_matrix[1, 1] * matrix._matrix[1, 1]) + (_matrix[2, 1] * matrix._matrix[1, 2]);
|
||||
newMatrix._matrix[1, 2] = (_matrix[0, 2] * matrix._matrix[1, 0]) + (_matrix[1, 2] * matrix._matrix[1, 1]) + (_matrix[2, 2] * matrix._matrix[1, 2]);
|
||||
newMatrix._matrix[2, 0] = (_matrix[0, 0] * matrix._matrix[2, 0]) + (_matrix[1, 0] * matrix._matrix[2, 1]) + (_matrix[2, 0] * matrix._matrix[2, 2]);
|
||||
newMatrix._matrix[2, 1] = (_matrix[0, 1] * matrix._matrix[2, 0]) + (_matrix[1, 1] * matrix._matrix[2, 1]) + (_matrix[2, 1] * matrix._matrix[2, 2]);
|
||||
newMatrix._matrix[2, 2] = (_matrix[0, 2] * matrix._matrix[2, 0]) + (_matrix[1, 2] * matrix._matrix[2, 1]) + (_matrix[2, 2] * matrix._matrix[2, 2]);
|
||||
|
||||
return newMatrix;
|
||||
}
|
||||
|
||||
public Matrix3x3 Copy()
|
||||
{
|
||||
Matrix3x3 newMatrix = new Matrix3x3();
|
||||
|
||||
newMatrix._matrix[0, 0] = _matrix[0, 0];
|
||||
newMatrix._matrix[0, 1] = _matrix[0, 1];
|
||||
newMatrix._matrix[0, 2] = _matrix[0, 2];
|
||||
newMatrix._matrix[1, 0] = _matrix[1, 0];
|
||||
newMatrix._matrix[1, 1] = _matrix[1, 1];
|
||||
newMatrix._matrix[1, 2] = _matrix[1, 2];
|
||||
newMatrix._matrix[2, 0] = _matrix[2, 0];
|
||||
newMatrix._matrix[2, 1] = _matrix[2, 1];
|
||||
newMatrix._matrix[2, 2] = _matrix[2, 2];
|
||||
|
||||
return newMatrix;
|
||||
}
|
||||
|
||||
public bool IsCollinear(Matrix3x3 otherMatrix, double horizontalDelta = 0.00001, double verticalDelta = 0.00001)
|
||||
{
|
||||
double epsilon = 0.00001;
|
||||
return (
|
||||
Math.Abs(_matrix[0, 0] - otherMatrix.Matrix[0, 0]) <= epsilon &&
|
||||
Math.Abs(_matrix[1, 0] - otherMatrix.Matrix[1, 0]) <= epsilon &&
|
||||
Math.Abs(_matrix[0, 1] - otherMatrix.Matrix[0, 1]) <= epsilon &&
|
||||
Math.Abs(_matrix[1, 1] - otherMatrix.Matrix[1, 1]) <= epsilon &&
|
||||
Math.Abs(_matrix[0, 2] - otherMatrix.Matrix[0, 2]) <= horizontalDelta &&
|
||||
Math.Abs(_matrix[1, 2] - otherMatrix.Matrix[1, 2]) <= verticalDelta &&
|
||||
true);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
33
VAR.PdfTools/Maths/Vector3D.cs
Normal file
33
VAR.PdfTools/Maths/Vector3D.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
namespace VAR.PdfTools.Maths
|
||||
{
|
||||
public class Vector3D
|
||||
{
|
||||
#region Declarations
|
||||
|
||||
public double[] _vector = new double[3];
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public double[] Vector { get { return _vector; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Creator
|
||||
|
||||
public Vector3D()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
_vector[0] = 0.0;
|
||||
_vector[1] = 0.0;
|
||||
_vector[2] = 1.0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
|
||||
@@ -1,220 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
public enum PdfElementTypes
|
||||
{
|
||||
Undefined,
|
||||
Boolean,
|
||||
Integer,
|
||||
Real,
|
||||
String,
|
||||
Name,
|
||||
Array,
|
||||
Dictionary,
|
||||
Null,
|
||||
ObjectReference,
|
||||
Object,
|
||||
Stream,
|
||||
};
|
||||
|
||||
public interface IPdfElement
|
||||
{
|
||||
PdfElementTypes Type { get; }
|
||||
}
|
||||
|
||||
public class PdfBoolean : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Boolean; } }
|
||||
public bool Value { get; set; }
|
||||
}
|
||||
|
||||
public class PdfInteger : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Integer; } }
|
||||
public long Value { get; set; }
|
||||
}
|
||||
|
||||
public class PdfReal : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Real; } }
|
||||
public double Value { get; set; }
|
||||
}
|
||||
|
||||
public class PdfString : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.String; } }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class PdfName : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Name; } }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class PdfArray : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Array; } }
|
||||
private List<IPdfElement> _values = new List<IPdfElement>();
|
||||
public List<IPdfElement> Values { get { return _values; } }
|
||||
}
|
||||
|
||||
public class PdfDictionary : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Dictionary; } }
|
||||
private Dictionary<string, IPdfElement> _values = new Dictionary<string, IPdfElement>();
|
||||
public Dictionary<string, IPdfElement> Values { get { return _values; } }
|
||||
|
||||
public string GetParamAsString(string name)
|
||||
{
|
||||
if (Values.ContainsKey(name) == false) { return null; }
|
||||
|
||||
IPdfElement value = Values[name];
|
||||
if (value is PdfArray)
|
||||
{
|
||||
value = ((PdfArray)value).Values[0];
|
||||
}
|
||||
if (value is PdfName)
|
||||
{
|
||||
return ((PdfName)value).Value;
|
||||
}
|
||||
if (value is PdfString)
|
||||
{
|
||||
return ((PdfString)value).Value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public long? GetParamAsInt(string name)
|
||||
{
|
||||
if (Values.ContainsKey(name) == false) { return null; }
|
||||
|
||||
IPdfElement value = Values[name];
|
||||
if (value is PdfArray)
|
||||
{
|
||||
value = ((PdfArray)value).Values[0];
|
||||
}
|
||||
if (value is PdfInteger)
|
||||
{
|
||||
return ((PdfInteger)value).Value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public byte[] GetParamAsStream(string name)
|
||||
{
|
||||
if (Values.ContainsKey(name) == false) { return null; }
|
||||
|
||||
IPdfElement value = Values[name];
|
||||
if (value is PdfArray)
|
||||
{
|
||||
PdfArray array = value as PdfArray;
|
||||
MemoryStream memStream = new MemoryStream();
|
||||
foreach (IPdfElement elem in array.Values)
|
||||
{
|
||||
PdfStream stream = elem as PdfStream;
|
||||
if (stream == null) { continue; }
|
||||
memStream.Write(stream.Data, 0, stream.Data.Length);
|
||||
}
|
||||
if (memStream.Length > 0)
|
||||
{
|
||||
return memStream.ToArray();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (value is PdfStream)
|
||||
{
|
||||
return ((PdfStream)value).Data;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class PdfNull : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Null; } }
|
||||
}
|
||||
|
||||
public class PdfObjectReference : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.ObjectReference; } }
|
||||
public int ObjectID { get; set; }
|
||||
public int ObjectGeneration { get; set; }
|
||||
}
|
||||
|
||||
public class PdfStream : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Stream; } }
|
||||
public PdfDictionary Dictionary { get; set; }
|
||||
public byte[] Data { get; set; }
|
||||
|
||||
public byte[] OriginalData { get; set; }
|
||||
public IPdfElement OriginalFilter { get; set; }
|
||||
}
|
||||
|
||||
public class PdfObject : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Object; } }
|
||||
public int ObjectID { get; set; }
|
||||
public int ObjectGeneration { get; set; }
|
||||
public IPdfElement Data { get; set; }
|
||||
public int UsageCount { get; set; }
|
||||
}
|
||||
|
||||
public static class PdfElementUtils
|
||||
{
|
||||
public static double GetReal(IPdfElement elem, double defaultValue)
|
||||
{
|
||||
if (elem == null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
if (elem is PdfInteger)
|
||||
{
|
||||
return ((PdfInteger)elem).Value;
|
||||
}
|
||||
if (elem is PdfReal)
|
||||
{
|
||||
return ((PdfReal)elem).Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static long GetInt(IPdfElement elem, long defaultValue)
|
||||
{
|
||||
if (elem == null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
if (elem is PdfInteger)
|
||||
{
|
||||
return ((PdfInteger)elem).Value;
|
||||
}
|
||||
if (elem is PdfReal)
|
||||
{
|
||||
return (long)((PdfReal)elem).Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static string GetString(IPdfElement elem, string defaultValue)
|
||||
{
|
||||
if (elem == null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
if (elem is PdfString)
|
||||
{
|
||||
return ((PdfString)elem).Value;
|
||||
}
|
||||
if (elem is PdfName)
|
||||
{
|
||||
return ((PdfName)elem).Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
7
VAR.PdfTools/PdfElements/IPdfElement.cs
Normal file
7
VAR.PdfTools/PdfElements/IPdfElement.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public interface IPdfElement
|
||||
{
|
||||
PdfElementTypes Type { get; }
|
||||
}
|
||||
}
|
||||
11
VAR.PdfTools/PdfElements/PdfArray.cs
Normal file
11
VAR.PdfTools/PdfElements/PdfArray.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfArray : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Array; } }
|
||||
private List<IPdfElement> _values = new List<IPdfElement>();
|
||||
public List<IPdfElement> Values { get { return _values; } }
|
||||
}
|
||||
}
|
||||
8
VAR.PdfTools/PdfElements/PdfBoolean.cs
Normal file
8
VAR.PdfTools/PdfElements/PdfBoolean.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfBoolean : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Boolean; } }
|
||||
public bool Value { get; set; }
|
||||
}
|
||||
}
|
||||
77
VAR.PdfTools/PdfElements/PdfDictionary.cs
Normal file
77
VAR.PdfTools/PdfElements/PdfDictionary.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfDictionary : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Dictionary; } }
|
||||
private Dictionary<string, IPdfElement> _values = new Dictionary<string, IPdfElement>();
|
||||
public Dictionary<string, IPdfElement> Values { get { return _values; } }
|
||||
|
||||
public string GetParamAsString(string name)
|
||||
{
|
||||
if (Values.ContainsKey(name) == false) { return null; }
|
||||
|
||||
IPdfElement value = Values[name];
|
||||
if (value is PdfArray)
|
||||
{
|
||||
value = ((PdfArray)value).Values[0];
|
||||
}
|
||||
if (value is PdfName)
|
||||
{
|
||||
return ((PdfName)value).Value;
|
||||
}
|
||||
if (value is PdfString)
|
||||
{
|
||||
return ((PdfString)value).Value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public long? GetParamAsInt(string name)
|
||||
{
|
||||
if (Values.ContainsKey(name) == false) { return null; }
|
||||
|
||||
IPdfElement value = Values[name];
|
||||
if (value is PdfArray)
|
||||
{
|
||||
value = ((PdfArray)value).Values[0];
|
||||
}
|
||||
if (value is PdfInteger)
|
||||
{
|
||||
return ((PdfInteger)value).Value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public byte[] GetParamAsStream(string name)
|
||||
{
|
||||
if (Values.ContainsKey(name) == false) { return null; }
|
||||
|
||||
IPdfElement value = Values[name];
|
||||
if (value is PdfArray)
|
||||
{
|
||||
PdfArray array = value as PdfArray;
|
||||
MemoryStream memStream = new MemoryStream();
|
||||
foreach (IPdfElement elem in array.Values)
|
||||
{
|
||||
PdfStream stream = elem as PdfStream;
|
||||
if (stream == null) { continue; }
|
||||
memStream.Write(stream.Data, 0, stream.Data.Length);
|
||||
}
|
||||
if (memStream.Length > 0)
|
||||
{
|
||||
return memStream.ToArray();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (value is PdfStream)
|
||||
{
|
||||
return ((PdfStream)value).Data;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
18
VAR.PdfTools/PdfElements/PdfElementTypes.cs
Normal file
18
VAR.PdfTools/PdfElements/PdfElementTypes.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public enum PdfElementTypes
|
||||
{
|
||||
Undefined,
|
||||
Boolean,
|
||||
Integer,
|
||||
Real,
|
||||
String,
|
||||
Name,
|
||||
Array,
|
||||
Dictionary,
|
||||
Null,
|
||||
ObjectReference,
|
||||
Object,
|
||||
Stream,
|
||||
};
|
||||
}
|
||||
56
VAR.PdfTools/PdfElements/PdfElementUtils.cs
Normal file
56
VAR.PdfTools/PdfElements/PdfElementUtils.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public static class PdfElementUtils
|
||||
{
|
||||
public static double GetReal(IPdfElement elem, double defaultValue)
|
||||
{
|
||||
if (elem == null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
if (elem is PdfInteger)
|
||||
{
|
||||
return ((PdfInteger)elem).Value;
|
||||
}
|
||||
if (elem is PdfReal)
|
||||
{
|
||||
return ((PdfReal)elem).Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static long GetInt(IPdfElement elem, long defaultValue)
|
||||
{
|
||||
if (elem == null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
if (elem is PdfInteger)
|
||||
{
|
||||
return ((PdfInteger)elem).Value;
|
||||
}
|
||||
if (elem is PdfReal)
|
||||
{
|
||||
return (long)((PdfReal)elem).Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static string GetString(IPdfElement elem, string defaultValue)
|
||||
{
|
||||
if (elem == null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
if (elem is PdfString)
|
||||
{
|
||||
return ((PdfString)elem).Value;
|
||||
}
|
||||
if (elem is PdfName)
|
||||
{
|
||||
return ((PdfName)elem).Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
8
VAR.PdfTools/PdfElements/PdfInteger.cs
Normal file
8
VAR.PdfTools/PdfElements/PdfInteger.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfInteger : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Integer; } }
|
||||
public long Value { get; set; }
|
||||
}
|
||||
}
|
||||
8
VAR.PdfTools/PdfElements/PdfName.cs
Normal file
8
VAR.PdfTools/PdfElements/PdfName.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfName : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Name; } }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
}
|
||||
7
VAR.PdfTools/PdfElements/PdfNull.cs
Normal file
7
VAR.PdfTools/PdfElements/PdfNull.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfNull : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Null; } }
|
||||
}
|
||||
}
|
||||
11
VAR.PdfTools/PdfElements/PdfObject.cs
Normal file
11
VAR.PdfTools/PdfElements/PdfObject.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfObject : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Object; } }
|
||||
public int ObjectID { get; set; }
|
||||
public int ObjectGeneration { get; set; }
|
||||
public IPdfElement Data { get; set; }
|
||||
public int UsageCount { get; set; }
|
||||
}
|
||||
}
|
||||
9
VAR.PdfTools/PdfElements/PdfObjectReference.cs
Normal file
9
VAR.PdfTools/PdfElements/PdfObjectReference.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfObjectReference : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.ObjectReference; } }
|
||||
public int ObjectID { get; set; }
|
||||
public int ObjectGeneration { get; set; }
|
||||
}
|
||||
}
|
||||
8
VAR.PdfTools/PdfElements/PdfReal.cs
Normal file
8
VAR.PdfTools/PdfElements/PdfReal.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfReal : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Real; } }
|
||||
public double Value { get; set; }
|
||||
}
|
||||
}
|
||||
12
VAR.PdfTools/PdfElements/PdfStream.cs
Normal file
12
VAR.PdfTools/PdfElements/PdfStream.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfStream : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.Stream; } }
|
||||
public PdfDictionary Dictionary { get; set; }
|
||||
public byte[] Data { get; set; }
|
||||
|
||||
public byte[] OriginalData { get; set; }
|
||||
public IPdfElement OriginalFilter { get; set; }
|
||||
}
|
||||
}
|
||||
8
VAR.PdfTools/PdfElements/PdfString.cs
Normal file
8
VAR.PdfTools/PdfElements/PdfString.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace VAR.PdfTools.PdfElements
|
||||
{
|
||||
public class PdfString : IPdfElement
|
||||
{
|
||||
public PdfElementTypes Type { get { return PdfElementTypes.String; } }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
|
||||
@@ -1,158 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using VAR.PdfTools.Maths;
|
||||
using VAR.PdfTools.PdfElements;
|
||||
|
||||
namespace VAR.PdfTools
|
||||
{
|
||||
public class Vector3D
|
||||
{
|
||||
#region Declarations
|
||||
|
||||
public double[] _vector = new double[3];
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public double[] Vector { get { return _vector; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Creator
|
||||
|
||||
public Vector3D()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
_vector[0] = 0.0;
|
||||
_vector[1] = 0.0;
|
||||
_vector[2] = 1.0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class Matrix3x3
|
||||
{
|
||||
#region Declarations
|
||||
|
||||
public double[,] _matrix = new double[3, 3];
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public double[,] Matrix { get { return _matrix; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Creator
|
||||
|
||||
public Matrix3x3()
|
||||
{
|
||||
Idenity();
|
||||
}
|
||||
|
||||
public Matrix3x3(double a, double b, double c, double d, double e, double f)
|
||||
{
|
||||
Set(a, b, c, d, e, f);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
|
||||
public void Idenity()
|
||||
{
|
||||
_matrix[0, 0] = 1.0;
|
||||
_matrix[0, 1] = 0.0;
|
||||
_matrix[0, 2] = 0.0;
|
||||
_matrix[1, 0] = 0.0;
|
||||
_matrix[1, 1] = 1.0;
|
||||
_matrix[1, 2] = 0.0;
|
||||
_matrix[2, 0] = 0.0;
|
||||
_matrix[2, 1] = 0.0;
|
||||
_matrix[2, 2] = 1.0;
|
||||
}
|
||||
|
||||
public void Set(double a, double b, double c, double d, double e, double f)
|
||||
{
|
||||
_matrix[0, 0] = a;
|
||||
_matrix[1, 0] = b;
|
||||
_matrix[2, 0] = 0;
|
||||
_matrix[0, 1] = c;
|
||||
_matrix[1, 1] = d;
|
||||
_matrix[2, 1] = 0;
|
||||
_matrix[0, 2] = e;
|
||||
_matrix[1, 2] = f;
|
||||
_matrix[2, 2] = 1;
|
||||
}
|
||||
|
||||
public Vector3D Multiply(Vector3D vect)
|
||||
{
|
||||
Vector3D vectResult = new Vector3D();
|
||||
|
||||
vectResult.Vector[0] = (vect.Vector[0] * _matrix[0, 0]) + (vect.Vector[1] * _matrix[0, 1]) + (vect.Vector[2] * _matrix[0, 2]);
|
||||
vectResult.Vector[1] = (vect.Vector[0] * _matrix[1, 0]) + (vect.Vector[1] * _matrix[1, 1]) + (vect.Vector[2] * _matrix[1, 2]);
|
||||
vectResult.Vector[2] = (vect.Vector[0] * _matrix[2, 0]) + (vect.Vector[1] * _matrix[2, 1]) + (vect.Vector[2] * _matrix[2, 2]);
|
||||
|
||||
return vectResult;
|
||||
}
|
||||
|
||||
public Matrix3x3 Multiply(Matrix3x3 matrix)
|
||||
{
|
||||
Matrix3x3 newMatrix = new Matrix3x3();
|
||||
|
||||
newMatrix._matrix[0, 0] = (_matrix[0, 0] * matrix._matrix[0, 0]) + (_matrix[1, 0] * matrix._matrix[0, 1]) + (_matrix[2, 0] * matrix._matrix[0, 2]);
|
||||
newMatrix._matrix[0, 1] = (_matrix[0, 1] * matrix._matrix[0, 0]) + (_matrix[1, 1] * matrix._matrix[0, 1]) + (_matrix[2, 1] * matrix._matrix[0, 2]);
|
||||
newMatrix._matrix[0, 2] = (_matrix[0, 2] * matrix._matrix[0, 0]) + (_matrix[1, 2] * matrix._matrix[0, 1]) + (_matrix[2, 2] * matrix._matrix[0, 2]);
|
||||
newMatrix._matrix[1, 0] = (_matrix[0, 0] * matrix._matrix[1, 0]) + (_matrix[1, 0] * matrix._matrix[1, 1]) + (_matrix[2, 0] * matrix._matrix[1, 2]);
|
||||
newMatrix._matrix[1, 1] = (_matrix[0, 1] * matrix._matrix[1, 0]) + (_matrix[1, 1] * matrix._matrix[1, 1]) + (_matrix[2, 1] * matrix._matrix[1, 2]);
|
||||
newMatrix._matrix[1, 2] = (_matrix[0, 2] * matrix._matrix[1, 0]) + (_matrix[1, 2] * matrix._matrix[1, 1]) + (_matrix[2, 2] * matrix._matrix[1, 2]);
|
||||
newMatrix._matrix[2, 0] = (_matrix[0, 0] * matrix._matrix[2, 0]) + (_matrix[1, 0] * matrix._matrix[2, 1]) + (_matrix[2, 0] * matrix._matrix[2, 2]);
|
||||
newMatrix._matrix[2, 1] = (_matrix[0, 1] * matrix._matrix[2, 0]) + (_matrix[1, 1] * matrix._matrix[2, 1]) + (_matrix[2, 1] * matrix._matrix[2, 2]);
|
||||
newMatrix._matrix[2, 2] = (_matrix[0, 2] * matrix._matrix[2, 0]) + (_matrix[1, 2] * matrix._matrix[2, 1]) + (_matrix[2, 2] * matrix._matrix[2, 2]);
|
||||
|
||||
return newMatrix;
|
||||
}
|
||||
|
||||
public Matrix3x3 Copy()
|
||||
{
|
||||
Matrix3x3 newMatrix = new Matrix3x3();
|
||||
|
||||
newMatrix._matrix[0, 0] = _matrix[0, 0];
|
||||
newMatrix._matrix[0, 1] = _matrix[0, 1];
|
||||
newMatrix._matrix[0, 2] = _matrix[0, 2];
|
||||
newMatrix._matrix[1, 0] = _matrix[1, 0];
|
||||
newMatrix._matrix[1, 1] = _matrix[1, 1];
|
||||
newMatrix._matrix[1, 2] = _matrix[1, 2];
|
||||
newMatrix._matrix[2, 0] = _matrix[2, 0];
|
||||
newMatrix._matrix[2, 1] = _matrix[2, 1];
|
||||
newMatrix._matrix[2, 2] = _matrix[2, 2];
|
||||
|
||||
return newMatrix;
|
||||
}
|
||||
|
||||
public bool IsCollinear(Matrix3x3 otherMatrix, double horizontalDelta = 0.00001, double verticalDelta = 0.00001)
|
||||
{
|
||||
double epsilon = 0.00001;
|
||||
return (
|
||||
Math.Abs(_matrix[0, 0] - otherMatrix.Matrix[0, 0]) <= epsilon &&
|
||||
Math.Abs(_matrix[1, 0] - otherMatrix.Matrix[1, 0]) <= epsilon &&
|
||||
Math.Abs(_matrix[0, 1] - otherMatrix.Matrix[0, 1]) <= epsilon &&
|
||||
Math.Abs(_matrix[1, 1] - otherMatrix.Matrix[1, 1]) <= epsilon &&
|
||||
Math.Abs(_matrix[0, 2] - otherMatrix.Matrix[0, 2]) <= horizontalDelta &&
|
||||
Math.Abs(_matrix[1, 2] - otherMatrix.Matrix[1, 2]) <= verticalDelta &&
|
||||
true);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public struct PdfCharElement
|
||||
{
|
||||
public string Char;
|
||||
@@ -396,8 +249,7 @@ namespace VAR.PdfTools
|
||||
_graphicsMatrix = _graphicsMatrixStack[_graphicsMatrixStack.Count - 1];
|
||||
_graphicsMatrixStack.RemoveAt(_graphicsMatrixStack.Count - 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void OpBeginText()
|
||||
{
|
||||
_textMatrix.Idenity();
|
||||
@@ -417,8 +269,7 @@ namespace VAR.PdfTools
|
||||
_font = _page.Fonts[fontName];
|
||||
_fontSize = size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void OpTextCharSpacing(double charSpacing)
|
||||
{
|
||||
_charSpacing = charSpacing;
|
||||
|
||||
@@ -60,16 +60,31 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Maths\Matrix3x3.cs" />
|
||||
<Compile Include="PdfContentAction.cs" />
|
||||
<Compile Include="PdfDocument.cs" />
|
||||
<Compile Include="PdfDocumentPage.cs" />
|
||||
<Compile Include="PdfElements.cs" />
|
||||
<Compile Include="PdfElements\IPdfElement.cs" />
|
||||
<Compile Include="PdfElements\PdfArray.cs" />
|
||||
<Compile Include="PdfElements\PdfBoolean.cs" />
|
||||
<Compile Include="PdfElements\PdfDictionary.cs" />
|
||||
<Compile Include="PdfElements\PdfElementTypes.cs" />
|
||||
<Compile Include="PdfElements\PdfElementUtils.cs" />
|
||||
<Compile Include="PdfFilters.cs" />
|
||||
<Compile Include="PdfFont.cs" />
|
||||
<Compile Include="PdfElements\PdfInteger.cs" />
|
||||
<Compile Include="PdfElements\PdfName.cs" />
|
||||
<Compile Include="PdfElements\PdfNull.cs" />
|
||||
<Compile Include="PdfElements\PdfObject.cs" />
|
||||
<Compile Include="PdfElements\PdfObjectReference.cs" />
|
||||
<Compile Include="PdfElements\PdfReal.cs" />
|
||||
<Compile Include="PdfElements\PdfStream.cs" />
|
||||
<Compile Include="PdfElements\PdfString.cs" />
|
||||
<Compile Include="PdfParser.cs" />
|
||||
<Compile Include="PdfStandar14FontMetrics.cs" />
|
||||
<Compile Include="PdfTextExtractor.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Maths\Vector3D.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="NuGet\keep.txt" />
|
||||
|
||||
Reference in New Issue
Block a user