2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 00:10:54 +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:
Jay Berkenbilt 2019-01-02 21:44:10 -05:00
parent 23bcfeb336
commit f78ea057ca
16 changed files with 3165 additions and 1514 deletions

View File

@ -1,6 +1,6 @@
2018-12-31 Jay Berkenbilt <ejb@ql.org> 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 - QPDFPageDocumentHelper::flattenAnnotations - integrate
annotation appearance streams into page contents with special annotation appearance streams into page contents with special
handling for form fields: if appearance streams are up to date handling for form fields: if appearance streams are up to date
@ -11,15 +11,11 @@
be found. be found.
- QPDFAnnotationObjectHelper::getPageContentForAppearance - - QPDFAnnotationObjectHelper::getPageContentForAppearance -
generate the content stream fragment to render an appearance generate the content stream fragment to render an appearance
stream in a page's content stream. Called by flattenAnnotations. stream in a page's content stream as a form xobject. Called by
- QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix - flattenAnnotations.
calculate the matrix that will transform from the appearance
stream coordinates to the page coordinates. Called by
getPageContentForAppearance.
* Add method QPDFObjectHandle::mergeDictionary(), which * Add method QPDFObjectHandle::mergeResources(), which merges
recursively merges dictionaries with semantics designed for resource dictionaries. See detailed description in
merging resource dictionaries. See detailed description in
QPDFObjectHandle.hh. QPDFObjectHandle.hh.
* Add QPDFObjectHandle::Matrix, similar to * Add QPDFObjectHandle::Matrix, similar to

View File

@ -72,23 +72,14 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper
QPDFObjectHandle getAppearanceStream(std::string const& which, QPDFObjectHandle getAppearanceStream(std::string const& which,
std::string const& state = ""); 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 // Generate text suitable for addition to the containing page's
// content stream that replaces this annotation's appearance // content stream that draws this annotation's appearance stream
// stream. The value "rotate" should be set to the page's /Rotate // as a form XObject. The value "name" is the resource name that
// value or 0 if none. // 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 QPDF_DLL
std::string getPageContentForAppearance(int rotate); std::string getPageContentForAppearance(
std::string const& name, int rotate);
private: private:
class Members class Members

View File

@ -559,27 +559,46 @@ class QPDFObjectHandle
QPDF_DLL QPDF_DLL
bool isOrHasName(std::string const&); bool isOrHasName(std::string const&);
// Merge dictionaries with the following behavior, where "object" // Merge resource dictionaries. Assumes resource dictionaries have
// refers to the object whose method is invoked, and "other" // the property that the collection of keys of all first-level
// refers to the argument: // dictionary members contains no duplicates. This method does
// * If either object or other is not a dictionary, do nothing // nothing if both this object and the other object are not
// * Otherwise // dictionaries. Otherwise, it has following behavior, where
// * For each key in other // "object" refers to the object whose method is invoked, and
// * If key is absent in object, insert it // "other" refers to the argument:
// * If key is present in object //
// * If both values are dictionaries, merge the dictionary from // * For each key in "other" whose value is an array:
// other into the one from object // * If "object" does not have that entry, shallow copy it.
// * If both values are arrays, append scalar elements from // * Otherwise, if "object" has an array in the same place,
// other's that are not present in object's onto object's, // append to that array any objects in "other"'s array that
// and ignore non-scalar elements in other's // are not already present.
// * Otherwise ignore // * 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 // The primary purpose of this method is to facilitate merging of
// resource dictionaries. Conflicts are ignored. If needed, a // resource dictionaries that are supposed to have the same scope
// future version of qpdf may provide some mechanism for conflict // as each other. For example, this can be used to merge a form
// resolution, such as providing a handler that is invoked with // XObject's /Resources dictionary with a form field's /DR.
// the path to the conflict. // 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 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 // Return the QPDF object that owns an indirect object. Returns
// null for a direct object. // null for a direct object.
@ -992,10 +1011,6 @@ class QPDFObjectHandle
ParserCallbacks* callbacks); ParserCallbacks* callbacks);
std::vector<QPDFObjectHandle> arrayOrStreamToStreamArray( std::vector<QPDFObjectHandle> arrayOrStreamToStreamArray(
std::string const& description, std::string& all_description); std::string const& description, std::string& all_description);
void mergeDictionaryInternal(
QPDFObjectHandle other,
std::set<QPDFObjGen>& visiting,
int depth);
static void warn(QPDF*, QPDFExc const&); static void warn(QPDF*, QPDFExc const&);
class Members class Members

View File

