mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
Switch annotation flattening to use the form xobjects
Instead of directly putting the contents of the annotation appearance streams into the page's content stream, add commands to render the form xobjects directly. This is a more robust way to do it than the original solution as it works properly with patterns and avoids problems with resource name clashes between the pages and the form xobjects.
This commit is contained in:
parent
23bcfeb336
commit
f78ea057ca
14
ChangeLog
14
ChangeLog
@ -1,6 +1,6 @@
|
||||
2018-12-31 Jay Berkenbilt <ejb@ql.org>
|
||||
|
||||
* Add several methods for flattening form fields and annotations:
|
||||
* Add methods for flattening form fields and annotations:
|
||||
- QPDFPageDocumentHelper::flattenAnnotations - integrate
|
||||
annotation appearance streams into page contents with special
|
||||
handling for form fields: if appearance streams are up to date
|
||||
@ -11,15 +11,11 @@
|
||||
be found.
|
||||
- QPDFAnnotationObjectHelper::getPageContentForAppearance -
|
||||
generate the content stream fragment to render an appearance
|
||||
stream in a page's content stream. Called by flattenAnnotations.
|
||||
- QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix -
|
||||
calculate the matrix that will transform from the appearance
|
||||
stream coordinates to the page coordinates. Called by
|
||||
getPageContentForAppearance.
|
||||
stream in a page's content stream as a form xobject. Called by
|
||||
flattenAnnotations.
|
||||
|
||||
* Add method QPDFObjectHandle::mergeDictionary(), which
|
||||
recursively merges dictionaries with semantics designed for
|
||||
merging resource dictionaries. See detailed description in
|
||||
* Add method QPDFObjectHandle::mergeResources(), which merges
|
||||
resource dictionaries. See detailed description in
|
||||
QPDFObjectHandle.hh.
|
||||
|
||||
* Add QPDFObjectHandle::Matrix, similar to
|
||||
|
@ -72,23 +72,14 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper
|
||||
QPDFObjectHandle getAppearanceStream(std::string const& which,
|
||||
std::string const& state = "");
|
||||
|
||||
// Return a matrix that transforms from the annotation's
|
||||
// appearance stream's coordinates to the page's coordinates. This
|
||||
// method also honors the annotation's NoRotate flag if set. The
|
||||
// matrix is returned as a string representing the six floating
|
||||
// point numbers to be passed to a cm operator. Returns the empty
|
||||
// string if it is unable to compute the matrix for any reason.
|
||||
// The value "rotate" should be set to the page's /Rotate value or
|
||||
// 0 if none.
|
||||
QPDF_DLL
|
||||
std::string getAnnotationAppearanceMatrix(int rotate);
|
||||
|
||||
// Generate text suitable for addition to the containing page's
|
||||
// content stream that replaces this annotation's appearance
|
||||
// stream. The value "rotate" should be set to the page's /Rotate
|
||||
// value or 0 if none.
|
||||
// content stream that draws this annotation's appearance stream
|
||||
// as a form XObject. The value "name" is the resource name that
|
||||
// will be used to refer to the form xobject. The value "rotate"
|
||||
// should be set to the page's /Rotate value or 0 if none.
|
||||
QPDF_DLL
|
||||
std::string getPageContentForAppearance(int rotate);
|
||||
std::string getPageContentForAppearance(
|
||||
std::string const& name, int rotate);
|
||||
|
||||
private:
|
||||
class Members
|
||||
|
@ -559,27 +559,46 @@ class QPDFObjectHandle
|
||||
QPDF_DLL
|
||||
bool isOrHasName(std::string const&);
|
||||
|
||||
// Merge dictionaries with the following behavior, where "object"
|
||||
// refers to the object whose method is invoked, and "other"
|
||||
// refers to the argument:
|
||||
// * If either object or other is not a dictionary, do nothing
|
||||
// * Otherwise
|
||||
// * For each key in other
|
||||
// * If key is absent in object, insert it
|
||||
// * If key is present in object
|
||||
// * If both values are dictionaries, merge the dictionary from
|
||||
// other into the one from object
|
||||
// * If both values are arrays, append scalar elements from
|
||||
// other's that are not present in object's onto object's,
|
||||
// and ignore non-scalar elements in other's
|
||||
// * Otherwise ignore
|
||||
// Merge resource dictionaries. Assumes resource dictionaries have
|
||||
// the property that the collection of keys of all first-level
|
||||
// dictionary members contains no duplicates. This method does
|
||||
// nothing if both this object and the other object are not
|
||||
// dictionaries. Otherwise, it has following behavior, where
|
||||
// "object" refers to the object whose method is invoked, and
|
||||
// "other" refers to the argument:
|
||||
//
|
||||
// * For each key in "other" whose value is an array:
|
||||
// * If "object" does not have that entry, shallow copy it.
|
||||
// * Otherwise, if "object" has an array in the same place,
|
||||
// append to that array any objects in "other"'s array that
|
||||
// are not already present.
|
||||
// * For each key in "other" whose value is a dictionary:
|
||||
// * If "object" does not have that entry, shallow copy it.
|
||||
// * Otherwise, for each key in the subdictionary:
|
||||
// * If key is not present in "object"'s entry, shallow copy it.
|
||||
// * Otherwise, ignore. Conflicts are not detected.
|
||||
//
|
||||
// The primary purpose of this method is to facilitate merging of
|
||||
// resource dictionaries. Conflicts are ignored. If needed, a
|
||||
// future version of qpdf may provide some mechanism for conflict
|
||||
// resolution, such as providing a handler that is invoked with
|
||||
// the path to the conflict.
|
||||
// resource dictionaries that are supposed to have the same scope
|
||||
// as each other. For example, this can be used to merge a form
|
||||
// XObject's /Resources dictionary with a form field's /DR.
|
||||
// Conflicts are not detected. If, in the future, there should be
|
||||
// a need to detect conflicts, this method could detect them and
|
||||
// return a mapping from old to new names. This mapping could be
|
||||
// used for filtering the stream. This would be necessary, for
|
||||
// example, to merge a form XObject's resources with a page's
|
||||
// resources with the intention of concatenating the content
|
||||
// streams.
|
||||
QPDF_DLL
|
||||
void mergeDictionary(QPDFObjectHandle other);
|
||||
void mergeResources(QPDFObjectHandle other);
|
||||
|
||||
// Get all resource names from a resourcey dictionary. If this
|
||||
// object is a dctionary, this method returns a set of all the
|
||||
// keys in all top-level subdictionaries. For resources
|
||||
// dictionaries, this is the collection of names that may be
|
||||
// referenced in the content stream.
|
||||
QPDF_DLL
|
||||
std::set<std::string> getResourceNames();
|
||||
|
||||
// Return the QPDF object that owns an indirect object. Returns
|
||||
// null for a direct object.
|
||||
@ -992,10 +1011,6 @@ class QPDFObjectHandle
|
||||
ParserCallbacks* callbacks);
|
||||
std::vector<QPDFObjectHandle> arrayOrStreamToStreamArray(
|
||||
std::string const& description, std::string& all_description);
|
||||
void mergeDictionaryInternal(
|
||||
QPDFObjectHandle other,
|
||||
std::set<QPDFObjGen>& visiting,
|
||||
int depth);
|
||||
static void warn(QPDF*, QPDFExc const&);
|
||||
|
||||
class Members
|
||||
|
@ -80,19 +80,66 @@ QPDFAnnotationObjectHelper::getAppearanceStream(
|
||||
}
|
||||
|
||||
std::string
|
||||
QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
QPDFAnnotationObjectHelper::getPageContentForAppearance(
|
||||
std::string const& name, int rotate)
|
||||
{
|
||||
// The appearance matrix is the transformation in effect when
|
||||
// rendering an appearance stream's content. The appearance stream
|
||||
// itself is a form XObject, which has a /BBox and an optional
|
||||
// /Matrix. The /BBox describes the bounding box of the annotation
|
||||
// in unrotated page coordinates. /Matrix may be applied to the
|
||||
// bounding box to transform the bounding box. The effect of this
|
||||
// is that the transformed box is still fit within the area the
|
||||
// annotation designates in its /Rect field.
|
||||
if (! getAppearanceStream("/N").isStream())
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// The algorithm for computing the appearance matrix described in
|
||||
// section 12.5.5 of the ISO-32000 PDF spec. It is as follows:
|
||||
// The appearance matrix computed by this method is the
|
||||
// transformation matrix that needs to be in effect when drawing
|
||||
// this annotation's appearance stream on the page. The algorithm
|
||||
// for computing the appearance matrix described in section 12.5.5
|
||||
// of the ISO-32000 PDF spec is similar but not identical to what
|
||||
// we are doing here.
|
||||
|
||||
// When rendering an appearance stream associated with an
|
||||
// annotation, there are four relevant components:
|
||||
//
|
||||
// * The appearance stream's bounding box (/BBox)
|
||||
// * The appearance stream's matrix (/Matrix)
|
||||
// * The annotation's rectangle (/Rect)
|
||||
// * In the case of form fields with the NoRotate flag, the
|
||||
// page's rotation
|
||||
|
||||
// When rendering a form xobject in isolation, just drawn with a
|
||||
// /Do operator, the is no form field, so page rotation is not
|
||||
// relevant, and there is no annotation, so /Rect is not relevant,
|
||||
// so only /BBox and /Matrix are relevant. The effect of these are
|
||||
// as follows:
|
||||
|
||||
// * /BBox is treated as a clipping region
|
||||
// * /Matrix is applied as a transformation prior to rendering the
|
||||
// appearance stream.
|
||||
|
||||
// There is no relationship between /BBox and /Matrix in this
|
||||
// case.
|
||||
|
||||
// When rendering a form xobject in the context of an annotation,
|
||||
// things are a little different. In particular, a matrix is
|
||||
// established such that /BBox, when transformed by /Matrix, would
|
||||
// fit completely inside of /Rect. /BBox is no longer a clipping
|
||||
// region. To illustrate the difference, consider a /Matrix of
|
||||
// [2 0 0 2 0 0], which is scaling by a factor of two along both
|
||||
// axes. If the appearance stream drew a rectangle equal to /BBox,
|
||||
// in the case of the form xobject in isolation, this matrix would
|
||||
// cause only the lower-left quadrant of the rectangle to be
|
||||
// visible since the scaling would cause the rest of it to fall
|
||||
// outside of the clipping region. In the case of the form xobject
|
||||
// displayed in the context of an annotation, such a matrix would
|
||||
// have no effect at all because it would be applied to the
|
||||
// bounding box first, and then when the resulting enclosing
|
||||
// quadrilateral was transformed to fit into /Rect, the effect of
|
||||
// the scaling would be undone.
|
||||
|
||||
// Our job is to create a transformation matrix that compensates
|
||||
// for these differences so that the appearance stream of an
|
||||
// annotation can be drawn as a regular form xobject.
|
||||
|
||||
// To do this, we perform the following steps, which overlap
|
||||
// significantly with the algorithm in 12.5.5:
|
||||
|
||||
// 1. Transform the four corners of /BBox by applying /Matrix to
|
||||
// them, creating an arbitrarily transformed quadrilateral.
|
||||
@ -103,38 +150,22 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
|
||||
// 3. Compute matrix A that maps the lower left and upper right
|
||||
// corners of T to the annotation's /Rect. This can be done by
|
||||
// translating the lower left corner and then scaling so that
|
||||
// the upper right corner also matches.
|
||||
// scaling so that the sizes match and translating so that the
|
||||
// scaled T exactly overlaps /Rect.
|
||||
|
||||
// 4. Concatenate /Matrix to A to get matrix AA. This matrix
|
||||
// translates from appearance stream coordinates to page
|
||||
// coordinates.
|
||||
// If the annotation's /F flag has bit 4 set, this means that
|
||||
// annotation is to be rotated about its upper left corner to
|
||||
// counteract any rotation of the page so it remains upright. To
|
||||
// achieve this effect, we do the following extra steps:
|
||||
|
||||
// If the annotation's /F flag has bit 4 set, we modify the matrix
|
||||
// to also rotate the annotation in the opposite direction, and we
|
||||
// adjust the destination rectangle by rotating it about the upper
|
||||
// left hand corner so that the annotation will appear upright on
|
||||
// the rotated page.
|
||||
// 1. Perform the rotation on /BBox box prior to transforming it
|
||||
// with /Matrix (by replacing matrix with concatenation of
|
||||
// matrix onto the rotation)
|
||||
|
||||
// You can see that the above algorithm works by imagining the
|
||||
// following:
|
||||
// 2. Rotate the destination rectangle by the specified amount
|
||||
|
||||
// * In the simple case of where /BBox = /Rect and /Matrix is the
|
||||
// identity matrix, the transformed quadrilateral in step 1 will
|
||||
// be the bounding box. Since the bounding box is upright, T
|
||||
// will be the bounding box. Since /BBox = /Rect, matrix A is
|
||||
// the identity matrix, and matrix AA in step 4 is also the
|
||||
// identity matrix.
|
||||
//
|
||||
// * Imagine that the rectangle is different from the bounding
|
||||
// box. In this case, matrix A just transforms the bounding box
|
||||
// to the rectangle by scaling and translating, effectively
|
||||
// squeezing or stretching it into /Rect.
|
||||
//
|
||||
// * Imagine that /Matrix rotates the annotation by 30 degrees.
|
||||
// The transformed bounding box would stick out, and T would be
|
||||
// too big. In this case, matrix A shrinks T down until it fits
|
||||
// in /Rect.
|
||||
// 3. Apply the rotation to A as computed above to get the final
|
||||
// appearance matrix.
|
||||
|
||||
QPDFObjectHandle rect_obj = this->oh.getKey("/Rect");
|
||||
QPDFObjectHandle flags = this->oh.getKey("/F");
|
||||
@ -157,7 +188,9 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix");
|
||||
}
|
||||
QPDFObjectHandle::Rectangle rect = rect_obj.getArrayAsRectangle();
|
||||
if (rotate && flags.isInteger() && (flags.getIntValue() & 16))
|
||||
bool do_rotate = (rotate && flags.isInteger() &&
|
||||
(flags.getIntValue() & 16));
|
||||
if (do_rotate)
|
||||
{
|
||||
// If the the annotation flags include the NoRotate bit and
|
||||
// the page is rotated, we have to rotate the annotation about
|
||||
@ -229,39 +262,15 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
AA.scale((rect.urx - rect.llx) / (t_urx - t_llx),
|
||||
(rect.ury - rect.lly) / (t_ury - t_lly));
|
||||
AA.translate(-t_llx, -t_lly);
|
||||
// Concatenate the user-specified matrix
|
||||
AA.concat(matrix);
|
||||
return AA.unparse();
|
||||
}
|
||||
|
||||
std::string
|
||||
QPDFAnnotationObjectHelper::getPageContentForAppearance(int rotate)
|
||||
{
|
||||
QPDFObjectHandle as = getAppearanceStream("/N");
|
||||
if (! (as.isStream() && as.getDict().getKey("/BBox").isRectangle()))
|
||||
if (do_rotate)
|
||||
{
|
||||
return "";
|
||||
AA.rotatex90(rotate);
|
||||
}
|
||||
|
||||
QPDFObjectHandle::Rectangle rect =
|
||||
as.getDict().getKey("/BBox").getArrayAsRectangle();
|
||||
std::string cm = getAnnotationAppearanceMatrix(rotate);
|
||||
if (cm.empty())
|
||||
{
|
||||
return "";
|
||||
}
|
||||
std::string as_content = (
|
||||
as.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"));
|
||||
return (
|
||||
"q\n" +
|
||||
cm + " cm\n" +
|
||||
QUtil::double_to_string(rect.llx, 5) + " " +
|
||||
QUtil::double_to_string(rect.lly, 5) + " " +
|
||||
QUtil::double_to_string(rect.urx - rect.llx, 5) + " " +
|
||||
QUtil::double_to_string(rect.ury - rect.lly, 5) + " " +
|
||||
"re W n\n");
|
||||
PointerHolder<Buffer> buf = as.getStreamData(qpdf_dl_all);
|
||||
as_content += std::string(
|
||||
reinterpret_cast<char *>(buf->getBuffer()),
|
||||
buf->getSize());
|
||||
as_content += "\nQ\n";
|
||||
return as_content;
|
||||
AA.unparse() + " cm\n" +
|
||||
name + " Do\n" +
|
||||
"Q\n");
|
||||
}
|
||||
|
@ -826,23 +826,8 @@ QPDFObjectHandle::isOrHasName(std::string const& value)
|
||||
}
|
||||
|
||||
void
|
||||
QPDFObjectHandle::mergeDictionary(QPDFObjectHandle other)
|
||||
QPDFObjectHandle::mergeResources(QPDFObjectHandle other)
|
||||
{
|
||||
std::set<QPDFObjGen> visiting;
|
||||
mergeDictionaryInternal(other, visiting, 0);
|
||||
}
|
||||
|
||||
void
|
||||
QPDFObjectHandle::mergeDictionaryInternal(
|
||||
QPDFObjectHandle other,
|
||||
std::set<QPDFObjGen>& visiting,
|
||||
int depth)
|
||||
{
|
||||
if (depth > 100)
|
||||
{
|
||||
// Arbitrarily limit depth to avoid stack overflow
|
||||
return;
|
||||
}
|
||||
if (! (isDictionary() && other.isDictionary()))
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFObjectHandle merge top type mismatch");
|
||||
@ -859,33 +844,22 @@ QPDFObjectHandle::mergeDictionaryInternal(
|
||||
QPDFObjectHandle this_val = getKey(key);
|
||||
if (this_val.isDictionary() && other_val.isDictionary())
|
||||
{
|
||||
if (this_val.isIndirect() && other_val.isIndirect() &&
|
||||
(this_val.getObjGen() == other_val.getObjGen()))
|
||||
if (this_val.isIndirect())
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFObjectHandle merge equal indirect");
|
||||
QTC::TC("qpdf", "QPDFObjectHandle replace with copy");
|
||||
this_val = this_val.shallowCopy();
|
||||
replaceKey(key, this_val);
|
||||
}
|
||||
else if (this_val.isIndirect() &&
|
||||
(visiting.count(this_val.getObjGen())))
|
||||
std::set<std::string> other_val_keys = other_val.getKeys();
|
||||
for (std::set<std::string>::iterator i2 =
|
||||
other_val_keys.begin();
|
||||
i2 != other_val_keys.end(); ++i2)
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFObjectHandle merge loop");
|
||||
}
|
||||
else
|
||||
{
|
||||
QPDFObjGen loop;
|
||||
if (this_val.isIndirect())
|
||||
if (! this_val.hasKey(*i2))
|
||||
{
|
||||
loop = this_val.getObjGen();
|
||||
visiting.insert(loop);
|
||||
QTC::TC("qpdf", "QPDFObjectHandle merge shallow copy");
|
||||
this_val = this_val.shallowCopy();
|
||||
replaceKey(key, this_val);
|
||||
}
|
||||
QTC::TC("qpdf", "QPDFObjectHandle nested merge");
|
||||
this_val.mergeDictionaryInternal(
|
||||
other_val, visiting, 1 + depth);
|
||||
if (loop.getObj())
|
||||
{
|
||||
visiting.erase(loop);
|
||||
this_val.replaceKey(
|
||||
*i2, other_val.getKey(*i2).shallowCopy());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -923,11 +897,39 @@ QPDFObjectHandle::mergeDictionaryInternal(
|
||||
else
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFObjectHandle merge copy from other");
|
||||
replaceKey(key, other_val);
|
||||
replaceKey(key, other_val.shallowCopy());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::set<std::string>
|
||||
QPDFObjectHandle::getResourceNames()
|
||||
{
|
||||
// Return second-level dictionary keys
|
||||
std::set<std::string> result;
|
||||
if (! isDictionary())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
std::set<std::string> keys = getKeys();
|
||||
for (std::set<std::string>::iterator iter = keys.begin();
|
||||
iter != keys.end(); ++iter)
|
||||
{
|
||||
std::string const& key = *iter;
|
||||
QPDFObjectHandle val = getKey(key);
|
||||
if (val.isDictionary())
|
||||
{
|
||||
std::set<std::string> val_keys = val.getKeys();
|
||||
for (std::set<std::string>::iterator i2 = val_keys.begin();
|
||||
i2 != val_keys.end(); ++i2)
|
||||
{
|
||||
result.insert(*i2);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Indirect object accessors
|
||||
QPDF*
|
||||
QPDFObjectHandle::getOwningQPDF()
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <qpdf/QPDFPageDocumentHelper.hh>
|
||||
#include <qpdf/QPDFAcroFormDocumentHelper.hh>
|
||||
#include <qpdf/QUtil.hh>
|
||||
#include <qpdf/QTC.hh>
|
||||
|
||||
QPDFPageDocumentHelper::Members::~Members()
|
||||
@ -121,6 +122,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
|
||||
{
|
||||
rotate = rotate_obj.getIntValue();
|
||||
}
|
||||
int next_fx = 1;
|
||||
for (std::vector<QPDFAnnotationObjectHelper>::iterator iter =
|
||||
annots.begin();
|
||||
iter != annots.end(); ++iter)
|
||||
@ -140,18 +142,50 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
|
||||
}
|
||||
if (process)
|
||||
{
|
||||
resources.mergeDictionary(as.getDict().getKey("/Resources"));
|
||||
if (is_widget)
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper merge DR");
|
||||
QPDFFormFieldObjectHelper ff = afdh.getFieldForAnnotation(aoh);
|
||||
resources.mergeDictionary(ff.getInheritableFieldValue("/DR"));
|
||||
QPDFObjectHandle as_resources =
|
||||
as.getDict().getKey("/Resources");
|
||||
if (as_resources.isIndirect())
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper indirect as resources");
|
||||
as.getDict().replaceKey(
|
||||
"/Resources", as_resources.shallowCopy());
|
||||
as_resources = as.getDict().getKey("/Resources");
|
||||
}
|
||||
as_resources.mergeResources(
|
||||
ff.getInheritableFieldValue("/DR"));
|
||||
}
|
||||
else
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper non-widget annotation");
|
||||
}
|
||||
new_content += aoh.getPageContentForAppearance(rotate);
|
||||
std::set<std::string> names = resources.getResourceNames();
|
||||
std::string name;
|
||||
while (next_fx < 1000000)
|
||||
{
|
||||
std::string candidate = "/Fxo" + QUtil::int_to_string(next_fx);
|
||||
++next_fx;
|
||||
if (names.count(candidate) == 0)
|
||||
{
|
||||
name = candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (name.empty())
|
||||
{
|
||||
// There are already more than a million /Fxo names.
|
||||
// Somehow I doubt this is going to actually happen.
|
||||
// Just pick a name and forget conflicts.
|
||||
name = "/FxConflict";
|
||||
}
|
||||
resources.mergeResources(
|
||||
QPDFObjectHandle::parse(
|
||||
"<< /XObject << " + name + " null >> >>"));
|
||||
resources.getKey("/XObject").replaceKey(name, as);
|
||||
new_content += aoh.getPageContentForAppearance(name, rotate);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -371,12 +371,9 @@ qpdf required parameter 0
|
||||
qpdf required choices 0
|
||||
QPDFObjectHandle merge top type mismatch 0
|
||||
QPDFObjectHandle merge shallow copy 0
|
||||
QPDFObjectHandle nested merge 0
|
||||
QPDFObjectHandle merge array 0
|
||||
QPDFObjectHandle merge array dup 0
|
||||
QPDFObjectHandle merge copy from other 0
|
||||
QPDFObjectHandle merge loop 0
|
||||
QPDFObjectHandle merge equal indirect 0
|
||||
QPDFAnnotationObjectHelper explicit matrix 0
|
||||
QPDFAnnotationObjectHelper default matrix 0
|
||||
QPDFAnnotationObjectHelper rotate 90 0
|
||||
@ -389,3 +386,5 @@ QPDFPageDocumentHelper non-widget annotation 0
|
||||
QPDFPageDocumentHelper remove annots 0
|
||||
QPDFPageDocumentHelper replace indirect annots 0
|
||||
QPDFPageDocumentHelper replace direct annots 0
|
||||
QPDFObjectHandle replace with copy 0
|
||||
QPDFPageDocumentHelper indirect as resources 0
|
||||
|
@ -38,19 +38,13 @@ endobj
|
||||
]
|
||||
/Parent 2 0 R
|
||||
/Resources <<
|
||||
/ExtGState <<
|
||||
/GS0 <<
|
||||
/AIS false
|
||||
/BM /Normal
|
||||
/CA .6
|
||||
/Type /ExtGState
|
||||
/ca .6
|
||||
>>
|
||||
>>
|
||||
/Font <<
|
||||
/F1 11 0 R
|
||||
>>
|
||||
/ProcSet 12 0 R
|
||||
/XObject <<
|
||||
/Fxo1 13 0 R
|
||||
>>
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
@ -60,7 +54,7 @@ endobj
|
||||
<<
|
||||
/F 28
|
||||
/Open false
|
||||
/Parent 13 0 R
|
||||
/Parent 15 0 R
|
||||
/Rect [
|
||||
612
|
||||
601
|
||||
@ -114,14 +108,13 @@ stream
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
|
||||
0.00000 0.00000 18.00000 18.00000 re W n
|
||||
q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
|
||||
/Fxo1 Do
|
||||
Q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
1032
|
||||
71
|
||||
endobj
|
||||
|
||||
11 0 obj
|
||||
@ -142,9 +135,42 @@ endobj
|
||||
endobj
|
||||
|
||||
13 0 obj
|
||||
<<
|
||||
/BBox [
|
||||
0
|
||||
0
|
||||
18
|
||||
18
|
||||
]
|
||||
/Resources <<
|
||||
/ExtGState <<
|
||||
/GS0 <<
|
||||
/AIS false
|
||||
/BM /Normal
|
||||
/CA .6
|
||||
/Type /ExtGState
|
||||
/ca .6
|
||||
>>
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Type /XObject
|
||||
/Length 14 0 R
|
||||
>>
|
||||
stream
|
||||
q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
|
||||
endstream
|
||||
endobj
|
||||
|
||||
%QDF: ignore_newline
|
||||
14 0 obj
|
||||
928
|
||||
endobj
|
||||
|
||||
15 0 obj
|
||||
<<
|
||||
/AP <<
|
||||
/N 14 0 R
|
||||
/N 13 0 R
|
||||
>>
|
||||
/C [
|
||||
1
|
||||
@ -171,62 +197,29 @@ endobj
|
||||
>>
|
||||
endobj
|
||||
|
||||
14 0 obj
|
||||
<<
|
||||
/BBox [
|
||||
0
|
||||
0
|
||||
18
|
||||
18
|
||||
]
|
||||
/Resources <<
|
||||
/ExtGState <<
|
||||
/GS0 <<
|
||||
/AIS false
|
||||
/BM /Normal
|
||||
/CA .6
|
||||
/Type /ExtGState
|
||||
/ca .6
|
||||
>>
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Type /XObject
|
||||
/Length 15 0 R
|
||||
>>
|
||||
stream
|
||||
q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
|
||||
endstream
|
||||
endobj
|
||||
|
||||
%QDF: ignore_newline
|
||||
15 0 obj
|
||||
928
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 16
|
||||
0000000000 65535 f
|
||||
0000000025 00000 n
|
||||
0000000079 00000 n
|
||||
0000000161 00000 n
|
||||
0000000553 00000 n
|
||||
0000000716 00000 n
|
||||
0000000773 00000 n
|
||||
0000000814 00000 n
|
||||
0000000913 00000 n
|
||||
0000000955 00000 n
|
||||
0000002043 00000 n
|
||||
0000002065 00000 n
|
||||
0000002184 00000 n
|
||||
0000002220 00000 n
|
||||
0000002550 00000 n
|
||||
0000003794 00000 n
|
||||
0000000453 00000 n
|
||||
0000000616 00000 n
|
||||
0000000673 00000 n
|
||||
0000000714 00000 n
|
||||
0000000813 00000 n
|
||||
0000000855 00000 n
|
||||
0000000982 00000 n
|
||||
0000001002 00000 n
|
||||
0000001121 00000 n
|
||||
0000001157 00000 n
|
||||
0000002401 00000 n
|
||||
0000002422 00000 n
|
||||
trailer <<
|
||||
/Root 1 0 R
|
||||
/Size 16
|
||||
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
|
||||
>>
|
||||
startxref
|
||||
3815
|
||||
2752
|
||||
%%EOF
|
||||
|
@ -36,19 +36,13 @@ endobj
|
||||
]
|
||||
/Parent 2 0 R
|
||||
/Resources <<
|
||||
/ExtGState <<
|
||||
/GS0 <<
|
||||
/AIS false
|
||||
/BM /Normal
|
||||
/CA .6
|
||||
/Type /ExtGState
|
||||
/ca .6
|
||||
>>
|
||||
>>
|
||||
/Font <<
|
||||
/F1 11 0 R
|
||||
>>
|
||||
/ProcSet 12 0 R
|
||||
/XObject <<
|
||||
/Fxo1 13 0 R
|
||||
>>
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
@ -56,7 +50,7 @@ endobj
|
||||
|
||||
4 0 obj
|
||||
[
|
||||
13 0 R
|
||||
15 0 R
|
||||
]
|
||||
endobj
|
||||
|
||||
@ -102,14 +96,13 @@ stream
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
|
||||
0.00000 0.00000 18.00000 18.00000 re W n
|
||||
q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
|
||||
/Fxo1 Do
|
||||
Q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
1032
|
||||
71
|
||||
endobj
|
||||
|
||||
11 0 obj
|
||||
@ -130,52 +123,6 @@ endobj
|
||||
endobj
|
||||
|
||||
13 0 obj
|
||||
<<
|
||||
/F 28
|
||||
/Open false
|
||||
/Parent 14 0 R
|
||||
/Rect [
|
||||
612
|
||||
601
|
||||
792
|
||||
721
|
||||
]
|
||||
/Subtype /Popup
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
14 0 obj
|
||||
<<
|
||||
/AP <<
|
||||
/N 15 0 R
|
||||
>>
|
||||
/C [
|
||||
1
|
||||
1
|
||||
0
|
||||
]
|
||||
/CA 1
|
||||
/Contents (Salad)
|
||||
/CreationDate (D:20181231235455Z00'00)
|
||||
/F 28
|
||||
/M (D:20181231235455Z00'00)
|
||||
/Name /Comment
|
||||
/P 3 0 R
|
||||
/Popup 13 0 R
|
||||
/Rect [
|
||||
235
|
||||
703
|
||||
253
|
||||
721
|
||||
]
|
||||
/Subtype /Text
|
||||
/T (Jay Berkenbilt)
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
15 0 obj
|
||||
<<
|
||||
/BBox [
|
||||
0
|
||||
@ -196,7 +143,7 @@ endobj
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Type /XObject
|
||||
/Length 16 0 R
|
||||
/Length 14 0 R
|
||||
>>
|
||||
stream
|
||||
q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
|
||||
@ -204,34 +151,80 @@ endstream
|
||||
endobj
|
||||
|
||||
%QDF: ignore_newline
|
||||
16 0 obj
|
||||
14 0 obj
|
||||
928
|
||||
endobj
|
||||
|
||||
15 0 obj
|
||||
<<
|
||||
/F 28
|
||||
/Open false
|
||||
/Parent 16 0 R
|
||||
/Rect [
|
||||
612
|
||||
601
|
||||
792
|
||||
721
|
||||
]
|
||||
/Subtype /Popup
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
16 0 obj
|
||||
<<
|
||||
/AP <<
|
||||
/N 13 0 R
|
||||
>>
|
||||
/C [
|
||||
1
|
||||
1
|
||||
0
|
||||
]
|
||||
/CA 1
|
||||
/Contents (Salad)
|
||||
/CreationDate (D:20181231235455Z00'00)
|
||||
/F 28
|
||||
/M (D:20181231235455Z00'00)
|
||||
/Name /Comment
|
||||
/P 3 0 R
|
||||
/Popup 15 0 R
|
||||
/Rect [
|
||||
235
|
||||
703
|
||||
253
|
||||
721
|
||||
]
|
||||
/Subtype /Text
|
||||
/T (Jay Berkenbilt)
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 17
|
||||
0000000000 65535 f
|
||||
0000000025 00000 n
|
||||
0000000079 00000 n
|
||||
0000000161 00000 n
|
||||
0000000543 00000 n
|
||||
0000000595 00000 n
|
||||
0000000652 00000 n
|
||||
0000000693 00000 n
|
||||
0000000792 00000 n
|
||||
0000000834 00000 n
|
||||
0000001922 00000 n
|
||||
0000001944 00000 n
|
||||
0000002063 00000 n
|
||||
0000002099 00000 n
|
||||
0000002240 00000 n
|
||||
0000002571 00000 n
|
||||
0000003815 00000 n
|
||||
0000000443 00000 n
|
||||
0000000495 00000 n
|
||||
0000000552 00000 n
|
||||
0000000593 00000 n
|
||||
0000000692 00000 n
|
||||
0000000734 00000 n
|
||||
0000000861 00000 n
|
||||
0000000881 00000 n
|
||||
0000001000 00000 n
|
||||
0000001036 00000 n
|
||||
0000002280 00000 n
|
||||
0000002301 00000 n
|
||||
0000002442 00000 n
|
||||
trailer <<
|
||||
/Root 1 0 R
|
||||
/Size 17
|
||||
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
|
||||
>>
|
||||
startxref
|
||||
3836
|
||||
2773
|
||||
%%EOF
|
||||
|
@ -1440,14 +1440,7 @@ endobj
|
||||
/ExtGState <<
|
||||
/FXE1 42 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/Font 4 0 R
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
@ -1456,6 +1449,19 @@ endobj
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
/Fxo1 46 0 R
|
||||
/Fxo10 58 0 R
|
||||
/Fxo11 66 0 R
|
||||
/Fxo12 66 0 R
|
||||
/Fxo13 68 0 R
|
||||
/Fxo2 48 0 R
|
||||
/Fxo3 72 0 R
|
||||
/Fxo4 50 0 R
|
||||
/Fxo5 52 0 R
|
||||
/Fxo6 54 0 R
|
||||
/Fxo7 60 0 R
|
||||
/Fxo8 56 0 R
|
||||
/Fxo9 70 0 R
|
||||
>>
|
||||
>>
|
||||
/Type /Page
|
||||
@ -1478,7 +1484,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 33 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 47 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1520,7 +1548,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 34 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 49 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1562,7 +1612,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 36 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 51 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1583,7 +1655,29 @@ endobj
|
||||
150
|
||||
14.2
|
||||
]
|
||||
/Resources 30 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 53 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1613,7 +1707,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 37 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 55 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1642,7 +1758,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 39 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 57 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1671,7 +1809,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 32 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 59 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1700,7 +1860,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 38 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 61 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1816,6 +1998,9 @@ endobj
|
||||
0
|
||||
]
|
||||
/Resources <<
|
||||
/Font <<
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
]
|
||||
@ -1851,7 +2036,29 @@ endobj
|
||||
157.1
|
||||
14.2
|
||||
]
|
||||
/Resources 40 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 69 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1888,7 +2095,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 31 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 71 0 R
|
||||
>>
|
||||
stream
|
||||
@ -1930,7 +2159,29 @@ endobj
|
||||
0
|
||||
0
|
||||
]
|
||||
/Resources 35 0 R
|
||||
/Resources <<
|
||||
/Encoding <<
|
||||
/PDFDocEncoding 41 0 R
|
||||
>>
|
||||
/Font <<
|
||||
/ArialMT 26 0 R
|
||||
/F2 24 0 R
|
||||
/F3 26 0 R
|
||||
/FXF1 26 0 R
|
||||
/Helv 29 0 R
|
||||
/ZaDi 13 0 R
|
||||
>>
|
||||
/ProcSet [
|
||||
/PDF
|
||||
/Text
|
||||
/ImageC
|
||||
/ImageI
|
||||
/ImageB
|
||||
]
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Length 73 0 R
|
||||
>>
|
||||
stream
|
||||
@ -2400,164 +2651,61 @@ stream
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 453.70000 cm
|
||||
0.00000 0.00000 150.00000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
/Tx BMC
|
||||
q
|
||||
1 1 148 12.2 re
|
||||
W
|
||||
n
|
||||
BT
|
||||
0 0 0 rg
|
||||
1 3.28299 Td
|
||||
/FXF1 11 Tf
|
||||
(ABC) Tj
|
||||
ET
|
||||
Q
|
||||
EMC
|
||||
|
||||
/Fxo1 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 421.20000 cm
|
||||
0.00000 0.00000 150.00000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
/Tx BMC
|
||||
q
|
||||
1 1 148 12.2 re
|
||||
W
|
||||
n
|
||||
BT
|
||||
0 0 0 rg
|
||||
1 3.28299 Td
|
||||
/FXF1 11 Tf
|
||||
(DEF) Tj
|
||||
ET
|
||||
Q
|
||||
EMC
|
||||
|
||||
/Fxo2 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 388.30000 cm
|
||||
0.00000 0.00000 150.00000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
|
||||
/Fxo3 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 378.40000 388.40000 cm
|
||||
0.00000 0.00000 68.50000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
|
||||
/Fxo4 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 368.40000 cm
|
||||
0.00000 0.00000 150.00000 14.20000 re W n
|
||||
/Tx BMC
|
||||
EMC
|
||||
/Fxo5 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 348.50000 cm
|
||||
0.00000 0.00000 72.80000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
|
||||
/Fxo6 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 297.10000 348.50000 cm
|
||||
0.00000 0.00000 150.10000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
|
||||
/Fxo7 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 315.90000 cm
|
||||
0.00000 0.00000 150.00000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
|
||||
/Fxo8 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 283.40000 cm
|
||||
0.00000 0.00000 75.50000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
/Tx BMC
|
||||
q
|
||||
1 1 60.5 12.2 re
|
||||
W
|
||||
n
|
||||
BT
|
||||
0 0 0 rg
|
||||
1 3.24501 Td
|
||||
/FXF1 11 Tf
|
||||
(Man) Tj
|
||||
ET
|
||||
Q
|
||||
EMC
|
||||
|
||||
/Fxo9 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 250.80000 cm
|
||||
0.00000 0.00000 72.30000 14.20000 re W n
|
||||
q
|
||||
Q
|
||||
|
||||
/Fxo10 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 164.10000 221.40000 cm
|
||||
0.00000 0.00000 11.30000 10.90000 re W n
|
||||
q
|
||||
1 1 9.3 8.9 re
|
||||
W
|
||||
n
|
||||
0 G
|
||||
2.2 8.9 m
|
||||
9.1 2 l
|
||||
9.1 8.9 m
|
||||
2.2 2 l
|
||||
s
|
||||
Q
|
||||
|
||||
/Fxo11 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 154.80000 177.60000 cm
|
||||
0.00000 0.00000 11.30000 10.90000 re W n
|
||||
q
|
||||
1 1 9.3 8.9 re
|
||||
W
|
||||
n
|
||||
0 G
|
||||
2.2 8.9 m
|
||||
9.1 2 l
|
||||
9.1 8.9 m
|
||||
2.2 2 l
|
||||
s
|
||||
Q
|
||||
|
||||
/Fxo12 Do
|
||||
Q
|
||||
q
|
||||
1.00000 0.00000 0.00000 1.00000 165.70000 143.40000 cm
|
||||
0.00000 0.00000 157.10000 14.20000 re W n
|
||||
1 1 0.6 rg
|
||||
0 0 156.9 14.4 re f*
|
||||
/Tx BMC
|
||||
BT
|
||||
0 0 0 rg /F3 11 Tf
|
||||
0 g
|
||||
2 2.106 Td
|
||||
(Blue) Tj
|
||||
ET
|
||||
EMC
|
||||
|
||||
/Fxo13 Do
|
||||
Q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
83 0 obj
|
||||
1852
|
||||
891
|
||||
endobj
|
||||
|
||||
84 0 obj
|
||||
@ -2603,10 +2751,10 @@ endobj
|
||||
>>
|
||||
stream
|
||||
|