mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 02:49:00 +00:00
Annotation flattening including form fields
Flatten annotations by integrating their appearance streams into the content stream of the containing page. In the case of form fields, only flatten if /NeedAppearance is false (or equivalently absent). If flattening form fields, also remove /AcroForm from the document catalog.
This commit is contained in:
parent
95d6b17a89
commit
3b8ce4f12a
17
ChangeLog
17
ChangeLog
@ -1,5 +1,22 @@
|
||||
2018-12-31 Jay Berkenbilt <ejb@ql.org>
|
||||
|
||||
* Add several 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
|
||||
(/NeedAppearances is false in /AcroForm), the /AcroForm key of
|
||||
the document catalog is removed. Otherwise, a warning is
|
||||
issued, and form fields are ignored. Non-form-field
|
||||
annotations are always flattened if an appearance stream can
|
||||
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.
|
||||
|
||||
* Add method QPDFObjectHandle::mergeDictionary(), which
|
||||
recursively merges dictionaries with semantics designed for
|
||||
merging resource dictionaries. See detailed description in
|
||||
|
@ -31,6 +31,8 @@
|
||||
|
||||
#include <qpdf/QPDF.hh>
|
||||
|
||||
class QPDFAcroFormDocumentHelper;
|
||||
|
||||
class QPDFPageDocumentHelper: public QPDFDocumentHelper
|
||||
{
|
||||
public:
|
||||
@ -84,7 +86,21 @@ class QPDFPageDocumentHelper: public QPDFDocumentHelper
|
||||
QPDF_DLL
|
||||
void removePage(QPDFPageObjectHelper page);
|
||||
|
||||
// For every annotation, integrate the annotation's appearance
|
||||
// stream into the containing page's content streams, merge the
|
||||
// annotation's resources with the page's resources, and remove
|
||||
// the annotation from the page. Handles widget annotations
|
||||
// associated with interactive form fields as a special case,
|
||||
// including removing the /AcroForm key from the document catalog.
|
||||
QPDF_DLL
|
||||
void flattenAnnotations();
|
||||
|
||||
private:
|
||||
void flattenAnnotationsForPage(
|
||||
QPDFPageObjectHelper& page,
|
||||
QPDFObjectHandle& resources,
|
||||
QPDFAcroFormDocumentHelper& afdh);
|
||||
|
||||
class Members
|
||||
{
|
||||
friend class QPDFPageDocumentHelper;
|
||||
|
@ -149,12 +149,12 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
QPDFMatrix matrix;
|
||||
if (matrix_obj.isMatrix())
|
||||
{
|
||||
/// QTC::TC("qpdf", "QPDFAnnotationObjectHelper explicit matrix");
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper explicit matrix");
|
||||
matrix = QPDFMatrix(matrix_obj.getArrayAsMatrix());
|
||||
}
|
||||
else
|
||||
{
|
||||
/// QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix");
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix");
|
||||
}
|
||||
QPDFObjectHandle::Rectangle rect = rect_obj.getArrayAsRectangle();
|
||||
if (rotate && flags.isInteger() && (flags.getIntValue() & 16))
|
||||
@ -176,7 +176,7 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
switch (rotate)
|
||||
{
|
||||
case 90:
|
||||
/// QTC::TC("qpdf", "QPDFAnnotationObjectHelper rotate 90");
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper rotate 90");
|
||||
rect = QPDFObjectHandle::Rectangle(
|
||||
rect.llx,
|
||||
rect.ury,
|
||||
@ -184,7 +184,7 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
rect.ury + rect_w);
|
||||
break;
|
||||
case 180:
|
||||
/// QTC::TC("qpdf", "QPDFAnnotationObjectHelper rotate 180");
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper rotate 180");
|
||||
rect = QPDFObjectHandle::Rectangle(
|
||||
rect.llx - rect_w,
|
||||
rect.ury,
|
||||
@ -192,7 +192,7 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
|
||||
rect.ury + rect_h);
|
||||
break;
|
||||
case 270:
|
||||
/// QTC::TC("qpdf", "QPDFAnnotationObjectHelper rotate 270");
|
||||
QTC::TC("qpdf", "QPDFAnnotationObjectHelper rotate 270");
|
||||
rect = QPDFObjectHandle::Rectangle(
|
||||
rect.llx - rect_h,
|
||||
rect.ury - rect_w,
|
||||
|
@ -1,4 +1,6 @@
|
||||
#include <qpdf/QPDFPageDocumentHelper.hh>
|
||||
#include <qpdf/QPDFAcroFormDocumentHelper.hh>
|
||||
#include <qpdf/QTC.hh>
|
||||
|
||||
QPDFPageDocumentHelper::Members::~Members()
|
||||
{
|
||||
@ -62,3 +64,128 @@ QPDFPageDocumentHelper::removePage(QPDFPageObjectHelper page)
|
||||
{
|
||||
this->qpdf.removePage(page.getObjectHandle());
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
QPDFPageDocumentHelper::flattenAnnotations()
|
||||
{
|
||||
QPDFAcroFormDocumentHelper afdh(this->qpdf);
|
||||
if (afdh.getNeedAppearances())
|
||||
{
|
||||
this->qpdf.getRoot().getKey("/AcroForm").warnIfPossible(
|
||||
"document does not have updated appearance streams,"
|
||||
" so form fields will not be flattened");
|
||||
}
|
||||
pushInheritedAttributesToPage();
|
||||
std::vector<QPDFPageObjectHelper> pages = getAllPages();
|
||||
for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
|
||||
iter != pages.end(); ++iter)
|
||||
{
|
||||
QPDFPageObjectHelper ph(*iter);
|
||||
QPDFObjectHandle page_oh = ph.getObjectHandle();
|
||||
if (page_oh.getKey("/Resources").isIndirect())
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper indirect resources");
|
||||
page_oh.replaceKey("/Resources",
|
||||
page_oh.getKey("/Resources").shallowCopy());
|
||||
}
|
||||
QPDFObjectHandle resources = ph.getObjectHandle().getKey("/Resources");
|
||||
if (! resources.isDictionary())
|
||||
{
|
||||
// This should never happen and is not exercised in the
|
||||
// test suite
|
||||
resources = QPDFObjectHandle::newDictionary();
|
||||
}
|
||||
flattenAnnotationsForPage(ph, resources, afdh);
|
||||
}
|
||||
if (! afdh.getNeedAppearances())
|
||||
{
|
||||
this->qpdf.getRoot().removeKey("/AcroForm");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
QPDFPageDocumentHelper::flattenAnnotationsForPage(
|
||||
QPDFPageObjectHelper& page,
|
||||
QPDFObjectHandle& resources,
|
||||
QPDFAcroFormDocumentHelper& afdh)
|
||||
{
|
||||
bool need_appearances = afdh.getNeedAppearances();
|
||||
std::vector<QPDFAnnotationObjectHelper> annots = page.getAnnotations();
|
||||
std::vector<QPDFObjectHandle> new_annots;
|
||||
std::string new_content;
|
||||
int rotate = 0;
|
||||
QPDFObjectHandle rotate_obj =
|
||||
page.getObjectHandle().getKey("/Rotate");
|
||||
if (rotate_obj.isInteger() && rotate_obj.getIntValue())
|
||||
{
|
||||
rotate = rotate_obj.getIntValue();
|
||||
}
|
||||
for (std::vector<QPDFAnnotationObjectHelper>::iterator iter =
|
||||
annots.begin();
|
||||
iter != annots.end(); ++iter)
|
||||
{
|
||||
QPDFAnnotationObjectHelper& aoh(*iter);
|
||||
QPDFObjectHandle as = aoh.getAppearanceStream("/N");
|
||||
bool is_widget = (aoh.getSubtype() == "/Widget");
|
||||
bool process = true;
|
||||
if (need_appearances && is_widget)
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper skip widget need appearances");
|
||||
process = false;
|
||||
}
|
||||
if (process && (! as.isStream()))
|
||||
{
|
||||
process = false;
|
||||
}
|
||||
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"));
|
||||
}
|
||||
else
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper non-widget annotation");
|
||||
}
|
||||
new_content += aoh.getPageContentForAppearance(rotate);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_annots.push_back(aoh.getObjectHandle());
|
||||
}
|
||||
}
|
||||
if (new_annots.size() != annots.size())
|
||||
{
|
||||
QPDFObjectHandle page_oh = page.getObjectHandle();
|
||||
if (new_annots.empty())
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper remove annots");
|
||||
page_oh.removeKey("/Annots");
|
||||
}
|
||||
else
|
||||
{
|
||||
QPDFObjectHandle old_annots = page_oh.getKey("/Annots");
|
||||
QPDFObjectHandle new_annots_oh =
|
||||
QPDFObjectHandle::newArray(new_annots);
|
||||
if (old_annots.isIndirect())
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper replace indirect annots");
|
||||
this->qpdf.replaceObject(
|
||||
old_annots.getObjGen(), new_annots_oh);
|
||||
}
|
||||
else
|
||||
{
|
||||
QTC::TC("qpdf", "QPDFPageDocumentHelper replace direct annots");
|
||||
page_oh.replaceKey("/Annots", new_annots_oh);
|
||||
}
|
||||
}
|
||||
page.addPageContents(
|
||||
QPDFObjectHandle::newStream(&qpdf, "q\n"), true);
|
||||
page.addPageContents(
|
||||
QPDFObjectHandle::newStream(&qpdf, "\nQ\n" + new_content), false);
|
||||
}
|
||||
}
|
||||
|
17
qpdf/qpdf.cc
17
qpdf/qpdf.cc
@ -102,6 +102,7 @@ struct Options
|
||||
keep_files_open_set(false),
|
||||
newline_before_endstream(false),
|
||||
coalesce_contents(false),
|
||||
flatten_annotations(false),
|
||||
show_npages(false),
|
||||
deterministic_id(false),
|
||||
static_id(false),
|
||||
@ -174,6 +175,7 @@ struct Options
|
||||
bool newline_before_endstream;
|
||||
std::string linearize_pass1;
|
||||
bool coalesce_contents;
|
||||
bool flatten_annotations;
|
||||
std::string min_version;
|
||||
std::string force_version;
|
||||
bool show_npages;
|
||||
@ -473,6 +475,7 @@ class ArgParser
|
||||
void argNewlineBeforeEndstream();
|
||||
void argLinearizePass1(char* parameter);
|
||||
void argCoalesceContents();
|
||||
void argFlattenAnnotations();
|
||||
void argMinVersion(char* parameter);
|
||||
void argForceVersion(char* parameter);
|
||||
void argSplitPages(char* parameter);
|
||||
@ -670,6 +673,7 @@ ArgParser::initOptionTable()
|
||||
(*t)["linearize-pass1"] = oe_requiredParameter(
|
||||
&ArgParser::argLinearizePass1, "filename");
|
||||
(*t)["coalesce-contents"] = oe_bare(&ArgParser::argCoalesceContents);
|
||||
(*t)["flatten-annotations"] = oe_bare(&ArgParser::argFlattenAnnotations);
|
||||
(*t)["min-version"] = oe_requiredParameter(
|
||||
&ArgParser::argMinVersion, "version");
|
||||
(*t)["force-version"] = oe_requiredParameter(
|
||||
@ -1118,6 +1122,12 @@ ArgParser::argCoalesceContents()
|
||||
o.coalesce_contents = true;
|
||||
}
|
||||
|
||||
void
|
||||
ArgParser::argFlattenAnnotations()
|
||||
{
|
||||
o.flatten_annotations = true;
|
||||
}
|
||||
|
||||
void
|
||||
ArgParser::argMinVersion(char* parameter)
|
||||
{
|
||||
@ -1759,6 +1769,9 @@ familiar with the PDF file format or who are PDF developers.\n\
|
||||
preserve unreferenced page resources\n\
|
||||
--newline-before-endstream always put a newline before endstream\n\
|
||||
--coalesce-contents force all pages' content to be a single stream\n\
|
||||
--flatten-annotations incorporate rendering of annotations into page\n\
|
||||
contents including those for interactive form\n\
|
||||
fields\n\
|
||||
--qdf turns on \"QDF mode\" (below)\n\
|
||||
--linearize-pass1=file write intermediate pass of linearized file\n\
|
||||
for debugging\n\
|
||||
@ -3124,6 +3137,10 @@ static void do_inspection(QPDF& pdf, Options& o)
|
||||
static void handle_transformations(QPDF& pdf, Options& o)
|
||||
{
|
||||
QPDFPageDocumentHelper dh(pdf);
|
||||
if (o.flatten_annotations)
|
||||
{
|
||||
dh.flattenAnnotations();
|
||||
}
|
||||
if (o.coalesce_contents)
|
||||
{
|
||||
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
|
||||
|
@ -377,3 +377,15 @@ 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
|
||||
QPDFAnnotationObjectHelper rotate 180 0
|
||||
QPDFAnnotationObjectHelper rotate 270 0
|
||||
QPDFPageDocumentHelper indirect resources 0
|
||||
QPDFPageDocumentHelper skip widget need appearances 0
|
||||
QPDFPageDocumentHelper merge DR 0
|
||||
QPDFPageDocumentHelper non-widget annotation 0
|
||||
QPDFPageDocumentHelper remove annots 0
|
||||
QPDFPageDocumentHelper replace indirect annots 0
|
||||
QPDFPageDocumentHelper replace direct annots 0
|
||||
|
@ -1445,6 +1445,62 @@ $td->runtest("check output",
|
||||
{$td->FILE => "a.pdf"},
|
||||
{$td->FILE => "minimal-rotated.pdf"});
|
||||
|
||||
show_ntests();
|
||||
# ----------
|
||||
$td->notify("--- Flatten Form/Annotations ---");
|
||||
|
||||
# manual-appearances was created by hand-coding appearance streams
|
||||
# with graphics that make it easy to test matrix calculations. The
|
||||
# result of flattening the annotations was compared visually with
|
||||
# okular. Some PDF viewers don't actually display the original version
|
||||
# correctly. The pages are as follows:
|
||||
# - page 1: normal
|
||||
# - page 2: rotate 90 with /F 20 (NoRotate)
|
||||
# - page 3: non-trivial matrix
|
||||
# - page 4: non-trivial matrix, rotate
|
||||
# - page 5: rotate 180 with /F 20
|
||||
# - page 6: rotate 90, /F 20, non-trivial matrix
|
||||
# - page 7: normal -- available for additional testing
|
||||
# - page 8: rotate 270 with /F 20
|
||||
# - page 9: normal -- available for additional testing
|
||||
#
|
||||
# form-filled-by-acrobat was filled in using the Acrobat Reader
|
||||
# android app. One of its appearance streams is actually an image.
|
||||
#
|
||||
# need-appearances is based on form-field-types with manual edits to
|
||||
# turn on NeedAppearances, change /V for a field, and add the comment
|
||||
# annotation from comment-annotation.pdf. The test output includes a
|
||||
# flattened version of the comment annotation but not of the form
|
||||
# fields.
|
||||
my @annotation_files = (
|
||||
'manual-appearances',
|
||||
'form-filled-by-acrobat',
|
||||
'comment-annotation',
|
||||
'comment-annotation-direct',
|
||||
'form-field-types',
|
||||
'need-appearances',
|
||||
);
|
||||
$n_tests += 2 * scalar(@annotation_files);
|
||||
|
||||
foreach my $f (@annotation_files)
|
||||
{
|
||||
my $exp_out = {$td->STRING => "", $td->EXIT_STATUS => 0};
|
||||
if (-f "$f-warn.out")
|
||||
{
|
||||
$exp_out = {$td->FILE => "$f-warn.out", $td->EXIT_STATUS => 3};
|
||||
}
|
||||
$td->runtest("flatten $f",
|
||||
{$td->COMMAND =>
|
||||
"qpdf --qdf --static-id --no-original-object-ids" .
|
||||
" --flatten-annotations $f.pdf a.pdf"},
|
||||
$exp_out,
|
||||
$td->NORMALIZE_NEWLINES);
|
||||
copy("a.pdf", "$f-out.pdf");
|
||||
$td->runtest("check output",
|
||||
{$td->FILE => "a.pdf"},
|
||||
{$td->FILE => "$f-out.pdf"});
|
||||
}
|
||||
|
||||
show_ntests();
|
||||
# ----------
|
||||
$td->notify("--- Merging and Splitting ---");
|
||||
|
232
qpdf/qtest/qpdf/comment-annotation-direct-out.pdf
Normal file
232
qpdf/qtest/qpdf/comment-annotation-direct-out.pdf
Normal file
@ -0,0 +1,232 @@
|
||||
%PDF-1.3
|
||||
%¿÷¢þ
|
||||
%QDF-1.0
|
||||
|
||||
1 0 obj
|
||||
<<
|
||||
/Pages 2 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<<
|
||||
/Count 1
|
||||
/Kids [
|
||||
3 0 R
|
||||
]
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
%% Page 1
|
||||
3 0 obj
|
||||
<<
|
||||
/Annots [
|
||||
4 0 R
|
||||
]
|
||||
/Contents [
|
||||
5 0 R
|
||||
7 0 R
|
||||
9 0 R
|
||||
]
|
||||
/MediaBox [
|
||||
0
|
||||
0
|
||||
612
|
||||
792
|
||||
]
|
||||
/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
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<<
|
||||
/F 28
|
||||
/Open false
|
||||
/Parent 13 0 R
|
||||
/Rect [
|
||||
612
|
||||
601
|
||||
792
|
||||
721
|
||||
]
|
||||
/Subtype /Popup
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
5 0 obj
|
||||
<<
|
||||
/Length 6 0 R
|
||||
>>
|
||||
stream
|
||||
q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
2
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
7 0 obj
|
||||
<<
|
||||
/Length 8 0 R
|
||||
>>
|
||||
stream
|
||||
BT
|
||||
/F1 24 Tf
|
||||
72 720 Td
|
||||
(Potato) Tj
|
||||
ET
|
||||
endstream
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
44
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
9 0 obj
|
||||
<<
|
||||
/Length 10 0 R
|
||||
>>
|
||||
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
|
||||
Q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
1032
|
||||
endobj
|
||||
|
||||
11 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font
|
||||
>>
|
||||
endobj
|
||||
|
||||
12 0 obj
|
||||
[
|
||||
/PDF
|
||||
/Text
|
||||
]
|
||||
endobj
|
||||
|
||||
13 0 obj
|
||||
<<
|
||||
/AP <<
|
||||
/N 14 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 4 0 R
|
||||
/Rect [
|
||||
235
|
||||
703
|
||||
253
|
||||
721
|
||||
]
|
||||
/Subtype /Text
|
||||
/T (Jay Berkenbilt)
|
||||
/Type /Annot
|
||||
>>
|
||||
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
|
||||
trailer <<
|
||||
/Root 1 0 R
|
||||
/Size 16
|
||||
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
|
||||
>>
|
||||
startxref
|
||||
3815
|
||||
%%EOF
|
182
qpdf/qtest/qpdf/comment-annotation-direct.pdf
Normal file
182
qpdf/qtest/qpdf/comment-annotation-direct.pdf
Normal file
@ -0,0 +1,182 @@
|
||||
%PDF-1.3
|
||||
%¿÷¢þ
|
||||
%QDF-1.0
|
||||
|
||||
1 0 obj
|
||||
<<
|
||||
/Pages 2 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<<
|
||||
/Count 1
|
||||
/Kids [
|
||||
3 0 R
|
||||
]
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
%% Page 1
|
||||
3 0 obj
|
||||
<<
|
||||
/Annots [
|
||||
4 0 R
|
||||
5 0 R
|
||||
]
|
||||
/Contents 6 0 R
|
||||
/MediaBox [
|
||||
0
|
||||
0
|
||||
612
|
||||
792
|
||||
]
|
||||
/Parent 2 0 R
|
||||
/Resources <<
|
||||
/Font <<
|
||||
/F1 8 0 R
|
||||
>>
|
||||
/ProcSet 9 0 R
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<<
|
||||
/AP <<
|
||||
/N 10 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 5 0 R
|
||||
/Rect [
|
||||
235
|
||||
703
|
||||
253
|
||||
721
|
||||
]
|
||||
/Subtype /Text
|
||||
/T (Jay Berkenbilt)
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<<
|
||||
/F 28
|
||||
/Open false
|
||||
/Parent 4 0 R
|
||||
/Rect [
|
||||
612
|
||||
601
|
||||
792
|
||||
721
|
||||
]
|
||||
/Subtype /Popup
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
6 0 obj
|
||||
<<
|
||||
/Length 7 0 R
|
||||
>>
|
||||
stream
|
||||
BT
|
||||
/F1 24 Tf
|
||||
72 720 Td
|
||||
(Potato) Tj
|
||||
ET
|
||||
endstream
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
44
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font
|
||||
>>
|
||||
endobj
|
||||
|
||||
9 0 obj
|
||||
[
|
||||
/PDF
|
||||
/Text
|
||||
]
|
||||
endobj
|
||||
|
||||
10 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 11 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
|
||||
11 0 obj
|
||||
928
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000025 00000 n
|
||||
0000000079 00000 n
|
||||
0000000161 00000 n
|
||||
0000000389 00000 n
|
||||
0000000718 00000 n
|
||||
0000000880 00000 n
|
||||
0000000979 00000 n
|
||||
0000000998 00000 n
|
||||
0000001116 00000 n
|
||||
0000001151 00000 n
|
||||
0000002395 00000 n
|
||||
trailer <<
|
||||
/Root 1 0 R
|
||||
/Size 12
|
||||
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><0ddac86998f1552ce51b2c402848bd8e>]
|
||||
>>
|
||||
startxref
|
||||
2416
|
||||
%%EOF
|
237
qpdf/qtest/qpdf/comment-annotation-out.pdf
Normal file
237
qpdf/qtest/qpdf/comment-annotation-out.pdf
Normal file
@ -0,0 +1,237 @@
|
||||
%PDF-1.3
|
||||
%¿÷¢þ
|
||||
%QDF-1.0
|
||||
|
||||
1 0 obj
|
||||
<<
|
||||
/Pages 2 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<<
|
||||
/Count 1
|
||||
/Kids [
|
||||
3 0 R
|
||||
]
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
%% Page 1
|
||||
3 0 obj
|
||||
<<
|
||||
/Annots 4 0 R
|
||||
/Contents [
|
||||
5 0 R
|
||||
7 0 R
|
||||
9 0 R
|
||||
]
|
||||
/MediaBox [
|
||||
0
|
||||
0
|
||||
612
|
||||
792
|
||||
]
|
||||
/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
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
[
|
||||
13 0 R
|
||||
]
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
5 0 obj
|
||||
<<
|
||||
/Length 6 0 R
|
||||
>>
|
||||
stream
|
||||
q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
2
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
7 0 obj
|
||||
<<
|
||||
/Length 8 0 R
|
||||
>>
|
||||
stream
|
||||
BT
|
||||
/F1 24 Tf
|
||||
72 720 Td
|
||||
(Potato) Tj
|
||||
ET
|
||||
endstream
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
44
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
9 0 obj
|
||||
<<
|
||||
/Length 10 0 R
|
||||
>>
|
||||
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
|
||||
Q
|
||||
endstream
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
1032
|
||||
endobj
|
||||
|
||||
11 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font
|
||||
>>
|
||||
endobj
|
||||
|
||||
12 0 obj
|
||||
[
|
||||
/PDF
|
||||
/Text
|
||||
]
|
||||
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
|
||||
0
|
||||
18
|
||||
18
|
||||
]
|
||||
/Resources <<
|
||||
/ExtGState <<
|
||||
/GS0 <<
|
||||
/AIS false
|
||||
/BM /Normal
|
||||
/CA .6
|
||||
/Type /ExtGState
|
||||
/ca .6
|
||||
>>
|
||||
>>
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Type /XObject
|
||||
/Length 16 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
|
||||
16 0 obj
|
||||
928
|
||||
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
|
||||
trailer <<
|
||||
/Root 1 0 R
|
||||
/Size 17
|
||||
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
|
||||
>>
|
||||
startxref
|
||||
3836
|
||||
%%EOF
|
187
qpdf/qtest/qpdf/comment-annotation.pdf
Normal file
187
qpdf/qtest/qpdf/comment-annotation.pdf
Normal file
@ -0,0 +1,187 @@
|
||||
%PDF-1.3
|
||||
%¿÷¢þ
|
||||
%QDF-1.0
|
||||
|
||||
1 0 obj
|
||||
<<
|
||||
/Pages 2 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<<
|
||||
/Count 1
|
||||
/Kids [
|
||||
3 0 R
|
||||
]
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
%% Page 1
|
||||
3 0 obj
|
||||
<<
|
||||
/Annots 4 0 R
|
||||
/Contents 5 0 R
|
||||
/MediaBox [
|
||||
0
|
||||
0
|
||||
612
|
||||
792
|
||||
]
|
||||
/Parent 2 0 R
|
||||
/Resources <<
|
||||
/Font <<
|
||||
/F1 7 0 R
|
||||
>>
|
||||
/ProcSet 8 0 R
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
[
|
||||
9 0 R
|
||||
10 0 R
|
||||
]
|
||||
endobj
|
||||
|
||||
%% Contents for page 1
|
||||
5 0 obj
|
||||
<<
|
||||
/Length 6 0 R
|
||||
>>
|
||||
stream
|
||||
BT
|
||||
/F1 24 Tf
|
||||
72 720 Td
|
||||
(Potato) Tj
|
||||
ET
|
||||
endstream
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
44
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font
|
||||
>>
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
[
|
||||
/PDF
|
||||
/Text
|
||||
]
|
||||
endobj
|
||||
|
||||
9 0 obj
|
||||
<<
|
||||
/AP <<
|
||||
/N 11 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 10 0 R
|
||||
/Rect [
|
||||
235
|
||||
703
|
||||
253
|
||||
721
|
||||
]
|
||||
/Subtype /Text
|
||||
/T (Jay Berkenbilt)
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
<<
|
||||
/F 28
|
||||
/Open false
|
||||
/Parent 9 0 R
|
||||
/Rect [
|
||||
612
|
||||
601
|
||||
792
|
||||
721
|
||||
]
|
||||
/Subtype /Popup
|
||||
/Type /Annot
|
||||
>>
|
||||
endobj
|
||||
|
||||
11 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 12 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
|
||||
12 0 obj
|
||||
928
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 13
|
||||
0000000000 65535 f
|
||||
0000000025 00000 n
|
||||
0000000079 00000 n
|
||||
0000000161 00000 n
|
||||
0000000369 00000 n
|
||||
0000000429 00000 n
|
||||
0000000528 00000 n
|
||||
0000000547 00000 n
|
||||
0000000665 00000 n
|
||||
0000000700 00000 n
|
||||
0000001030 00000 n
|
||||
0000001170 00000 n
|
||||
0000002414 00000 n
|
||||
trailer <<
|
||||
/Root 1 0 R
|
||||
/Size 13
|
||||
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><c5b1999a07a3fdcd0c04cfeed299c25a>]
|
||||
>>
|
||||
startxref
|
||||
2435
|
||||
%%EOF
|
2612
qpdf/qtest/qpdf/form-field-types-out.pdf
Normal file
2612
qpdf/qtest/qpdf/form-field-types-out.pdf
Normal file
File diff suppressed because it is too large
Load Diff
2443
qpdf/qtest/qpdf/form-field-types.pdf
Normal file
2443
qpdf/qtest/qpdf/form-field-types.pdf
Normal file
File diff suppressed because it is too large
Load Diff
1654
qpdf/qtest/qpdf/form-filled-by-acrobat-out.pdf
Normal file
1654
qpdf/qtest/qpdf/form-filled-by-acrobat-out.pdf
Normal file
File diff suppressed because one or more lines are too long
2500
qpdf/qtest/qpdf/form-filled-by-acrobat.pdf
Normal file
2500
qpdf/qtest/qpdf/form-filled-by-acrobat.pdf
Normal file
File diff suppressed because it is too large
Load Diff
1445
qpdf/qtest/qpdf/manual-appearances-out.pdf
Normal file
1445
qpdf/qtest/qpdf/manual-appearances-out.pdf
Normal file
File diff suppressed because it is too large
Load Diff
2680
qpdf/qtest/qpdf/manual-appearances.pdf
Normal file
2680
qpdf/qtest/qpdf/manual-appearances.pdf
Normal file
File diff suppressed because it is too large
Load Diff
2575
qpdf/qtest/qpdf/need-appearances-out.pdf
Normal file
2575
qpdf/qtest/qpdf/need-appearances-out.pdf
Normal file
File diff suppressed because it is too large
Load Diff
2
qpdf/qtest/qpdf/need-appearances-warn.out
Normal file
2
qpdf/qtest/qpdf/need-appearances-warn.out
Normal file
@ -0,0 +1,2 @@
|
||||
WARNING: need-appearances.pdf object stream 1, object 2 0 at offset 438: document does not have updated appearance streams, so form fields will not be flattened
|
||||
qpdf: operation succeeded with warnings; resulting file may have some problems
|
2541
qpdf/qtest/qpdf/need-appearances.pdf
Normal file
2541
qpdf/qtest/qpdf/need-appearances.pdf
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user