2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-06-03 19:00:51 +00:00

When flattening, remove annotations with no appearance stream

With the exception of form field annotations when /NeedAppearances is
true, remove annotations that don't have appearance streams when
flattening. There is no reason to keep these when flattening since
they are invisible. This may include unchecked checkboxes, unshown
popup windows, etc.
This commit is contained in:
Jay Berkenbilt 2019-01-20 20:40:56 -05:00
parent 85f70cae23
commit 65ef0bf313
12 changed files with 8679 additions and 1371 deletions

View File

@ -1,3 +1,10 @@
2019-01-20 Jay Berkenbilt <ejb@ql.org>
* When flattening annotations, remove annotations from the file
that don't have appearance streams. These were previously being
preserved, but since they are invisible, there is no reason to
preserve them when flattening annotations.
2019-01-19 Jay Berkenbilt <ejb@ql.org> 2019-01-19 Jay Berkenbilt <ejb@ql.org>
* NOTE: qpdf CLI: some non-compatible changes were made to how * NOTE: qpdf CLI: some non-compatible changes were made to how

View File

@ -141,11 +141,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
QTC::TC("qpdf", "QPDFPageDocumentHelper skip widget need appearances"); QTC::TC("qpdf", "QPDFPageDocumentHelper skip widget need appearances");
process = false; process = false;
} }
if (process && (! as.isStream())) if (process && as.isStream())
{
process = false;
}
if (process)
{ {
if (is_widget) if (is_widget)
{ {
@ -200,6 +196,15 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
} }
new_content += content; new_content += content;
} }
else if (process)
{
// If an annotation has no appearance stream, just drop
// the annotation when flattening. This can happen for
// unchecked checkboxes and radio buttons, popup windows
// associated with comments that aren't visible, and other
// types of annotations that aren't visible.
QTC::TC("qpdf", "QPDFPageDocumentHelper ignore annotation with no appearance");
}
else else
{ {
new_annots.push_back(aoh.getObjectHandle()); new_annots.push_back(aoh.getObjectHandle());

View File

@ -421,3 +421,4 @@ qpdf auto-encode password 0
qpdf bytes fallback warning 0 qpdf bytes fallback warning 0
qpdf invalid utf-8 in auto 0 qpdf invalid utf-8 in auto 0
qpdf input password hex-bytes 0 qpdf input password hex-bytes 0
QPDFPageDocumentHelper ignore annotation with no appearance 0

View File

@ -1609,6 +1609,7 @@ my @annotation_files = (
'comment-annotation-direct', 'comment-annotation-direct',
'sample-form', 'sample-form',
'need-appearances', 'need-appearances',
'need-appearances-more',
); );
$n_tests += 2 * scalar(@annotation_files); $n_tests += 2 * scalar(@annotation_files);

File diff suppressed because it is too large Load Diff

View File

@ -22,13 +22,10 @@ endobj
%% Page 1 %% Page 1
3 0 obj 3 0 obj
<< <<
/Annots [
4 0 R
]
/Contents [ /Contents [
5 0 R 4 0 R
7 0 R 6 0 R
9 0 R 8 0 R
] ]
/MediaBox [ /MediaBox [
0 0
@ -39,51 +36,35 @@ endobj
/Parent 2 0 R /Parent 2 0 R
/Resources << /Resources <<
/Font << /Font <<
/F1 11 0 R /F1 10 0 R
>> >>
/ProcSet 12 0 R /ProcSet 11 0 R
/XObject << /XObject <<
/Fxo1 13 0 R /Fxo1 12 0 R
>> >>
>> >>
/Type /Page /Type /Page
>> >>
endobj endobj
%% Contents for page 1
4 0 obj 4 0 obj
<< <<
/F 28 /Length 5 0 R
/Open false
/Parent 15 0 R
/Rect [
612
601
792
721
]
/Subtype /Popup
/Type /Annot
>>
endobj
%% Contents for page 1
5 0 obj
<<
/Length 6 0 R
>> >>
stream stream
q q
endstream endstream
endobj endobj
6 0 obj 5 0 obj
2 2
endobj endobj
%% Contents for page 1 %% Contents for page 1
7 0 obj 6 0 obj
<< <<
/Length 8 0 R /Length 7 0 R
>> >>
stream stream
BT BT
@ -94,14 +75,14 @@ ET
endstream endstream
endobj endobj
8 0 obj 7 0 obj
44 44
endobj endobj
%% Contents for page 1 %% Contents for page 1
9 0 obj 8 0 obj
<< <<
/Length 10 0 R /Length 9 0 R
>> >>
stream stream
@ -113,11 +94,11 @@ Q
endstream endstream
endobj endobj
10 0 obj 9 0 obj
71 71
endobj endobj
11 0 obj 10 0 obj
<< <<
/BaseFont /Helvetica /BaseFont /Helvetica
/Encoding /WinAnsiEncoding /Encoding /WinAnsiEncoding
@ -127,14 +108,14 @@ endobj
>> >>
endobj endobj
12 0 obj 11 0 obj
[ [
/PDF /PDF
/Text /Text
] ]
endobj endobj
13 0 obj 12 0 obj
<< <<
/BBox [ /BBox [
0 0
@ -155,7 +136,7 @@ endobj
>> >>
/Subtype /Form /Subtype /Form
/Type /XObject /Type /XObject
/Length 14 0 R /Length 13 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
@ -163,63 +144,31 @@ endstream
endobj endobj
%QDF: ignore_newline %QDF: ignore_newline
14 0 obj 13 0 obj
928 928
endobj endobj
15 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 4 0 R
/Rect [
235
703
253
721
]
/Subtype /Text
/T (Jay Berkenbilt)
/Type /Annot
>>
endobj
xref xref
0 16 0 14
0000000000 65535 f 0000000000 65535 f
0000000025 00000 n 0000000025 00000 n
0000000079 00000 n 0000000079 00000 n
0000000161 00000 n 0000000161 00000 n
0000000453 00000 n 0000000450 00000 n
0000000616 00000 n 0000000507 00000 n
0000000673 00000 n 0000000548 00000 n
0000000714 00000 n 0000000647 00000 n
0000000813 00000 n 0000000689 00000 n
0000000855 00000 n 0000000815 00000 n
0000000982 00000 n 0000000834 00000 n
0000001002 00000 n 0000000953 00000 n
0000001121 00000 n 0000000989 00000 n
0000001157 00000 n 0000002233 00000 n
0000002401 00000 n
0000002422 00000 n
trailer << trailer <<
/Root 1 0 R /Root 1 0 R
/Size 16 /Size 14
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>] /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
>> >>
startxref startxref
2752 2254
%%EOF %%EOF

View File

@ -22,11 +22,10 @@ endobj
%% Page 1 %% Page 1
3 0 obj 3 0 obj
<< <<
/Annots 4 0 R
/Contents [ /Contents [
5 0 R 4 0 R
7 0 R 6 0 R
9 0 R 8 0 R
] ]
/MediaBox [ /MediaBox [
0 0
@ -37,41 +36,35 @@ endobj
/Parent 2 0 R /Parent 2 0 R
/Resources << /Resources <<
/Font << /Font <<
/F1 11 0 R /F1 10 0 R
>> >>
/ProcSet 12 0 R /ProcSet 11 0 R
/XObject << /XObject <<
/Fxo1 13 0 R /Fxo1 12 0 R
>> >>
>> >>
/Type /Page /Type /Page
>> >>
endobj endobj
4 0 obj
[
15 0 R
]
endobj
%% Contents for page 1 %% Contents for page 1
5 0 obj 4 0 obj
<< <<
/Length 6 0 R /Length 5 0 R
>> >>
stream stream
q q
endstream endstream
endobj endobj
6 0 obj 5 0 obj
2 2
endobj endobj
%% Contents for page 1 %% Contents for page 1
7 0 obj 6 0 obj
<< <<
/Length 8 0 R /Length 7 0 R
>> >>
stream stream
BT BT
@ -82,14 +75,14 @@ ET
endstream endstream
endobj endobj
8 0 obj 7 0 obj
44 44
endobj endobj
%% Contents for page 1 %% Contents for page 1
9 0 obj 8 0 obj
<< <<
/Length 10 0 R /Length 9 0 R
>> >>
stream stream
@ -101,11 +94,11 @@ Q
endstream endstream
endobj endobj
10 0 obj 9 0 obj
71 71
endobj endobj
11 0 obj 10 0 obj
<< <<
/BaseFont /Helvetica /BaseFont /Helvetica
/Encoding /WinAnsiEncoding /Encoding /WinAnsiEncoding
@ -115,14 +108,14 @@ endobj
>> >>
endobj endobj
12 0 obj 11 0 obj
[ [
/PDF /PDF
/Text /Text
] ]
endobj endobj
13 0 obj 12 0 obj
<< <<
/BBox [ /BBox [
0 0
@ -143,7 +136,7 @@ endobj
>> >>
/Subtype /Form /Subtype /Form
/Type /XObject /Type /XObject
/Length 14 0 R /Length 13 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
@ -151,80 +144,31 @@ endstream
endobj endobj
%QDF: ignore_newline %QDF: ignore_newline
14 0 obj 13 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 14
0000000000 65535 f 0000000000 65535 f
0000000025 00000 n 0000000025 00000 n
0000000079 00000 n 0000000079 00000 n
0000000161 00000 n 0000000161 00000 n
0000000443 00000 n 0000000450 00000 n
0000000495 00000 n 0000000507 00000 n
0000000552 00000 n 0000000548 00000 n
0000000593 00000 n 0000000647 00000 n
0000000692 00000 n 0000000689 00000 n
0000000734 00000 n 0000000815 00000 n
0000000861 00000 n 0000000834 00000 n
0000000881 00000 n 0000000953 00000 n
0000001000 00000 n 0000000989 00000 n
0000001036 00000 n 0000002233 00000 n
0000002280 00000 n
0000002301 00000 n
0000002442 00000 n
trailer << trailer <<
/Root 1 0 R /Root 1 0 R
/Size 17 /Size 14
/ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>] /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
>> >>
startxref startxref
2773 2254
%%EOF %%EOF

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,2 @@
WARNING: need-appearances-more.pdf, object 1 0 at offset 50: 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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1408,12 +1408,6 @@ endobj
%% Page 1 %% Page 1
45 0 obj 45 0 obj
<< <<
/Annots [
15 0 R
17 0 R
18 0 R
19 0 R
]
/Contents [ /Contents [
78 0 R 78 0 R
80 0 R 80 0 R
@ -2751,10 +2745,12 @@ endobj
>> >>
stream stream
ê  ê 
    !"#$%&'B—P P@SnXZc×eefwfhjj+lklnhn{ÿŸÿ¶±ì:f  / Ä Ø  š     !"#$%&'B—P P@S2UpU„_ a<>cf;fOl/lCn,n?ÿcÿzIu°Úþ*
Þ
ó ˆ œ J ^
endstream endstream
endobj endobj
startxref startxref
68762 68702
%%EOF %%EOF