Namespace pdftron.Common
Classes
ByteRange
This class represents a Byte Range.
Iterator<T>
Matrix2D
2D Matrix
A Matrix2D object represents a 3x3 matrix that, in turn, represents an affine transformation.
A Matrix2D object stores only six of the nine numbers in a 3x3 matrix because all 3x3
matrices that represent affine transformations have the same third column (0, 0, 1).
Affine transformations include rotating, scaling, reflecting, shearing, and translating.
In PDFNet, the Matrix2D class provides the foundation for performing affine transformations
on vector drawings, images, and text.
A transformation matrix specifies the relationship between two coordinate spaces.
By modifying a transformation matrix, objects can be scaled, rotated, translated,
or transformed in other ways.
A transformation matrix in PDF is specified by six numbers, usually in the form
of an array containing six elements. In its most general form, this array is denoted
[a b c d h v]; The following table lists the arrays that specify the most common
transformations:
<ul><li>
Translations are specified as [1 0 0 1 tx ty], where tx and ty are the distances
to translate the origin of the coordinate system in the horizontal and vertical
dimensions, respectively.
</li><li>
Scaling is obtained by [sx 0 0 sy 0 0]. This scales the coordinates so that 1
unit in the horizontal and vertical dimensions of the new coordinate system is
the same size as sx and sy units, respectively, in the previous coordinate system.
</li><li>
Rotations are produced by [cos(A) sin(A) -sin(A) cos(A) 0 0], which has the effect
of rotating the coordinate system axes by an angle 'A' counterclockwise.
</li><li>
Skew is specified by [1 tan(A) tan(B) 1 0 0], which skews the x axis by an angle
A and the y axis by an angle B.
Matrix2D elements are positioned as follows :
| m_a m_b 0 |
| m_c m_d 0 |
| m_h m_v 1 |
A single Matrix2D object can store a single transformation or a sequence of transformations.
The latter is called a composite transformation. The matrix of a composite transformation is
obtained by multiplying (concatenating) the matrices of the individual transformations.
Because matrix multiplication is not commutative-the order in which matrices are multiplied
is significant. For example, if you first rotate, then scale, then translate, you get a
different result than if you first translate, then rotate, then scale.
For more information on properties of PDF matrices please refer to PDF Reference Manual
(Sections 4.2 'Coordinate Systems' and 4.2.3 'Transformation Matrices')
<example>
The following sample illustrates how to use Matrix2D in order to position
an image on the page. Note that PDFNet uses the same convention of matrix
multiplication used in PostScript and OpenGL.
<pre><code class="lang-csharp">Element element = eb.CreateImage(Image(...));
double deg2rad = 3.1415926535 / 180.0;
Matrix2D mtx = Matrix2D(1, 0, 0, 1, 0, 200); // Translate
mtx.multiply(Matrix2D(300, 0, 0, 200, 0, 0)); // Scale
mtx.multiply(Matrix2D.RotationMatrix( 90 * deg2rad )); // Rotate
element.GetGState().SetTransform(mtx);
writer.WritePlacedElement(element);</code></pre>
The following sample sample illustrates how to use Matrix2D in order to calculate
absolute positioning for the text on the page.
<pre><code class="lang-csharp">...
Matrix2D text_mtx = text_element.GetTextMatrix();
double x, y;
for (CharIterator itr = text_element.getCharIterator(); itr.HasNext(); itr.Next()) {
x = itr.current().x; // character positioning information
y = itr.current().y;</code></pre>
Get current transformation matrix (CTM)
<pre><code class="lang-csharp">Matrix2D ctm = text_element.getCTM();</code></pre>
To get the absolute character positioning information concatenate current
text matrix with CTM and then multiply relative postitioning coordinates with
the resulting matrix.
<pre><code class="lang-csharp">Matrix2D mtx = ctm.multiply(text_mtx);
mtx.multPoint(x, y);</code></pre>
</example>
PDFNetException
PDFNetException is derived from the standard exception class and it is a superclass for all PDFNet library exceptions.
ProgressMonitor
ProgressMonitor is an interface that an application can use to indicate the progress of a lengthy operation (such as PDFDoc.Save()).
ProgressMonitor has a range and a current position. The range represents the entire duration of the operation, and the current position represents the progress the application has made toward completing the operation.
Utility
A set of utilty functions