@ -80,19 +80,66 @@ QPDFAnnotationObjectHelper::getAppearanceStream(
} }
std::string std::string
QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate) QPDFAnnotationObjectHelper::getPageContentForAppearance(
std::string const& name, int rotate)
{ {
// The appearance matrix is the transformation in effect when if (! getAppearanceStream("/N").isStream())
// rendering an appearance stream's content. The appearance stream {
// itself is a form XObject, which has a /BBox and an optional return "";
// /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.
// The algorithm for computing the appearance matrix described in // The appearance matrix computed by this method is the
// section 12.5.5 of the ISO-32000 PDF spec. It is as follows: // 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 // 1. Transform the four corners of /BBox by applying /Matrix to
// them, creating an arbitrarily transformed quadrilateral. // 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 // 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 // corners of T to the annotation's /Rect. This can be done by
// translating the lower left corner and then scaling so that // scaling so that the sizes match and translating so that the
// the upper right corner also matches. // scaled T exactly overlaps /Rect.
// 4. Concatenate /Matrix to A to get matrix AA. This matrix // If the annotation's /F flag has bit 4 set, this means that
// translates from appearance stream coordinates to page // annotation is to be rotated about its upper left corner to
// coordinates. // 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 // 1. Perform the rotation on /BBox box prior to transforming it
// to also rotate the annotation in the opposite direction, and we // with /Matrix (by replacing matrix with concatenation of
// adjust the destination rectangle by rotating it about the upper // matrix onto the rotation)
// left hand corner so that the annotation will appear upright on
// the rotated page.
// You can see that the above algorithm works by imagining the // 2. Rotate the destination rectangle by the specified amount
// following:
// * In the simple case of where /BBox = /Rect and /Matrix is the // 3. Apply the rotation to A as computed above to get the final
// identity matrix, the transformed quadrilateral in step 1 will // appearance matrix.
// 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.
QPDFObjectHandle rect_obj = this->oh.getKey("/Rect"); QPDFObjectHandle rect_obj = this->oh.getKey("/Rect");
QPDFObjectHandle flags = this->oh.getKey("/F"); QPDFObjectHandle flags = this->oh.getKey("/F");
@ -157,7 +188,9 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix"); QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix");
} }
QPDFObjectHandle::Rectangle rect = rect_obj.getArrayAsRectangle(); 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 // If the the annotation flags include the NoRotate bit and
// the page is rotated, we have to rotate the annotation about // 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), AA.scale((rect.urx - rect.llx) / (t_urx - t_llx),
(rect.ury - rect.lly) / (t_ury - t_lly)); (rect.ury - rect.lly) / (t_ury - t_lly));
AA.translate(-t_llx, -t_lly); AA.translate(-t_llx, -t_lly);
// Concatenate the user-specified matrix if (do_rotate)
AA.concat(matrix);
return AA.unparse();
}
std::string
QPDFAnnotationObjectHelper::getPageContentForAppearance(int rotate)
{
QPDFObjectHandle as = getAppearanceStream("/N");
if (! (as.isStream() && as.getDict().getKey("/BBox").isRectangle()))
{ {
return ""; AA.rotatex90(rotate);
} }
QPDFObjectHandle::Rectangle rect = as.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"));
as.getDict().getKey("/BBox").getArrayAsRectangle(); return (
std::string cm = getAnnotationAppearanceMatrix(rotate);
if (cm.empty())
{
return "";
}
std::string as_content = (
"q\n" + "q\n" +
cm + " cm\n" + AA.unparse() + " cm\n" +
QUtil::double_to_string(rect.llx, 5) + " " + name + " Do\n" +
QUtil::double_to_string(rect.lly, 5) + " " + "Q\n");
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;
} }

View File

@ -826,23 +826,8 @@ QPDFObjectHandle::isOrHasName(std::string const& value)
} }
void 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())) if (! (isDictionary() && other.isDictionary()))
{ {
QTC::TC("qpdf", "QPDFObjectHandle merge top type mismatch"); QTC::TC("qpdf", "QPDFObjectHandle merge top type mismatch");
@ -859,33 +844,22 @@ QPDFObjectHandle::mergeDictionaryInternal(
QPDFObjectHandle this_val = getKey(key); QPDFObjectHandle this_val = getKey(key);
if (this_val.isDictionary() && other_val.isDictionary()) if (this_val.isDictionary() && other_val.isDictionary())
{ {
if (this_val.isIndirect() && other_val.isIndirect() && if (this_val.isIndirect())
(this_val.getObjGen() == other_val.getObjGen()))
{ {
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() && std::set<std::string> other_val_keys = other_val.getKeys();
(visiting.count(this_val.getObjGen()))) for (std::set<std::string>::iterator i2 =
other_val_keys.begin();
i2 != other_val_keys.end(); ++i2)
{ {
QTC::TC("qpdf", "QPDFObjectHandle merge loop"); if (! this_val.hasKey(*i2))
}
else
{
QPDFObjGen loop;
if (this_val.isIndirect())
{ {
loop = this_val.getObjGen();
visiting.insert(loop);
QTC::TC("qpdf", "QPDFObjectHandle merge shallow copy"); QTC::TC("qpdf", "QPDFObjectHandle merge shallow copy");
this_val = this_val.shallowCopy(); this_val.replaceKey(
replaceKey(key, this_val); *i2, other_val.getKey(*i2).shallowCopy());
}
QTC::TC("qpdf", "QPDFObjectHandle nested merge");
this_val.mergeDictionaryInternal(
other_val, visiting, 1 + depth);
if (loop.getObj())
{
visiting.erase(loop);
} }
} }
} }
@ -923,11 +897,39 @@ QPDFObjectHandle::mergeDictionaryInternal(
else else
{ {
QTC::TC("qpdf", "QPDFObjectHandle merge copy from other"); 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 // Indirect object accessors
QPDF* QPDF*
QPDFObjectHandle::getOwningQPDF() QPDFObjectHandle::getOwningQPDF()

View File

@ -1,5 +1,6 @@
#include <qpdf/QPDFPageDocumentHelper.hh> #include <qpdf/QPDFPageDocumentHelper.hh>
#include <qpdf/QPDFAcroFormDocumentHelper.hh> #include <qpdf/QPDFAcroFormDocumentHelper.hh>
#include <qpdf/QUtil.hh>
#include <qpdf/QTC.hh> #include <qpdf/QTC.hh>
QPDFPageDocumentHelper::Members::~Members() QPDFPageDocumentHelper::Members::~Members()
@ -121,6 +122,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
{ {
rotate = rotate_obj.getIntValue(); rotate = rotate_obj.getIntValue();
} }
int next_fx = 1;
for (std::vector<QPDFAnnotationObjectHelper>::iterator iter = for (std::vector<QPDFAnnotationObjectHelper>::iterator iter =
annots.begin(); annots.begin();
iter != annots.end(); ++iter) iter != annots.end(); ++iter)
@ -140,18 +142,50 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
} }
if (process) if (process)
{ {
resources.mergeDictionary(as.getDict().getKey("/Resources"));
if (is_widget) if (is_widget)
{ {
QTC::TC("qpdf", "QPDFPageDocumentHelper merge DR"); QTC::TC("qpdf", "QPDFPageDocumentHelper merge DR");
QPDFFormFieldObjectHelper ff = afdh.getFieldForAnnotation(aoh); 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 else
{ {
QTC::TC("qpdf", "QPDFPageDocumentHelper non-widget annotation"); 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 else
{ {

View File

@ -371,12 +371,9 @@ qpdf required parameter 0
qpdf required choices 0 qpdf required choices 0
QPDFObjectHandle merge top type mismatch 0 QPDFObjectHandle merge top type mismatch 0
QPDFObjectHandle merge shallow copy 0 QPDFObjectHandle merge shallow copy 0
QPDFObjectHandle nested merge 0
QPDFObjectHandle merge array 0 QPDFObjectHandle merge array 0
QPDFObjectHandle merge array dup 0 QPDFObjectHandle merge array dup 0
QPDFObjectHandle merge copy from other 0 QPDFObjectHandle merge copy from other 0
QPDFObjectHandle merge loop 0
QPDFObjectHandle merge equal indirect 0
QPDFAnnotationObjectHelper explicit matrix 0 QPDFAnnotationObjectHelper explicit matrix 0
QPDFAnnotationObjectHelper default matrix 0 QPDFAnnotationObjectHelper default matrix 0
QPDFAnnotationObjectHelper rotate 90 0 QPDFAnnotationObjectHelper rotate 90 0
@ -389,3 +386,5 @@ QPDFPageDocumentHelper non-widget annotation 0
QPDFPageDocumentHelper remove annots 0 QPDFPageDocumentHelper remove annots 0
QPDFPageDocumentHelper replace indirect annots 0 QPDFPageDocumentHelper replace indirect annots 0
QPDFPageDocumentHelper replace direct annots 0 QPDFPageDocumentHelper replace direct annots 0
QPDFObjectHandle replace with copy 0
QPDFPageDocumentHelper indirect as resources 0

View File

@ -38,19 +38,13 @@ endobj
] ]
/Parent 2 0 R /Parent 2 0 R
/Resources << /Resources <<
/ExtGState <<
/GS0 <<
/AIS false
/BM /Normal
/CA .6
/Type /ExtGState
/ca .6
>>
>>
/Font << /Font <<
/F1 11 0 R /F1 11 0 R
>> >>
/ProcSet 12 0 R /ProcSet 12 0 R
/XObject <<
/Fxo1 13 0 R
>>
>> >>
/Type /Page /Type /Page
>> >>
@ -60,7 +54,7 @@ endobj
<< <<
/F 28 /F 28
/Open false /Open false
/Parent 13 0 R /Parent 15 0 R
/Rect [ /Rect [
612 612
601 601
@ -114,14 +108,13 @@ stream
Q Q
q q
1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
0.00000 0.00000 18.00000 18.00000 re W n /Fxo1 Do
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
Q Q
endstream endstream
endobj endobj
10 0 obj 10 0 obj
1032 71
endobj endobj
11 0 obj 11 0 obj
@ -142,9 +135,42 @@ endobj
endobj endobj
13 0 obj 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 << /AP <<
/N 14 0 R /N 13 0 R
>> >>
/C [ /C [
1 1
@ -171,62 +197,29 @@ endobj
>> >>
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 xref
0 16 0 16
0000000000 65535 f 0000000000 65535 f
0000000025 00000 n 0000000025 00000 n
0000000079 00000 n 0000000079 00000 n
0000000161 00000 n 0000000161 00000 n
0000000553 00000 n 0000000453 00000 n
0000000716 00000 n 0000000616 00000 n
0000000773 00000 n 0000000673 00000 n
0000000814 00000 n 0000000714 00000 n
0000000913 00000 n 0000000813 00000 n
0000000955 00000 n 0000000855 00000 n
0000002043 00000 n 0000000982 00000 n
0000002065 00000 n 0000001002 00000 n
0000002184 00000 n 0000001121 00000 n
0000002220 00000 n 0000001157 00000 n
0000002550 00000 n 0000002401 00000 n
0000003794 00000 n 0000002422 00000 n
trailer << trailer <<
/Root 1 0 R /Root 1 0 R
/Size 16 /Size 16
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>] /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
>> >>
startxref startxref
3815 2752
%%EOF %%EOF

View File

@ -36,19 +36,13 @@ endobj
] ]
/Parent 2 0 R /Parent 2 0 R
/Resources << /Resources <<
/ExtGState <<
/GS0 <<
/AIS false
/BM /Normal
/CA .6
/Type /ExtGState
/ca .6
>>
>>
/Font << /Font <<
/F1 11 0 R /F1 11 0 R
>> >>
/ProcSet 12 0 R /ProcSet 12 0 R
/XObject <<
/Fxo1 13 0 R
>>
>> >>
/Type /Page /Type /Page
>> >>
@ -56,7 +50,7 @@ endobj
4 0 obj 4 0 obj
[ [
13 0 R 15 0 R
] ]
endobj endobj
@ -102,14 +96,13 @@ stream
Q Q
q q
1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
0.00000 0.00000 18.00000 18.00000 re W n /Fxo1 Do
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
Q Q
endstream endstream
endobj endobj
10 0 obj 10 0 obj
1032 71
endobj endobj
11 0 obj 11 0 obj
@ -130,52 +123,6 @@ endobj
endobj endobj
13 0 obj 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 [ /BBox [
0 0
@ -196,7 +143,7 @@ endobj
>> >>
/Subtype /Form /Subtype /Form
/Type /XObject /Type /XObject
/Length 16 0 R /Length 14 0 R
>> >>
stream 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 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 endobj
%QDF: ignore_newline %QDF: ignore_newline
16 0 obj 14 0 obj
928 928
endobj 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 xref
0 17 0 17
0000000000 65535 f 0000000000 65535 f
0000000025 00000 n 0000000025 00000 n
0000000079 00000 n 0000000079 00000 n
0000000161 00000 n 0000000161 00000 n
0000000543 00000 n 0000000443 00000 n
0000000595 00000 n 0000000495 00000 n
0000000652 00000 n 0000000552 00000 n
0000000693 00000 n 0000000593 00000 n
0000000792 00000 n 0000000692 00000 n
0000000834 00000 n 0000000734 00000 n
0000001922 00000 n 0000000861 00000 n
0000001944 00000 n 0000000881 00000 n
0000002063 00000 n 0000001000 00000 n
0000002099 00000 n 0000001036 00000 n
0000002240 00000 n 0000002280 00000 n
0000002571 00000 n 0000002301 00000 n
0000003815 00000 n 0000002442 00000 n
trailer << trailer <<
/Root 1 0 R /Root 1 0 R
/Size 17 /Size 17
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>] /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
>> >>
startxref startxref
3836 2773
%%EOF %%EOF

View File

@ -1440,14 +1440,7 @@ endobj
/ExtGState << /ExtGState <<
/FXE1 42 0 R /FXE1 42 0 R
>> >>
/Font << /Font 4 0 R
/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 [ /ProcSet [
/PDF /PDF
/Text /Text
@ -1456,6 +1449,19 @@ endobj
/ImageB /ImageB
] ]
/XObject << /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 /Type /Page
@ -1478,7 +1484,29 @@ endobj
0 0
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 /Length 47 0 R
>> >>
stream stream
@ -1520,7 +1548,29 @@ endobj
0 0
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 /Length 49 0 R
>> >>
stream stream
@ -1562,7 +1612,29 @@ endobj
0 0
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 /Length 51 0 R
>> >>
stream stream
@ -1583,7 +1655,29 @@ endobj
150 150
14.2 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 /Length 53 0 R
>> >>
stream stream
@ -1613,7 +1707,29 @@ endobj
0 0
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 /Length 55 0 R
>> >>
stream stream
@ -1642,7 +1758,29 @@ endobj
0 0
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 /Length 57 0 R
>> >>
stream stream
@ -1671,7 +1809,29 @@ endobj
0 0
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 /Length 59 0 R
>> >>
stream stream
@ -1700,7 +1860,29 @@ endobj
0 0
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 /Length 61 0 R
>> >>
stream stream
@ -1816,6 +1998,9 @@ endobj
0 0
] ]
/Resources << /Resources <<
/Font <<
/ZaDi 13 0 R
>>
/ProcSet [ /ProcSet [
/PDF /PDF
] ]
@ -1851,7 +2036,29 @@ endobj
157.1 157.1
14.2 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 /Length 69 0 R
>> >>
stream stream
@ -1888,7 +2095,29 @@ endobj
0 0
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 /Length 71 0 R
>> >>
stream stream
@ -1930,7 +2159,29 @@ endobj
0 0
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 /Length 73 0 R
>> >>
stream stream
@ -2400,164 +2651,61 @@ stream
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 453.70000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 453.70000 cm
0.00000 0.00000 150.00000 14.20000 re W n /Fxo1 Do
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
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 421.20000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 421.20000 cm
0.00000 0.00000 150.00000 14.20000 re W n /Fxo2 Do
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
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 388.30000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 388.30000 cm
0.00000 0.00000 150.00000 14.20000 re W n /Fxo3 Do
q
Q
Q Q
q q
1.00000 0.00000 0.00000 1.00000 378.40000 388.40000 cm 1.00000 0.00000 0.00000 1.00000 378.40000 388.40000 cm
0.00000 0.00000 68.50000 14.20000 re W n /Fxo4 Do
q
Q
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 368.40000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 368.40000 cm
0.00000 0.00000 150.00000 14.20000 re W n /Fxo5 Do
/Tx BMC
EMC
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 348.50000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 348.50000 cm
0.00000 0.00000 72.80000 14.20000 re W n /Fxo6 Do
q
Q
Q Q
q q
1.00000 0.00000 0.00000 1.00000 297.10000 348.50000 cm 1.00000 0.00000 0.00000 1.00000 297.10000 348.50000 cm
0.00000 0.00000 150.10000 14.20000 re W n /Fxo7 Do
q
Q
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 315.90000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 315.90000 cm
0.00000 0.00000 150.00000 14.20000 re W n /Fxo8 Do
q
Q
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 283.40000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 283.40000 cm
0.00000 0.00000 75.50000 14.20000 re W n /Fxo9 Do
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
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 250.80000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 250.80000 cm
0.00000 0.00000 72.30000 14.20000 re W n /Fxo10 Do
q
Q
Q Q
q q
1.00000 0.00000 0.00000 1.00000 164.10000 221.40000 cm 1.00000 0.00000 0.00000 1.00000 164.10000 221.40000 cm
0.00000 0.00000 11.30000 10.90000 re W n /Fxo11 Do
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
Q Q
q q
1.00000 0.00000 0.00000 1.00000 154.80000 177.60000 cm 1.00000 0.00000 0.00000 1.00000 154.80000 177.60000 cm
0.00000 0.00000 11.30000 10.90000 re W n /Fxo12 Do
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
Q Q
q q
1.00000 0.00000 0.00000 1.00000 165.70000 143.40000 cm 1.00000 0.00000 0.00000 1.00000 165.70000 143.40000 cm
0.00000 0.00000 157.10000 14.20000 re W n /Fxo13 Do
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
Q Q
endstream endstream
endobj endobj
83 0 obj 83 0 obj
1852 891
endobj endobj
84 0 obj 84 0 obj
@ -2603,10 +2751,10 @@ endobj
>> >>
stream stream
ê  ê 
    !"#$%&'B—P P@TUUVxW=WPXXX×Y‰Z¸\)\=]|]<5D>^i^}_„_˜`H`[ññ–õeõ‘õÌõöùùF»Ñfz(<     !"#$%&'B—P P@SnXZc×eefwfhjj+lklnhn{ÿŸÿ¶±ì:f  / Ä Ø  š
endstream endstream
endobj endobj
startxref startxref
66108 68762
%%EOF %%EOF

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -956,12 +956,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
38 0 obj 38 0 obj
60 113
endobj endobj
%% Original object ID: 39 0 %% Original object ID: 39 0
@ -1084,12 +1091,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
46 0 obj 46 0 obj
60 113
endobj endobj
%% Original object ID: 47 0 %% Original object ID: 47 0
@ -1227,12 +1241,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
54 0 obj 54 0 obj
60 113
endobj endobj
%% Original object ID: 55 0 %% Original object ID: 55 0
@ -1372,12 +1393,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
62 0 obj 62 0 obj
60 113
endobj endobj
%% Original object ID: 63 0 %% Original object ID: 63 0
@ -1500,12 +1528,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
70 0 obj 70 0 obj
60 113
endobj endobj
%% Original object ID: 71 0 %% Original object ID: 71 0
@ -1644,12 +1679,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
78 0 obj 78 0 obj
60 113
endobj endobj
%% Original object ID: 79 0 %% Original object ID: 79 0
@ -1772,12 +1814,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
86 0 obj 86 0 obj
60 113
endobj endobj
%% Original object ID: 87 0 %% Original object ID: 87 0
@ -1900,12 +1949,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
94 0 obj 94 0 obj
60 113
endobj endobj
%% Original object ID: 95 0 %% Original object ID: 95 0
@ -2027,12 +2083,19 @@ q
0 0 103.45 53 re s 0 0 103.45 53 re s
0 0 1 RG 0 0 1 RG
5 5 15 15 re s 5 5 15 15 re s
1 w
1 0 0 RG
-10 25 m
113.45 25 l
52 -10 m
52 63 l
s
Q Q
endstream endstream
endobj endobj
102 0 obj 102 0 obj
60 113
endobj endobj
%% Original object ID: 103 0 %% Original object ID: 103 0
@ -2568,106 +2631,106 @@ xref
0000010828 00000 n 0000010828 00000 n
0000011049 00000 n 0000011049 00000 n
0000011097 00000 n 0000011097 00000 n
0000011311 00000 n 0000011364 00000 n
0000011359 00000 n 0000011413 00000 n
0000011569 00000 n 0000011623 00000 n
0000011617 00000 n 0000011671 00000 n
0000011835 00000 n 0000011889 00000 n
0000011883 00000 n 0000011937 00000 n
0000011944 00000 n 0000011998 00000 n
0000012321 00000 n 0000012375 00000 n
0000012537 00000 n 0000012644 00000 n
0000012585 00000 n 0000012693 00000 n
0000012797 00000 n 0000012905 00000 n
0000012845 00000 n 0000012953 00000 n
0000013124 00000 n 0000013232 00000 n
0000013172 00000 n 0000013280 00000 n
0000013233 00000 n 0000013341 00000 n
0000013600 00000 n 0000013708 00000 n
0000013874 00000 n 0000014035 00000 n
0000013922 00000 n 0000014084 00000 n
0000014134 00000 n 0000014296 00000 n
0000014182 00000 n 0000014344 00000 n
0000014466 00000 n 0000014628 00000 n
0000014514 00000 n 0000014676 00000 n
0000014575 00000 n 0000014737 00000 n
0000014955 00000 n 0000015117 00000 n
0000015229 00000 n 0000015444 00000 n
0000015277 00000 n 0000015493 00000 n
0000015489 00000 n 0000015705 00000 n
0000015537 00000 n 0000015753 00000 n
0000015755 00000 n 0000015971 00000 n
0000015803 00000 n 0000016019 00000 n
0000015864 00000 n 0000016080 00000 n
0000016245 00000 n
0000016461 00000 n 0000016461 00000 n
0000016509 00000 n 0000016730 00000 n
0000016721 00000 n 0000016779 00000 n
0000016769 00000 n 0000016991 00000 n
0000017048 00000 n 0000017039 00000 n
0000017096 00000 n 0000017318 00000 n
0000017157 00000 n 0000017366 00000 n
0000017537 00000 n 0000017427 00000 n
0000017816 00000 n 0000017807 00000 n
0000017864 00000 n 0000018139 00000 n
0000018076 00000 n 0000018188 00000 n
0000018124 00000 n 0000018400 00000 n
0000018347 00000 n 0000018448 00000 n
0000018395 00000 n 0000018671 00000 n
0000018456 00000 n 0000018719 00000 n
0000018823 00000 n 0000018780 00000 n
0000019039 00000 n 0000019147 00000 n
0000019087 00000 n 0000019416 00000 n
0000019299 00000 n 0000019465 00000 n
0000019347 00000 n 0000019677 00000 n
0000019565 00000 n 0000019725 00000 n
0000019613 00000 n 0000019943 00000 n
0000019674 00000 n 0000019991 00000 n
0000020055 00000 n 0000020052 00000 n
0000020271 00000 n 0000020433 00000 n
0000020319 00000 n 0000020702 00000 n
0000020531 00000 n 0000020751 00000 n
0000020579 00000 n 0000020963 00000 n
0000020797 00000 n 0000021011 00000 n
0000020845 00000 n 0000021229 00000 n
0000020907 00000 n 0000021277 00000 n
0000021276 00000 n 0000021339 00000 n
0000021494 00000 n 0000021708 00000 n
0000021544 00000 n 0000021979 00000 n
0000021758 00000 n 0000022030 00000 n
0000021831 00000 n 0000022244 00000 n
0000022152 00000 n 0000022317 00000 n
0000022203 00000 n 0000022638 00000 n
0000022375 00000 n 0000022689 00000 n
0000022502 00000 n 0000022861 00000 n
0000022629 00000 n 0000022988 00000 n
0000022950 00000 n 0000023115 00000 n
0000023001 00000 n 0000023436 00000 n
0000023128 00000 n 0000023487 00000 n
0000023449 00000 n 0000023614 00000 n
0000023500 00000 n 0000023935 00000 n
0000023627 00000 n 0000023986 00000 n
0000023948 00000 n 0000024113 00000 n
0000023999 00000 n 0000024434 00000 n
0000024126 00000 n 0000024485 00000 n
0000024447 00000 n 0000024612 00000 n
0000024498 00000 n 0000024933 00000 n
0000024625 00000 n 0000024984 00000 n
0000024946 00000 n 0000025111 00000 n
0000024997 00000 n 0000025432 00000 n
0000025124 00000 n 0000025483 00000 n
0000025445 00000 n 0000025610 00000 n
0000025496 00000 n 0000025931 00000 n
0000025623 00000 n 0000025982 00000 n
0000025944 00000 n 0000026109 00000 n
0000025995 00000 n 0000026430 00000 n
0000026122 00000 n 0000026481 00000 n
0000026443 00000 n 0000026608 00000 n
0000026494 00000 n 0000026929 00000 n
0000026621 00000 n 0000026980 00000 n
0000026748 00000 n 0000027107 00000 n
0000026875 00000 n 0000027234 00000 n
0000027002 00000 n 0000027361 00000 n
0000027488 00000 n
trailer << trailer <<
/DocChecksum /DA785F789D02970D387C264D0A6C8CB0 /DocChecksum /DA785F789D02970D387C264D0A6C8CB0
/Info 2 0 R /Info 2 0 R
@ -2676,5 +2739,5 @@ trailer <<
/ID [<976442cb303b8d5e88a36a127de2a19f><1f7f023bcea1641cee1f72048a9d0676>] /ID [<976442cb303b8d5e88a36a127de2a19f><1f7f023bcea1641cee1f72048a9d0676>]
>> >>
startxref startxref
27059 27545
%%EOF %%EOF

View File

@ -6,11 +6,9 @@
"/b": "conflict: seen", "/b": "conflict: seen",
"/c": [ "/c": [
2, 2,
3, 3
1
], ],
"/d": { "/d": {
"/x": 24,
"/y": 25, "/y": 25,
"/z": 26 "/z": 26
}, },
@ -33,4 +31,14 @@
"two" "two"
] ]
} }
/A
/B
/C
/a
/b
/c
/d
/e
/indirect2
/recursive
test 50 done test 50 done

View File

@ -5,7 +5,7 @@
1 0 obj 1 0 obj
<< <<
/Type /ObjStm /Type /ObjStm
/Length 18715 /Length 18617
/N 44 /N 44
/First 398 /First 398
>> >>
@ -31,29 +31,29 @@ stream
20 8074 20 8074
21 8505 21 8505
22 9308 22 9308
23 10169 23 10071
24 10264 24 10166
25 12179 25 12081
26 12281 26 12183
27 12414 27 12316
28 12516 28 12418
29 14446 29 14348
30 15052 30 14954
31 15184 31 15086
32 15381 32 15283
33 15578 33 15480
34 15775 34 15677
35 15972 35 15874
36 16169 36 16071
37 16366 37 16268
38 16563 38 16465
39 16760 39 16662
40 16957 40 16859
41 17154 41 17056
42 17351 42 17253
43 17582 43 17484
44 17840 44 17742
45 18193 45 18095
%% Object stream: object 2, index 0 %% Object stream: object 2, index 0
<< <<
/AcroForm << /AcroForm <<
@ -719,13 +719,6 @@ stream
>> >>
/ExtGState << /ExtGState <<
/FXE1 25 0 R /FXE1 25 0 R
/GS0 <<
/AIS false
/BM /Normal
/CA .6
/Type /ExtGState
/ca .6
>>
>> >>
/Font 26 0 R /Font 26 0 R
/ProcSet [ /ProcSet [
@ -736,6 +729,7 @@ stream
/ImageB /ImageB
] ]
/XObject << /XObject <<
/Fxo1 86 0 R
>> >>
>> >>
/Type /Page /Type /Page
@ -1160,7 +1154,7 @@ stream
/FontDescriptor 43 0 R /FontDescriptor 43 0 R
/LastChar 50 /LastChar 50
/Subtype /TrueType /Subtype /TrueType
/ToUnicode 86 0 R /ToUnicode 88 0 R
/Type /Font /Type /Font
/Widths [ /Widths [
750 750
@ -1429,7 +1423,7 @@ stream
2000 2000
1006 1006
] ]
/FontFile2 88 0 R /FontFile2 90 0 R
/FontName /CAAAAA+ArialMT /FontName /CAAAAA+ArialMT
/ItalicAngle 0 /ItalicAngle 0
/StemV 80 /StemV 80
@ -1438,7 +1432,7 @@ stream
%% Object stream: object 44, index 42 %% Object stream: object 44, index 42
<< <<
/AP << /AP <<
/N 90 0 R /N 86 0 R
>> >>
/C [ /C [
1 1
@ -2076,15 +2070,13 @@ stream
Q Q
q q
1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
0.00000 0.00000 18.00000 18.00000 re W n /Fxo1 Do
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
Q Q
endstream endstream
endobj endobj
81 0 obj 81 0 obj
1033 71
endobj endobj
82 0 obj 82 0 obj
@ -2120,9 +2112,41 @@ endobj
86 0 obj 86 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 87 0 R /Length 87 0 R
>> >>
stream 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
87 0 obj
929
endobj
88 0 obj
<<
/Length 89 0 R
>>
stream
/CIDInit/ProcSet findresource begin /CIDInit/ProcSet findresource begin
12 dict begin 12 dict begin
begincmap begincmap
@ -2195,14 +2219,14 @@ end
endstream endstream
endobj endobj
87 0 obj 89 0 obj
918 918
endobj endobj
88 0 obj 90 0 obj
<< <<
/Length1 37060 /Length1 37060
/Length 89 0 R /Length 91 0 R
>> >>
stream stream
true @cmapY:.RÌcvt •Ü.Úà0fpgm bxRnglyf!ä$ÅI˜headNp7X6hheaƒþXP$hmtx€¼ÃXtÐlocabø þYDjmaxp true @cmapY:.RÌcvt •Ü.Úà0fpgm bxRnglyf!ä$ÅI˜headNp7X6hheaƒþXP$hmtx€¼ÃXtÐlocabø þYDjmaxp
@ -2518,40 +2542,8 @@ endstream
endobj endobj
%QDF: ignore_newline %QDF: ignore_newline
89 0 obj
37060
endobj
90 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 91 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
91 0 obj 91 0 obj
929 37060
endobj endobj
92 0 obj 92 0 obj
@ -2566,10 +2558,10 @@ endobj
>> >>
stream stream
   
    !"#$%&'()*+I<EFBFBD>WW/X4XHYMYaZZ$[[\G\Z] ]bNbbehBhnm[monn1rr9P,     !"#$%&'()*+I.XÿZsZ†[ [4]m]€^‡^_L__`{`<60>bc?cSd,dWdh h i5iIj ï
endstream endstream
endobj endobj
startxref startxref
67628 66566
%%EOF %%EOF

View File

@ -1760,10 +1760,16 @@ void runtest(int n, char const* filename1, char const* arg2)
// merge-dict.pdf // merge-dict.pdf
QPDFObjectHandle d1 = pdf.getTrailer().getKey("/Dict1"); QPDFObjectHandle d1 = pdf.getTrailer().getKey("/Dict1");
QPDFObjectHandle d2 = pdf.getTrailer().getKey("/Dict2"); QPDFObjectHandle d2 = pdf.getTrailer().getKey("/Dict2");
d1.mergeDictionary(d2); d1.mergeResources(d2);
std::cout << d1.getJSON().unparse() << std::endl; std::cout << d1.getJSON().unparse() << std::endl;
// Top-level type mismatch // Top-level type mismatch
d1.mergeDictionary(d2.getKey("/k1")); d1.mergeResources(d2.getKey("/k1"));
std::set<std::string> names = d1.getResourceNames();
for (std::set<std::string>::iterator iter = names.begin();
iter != names.end(); ++iter)
{
std::cout << *iter << std::endl;
}
} }
else else
{ {