Commit 78a7193fe2a5d14ca422407b35de9302f01d62ec

Authored by Jay Berkenbilt
1 parent 1ad6451e

Preserve annotations that inherently lack appearance (fixes #1039)

...when flattening annotations. This includes /Link, /Popup,
and /Projection.
ChangeLog
  1 +2023-12-29 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * When flattening annotations, preserve annotations without any
  4 + appearance information at all, such as types /Link, /Popup, and
  5 + /Projection. Fixes #1039.
  6 +
1 7 2023-12-25 Jay Berkenbilt <ejb@ql.org>
2 8  
3 9 * Detect overlong UTF-8 in the UTF-8 decoder, and fix detection of
... ...
libqpdf/QPDFPageDocumentHelper.cc
... ... @@ -125,11 +125,12 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
125 125 ++next_fx;
126 126 }
127 127 new_content += content;
128   - } else if (process) {
129   - // If an annotation has no appearance stream, just drop the annotation when flattening.
130   - // This can happen for unchecked checkboxes and radio buttons, popup windows associated
131   - // with comments that aren't visible, and other types of annotations that aren't
132   - // visible.
  128 + } else if (process && !aoh.getAppearanceDictionary().isNull()) {
  129 + // If an annotation has no selected appearance stream, just drop the annotation when
  130 + // flattening. This can happen for unchecked checkboxes and radio buttons, popup windows
  131 + // associated with comments that aren't visible, and other types of annotations that
  132 + // aren't visible. Annotations that have no appearance streams at all, such as Link,
  133 + // Popup, and Projection, should be preserved.
133 134 QTC::TC("qpdf", "QPDFPageDocumentHelper ignore annotation with no appearance");
134 135 } else {
135 136 new_annots.push_back(aoh.getObjectHandle());
... ...
manual/release-notes.rst
... ... @@ -38,6 +38,12 @@ Planned changes for future 12.x (subject to change):
38 38  
39 39 .. x.y.z: not yet released
40 40  
  41 +11.7.1: not yet released
  42 + - Bug fixes:
  43 +
  44 + - When flattening annotations, preserve hyperlinks and other
  45 + annotations that inherently have no appearance information.
  46 +
41 47 11.7.0: December 24, 2023
42 48 - Bug fixes:
43 49  
... ...
qpdf/qtest/qpdf/appearances-a-more.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-a-more2.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-a-more3.pdf
No preview for this file type
qpdf/qtest/qpdf/appearances-a.pdf
No preview for this file type
qpdf/qtest/qpdf/comment-annotation-direct-out.pdf
... ... @@ -22,10 +22,13 @@ endobj
22 22 %% Page 1
23 23 3 0 obj
24 24 <<
25   - /Contents [
  25 + /Annots [
26 26 4 0 R
27   - 6 0 R
28   - 8 0 R
  27 + ]
  28 + /Contents [
  29 + 5 0 R
  30 + 7 0 R
  31 + 9 0 R
29 32 ]
30 33 /MediaBox [
31 34 0
... ... @@ -36,35 +39,51 @@ endobj
36 39 /Parent 2 0 R
37 40 /Resources <<
38 41 /Font <<
39   - /F1 10 0 R
  42 + /F1 11 0 R
40 43 >>
41   - /ProcSet 11 0 R
  44 + /ProcSet 12 0 R
42 45 /XObject <<
43   - /Fxo1 12 0 R
  46 + /Fxo1 13 0 R
44 47 >>
45 48 >>
46 49 /Type /Page
47 50 >>
48 51 endobj
49 52  
50   -%% Contents for page 1
51 53 4 0 obj
52 54 <<
53   - /Length 5 0 R
  55 + /F 28
  56 + /Open false
  57 + /Parent 15 0 R
  58 + /Rect [
  59 + 612
  60 + 601
  61 + 792
  62 + 721
  63 + ]
  64 + /Subtype /Popup
  65 + /Type /Annot
  66 +>>
  67 +endobj
  68 +
  69 +%% Contents for page 1
  70 +5 0 obj
  71 +<<
  72 + /Length 6 0 R
54 73 >>
55 74 stream
56 75 q
57 76 endstream
58 77 endobj
59 78  
60   -5 0 obj
  79 +6 0 obj
61 80 2
62 81 endobj
63 82  
64 83 %% Contents for page 1
65   -6 0 obj
  84 +7 0 obj
66 85 <<
67   - /Length 7 0 R
  86 + /Length 8 0 R
68 87 >>
69 88 stream
70 89 BT
... ... @@ -75,14 +94,14 @@ ET
75 94 endstream
76 95 endobj
77 96  
78   -7 0 obj
  97 +8 0 obj
79 98 44
80 99 endobj
81 100  
82 101 %% Contents for page 1
83   -8 0 obj
  102 +9 0 obj
84 103 <<
85   - /Length 9 0 R
  104 + /Length 10 0 R
86 105 >>
87 106 stream
88 107  
... ... @@ -94,11 +113,11 @@ Q
94 113 endstream
95 114 endobj
96 115  
97   -9 0 obj
  116 +10 0 obj
98 117 35
99 118 endobj
100 119  
101   -10 0 obj
  120 +11 0 obj
102 121 <<
103 122 /BaseFont /Helvetica
104 123 /Encoding /WinAnsiEncoding
... ... @@ -108,14 +127,14 @@ endobj
108 127 >>
109 128 endobj
110 129  
111   -11 0 obj
  130 +12 0 obj
112 131 [
113 132 /PDF
114 133 /Text
115 134 ]
116 135 endobj
117 136  
118   -12 0 obj
  137 +13 0 obj
119 138 <<
120 139 /BBox [
121 140 0
... ... @@ -136,7 +155,7 @@ endobj
136 155 >>
137 156 /Subtype /Form
138 157 /Type /XObject
139   - /Length 13 0 R
  158 + /Length 14 0 R
140 159 >>
141 160 stream
142 161 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
... ... @@ -144,31 +163,63 @@ endstream
144 163 endobj
145 164  
146 165 %QDF: ignore_newline
147   -13 0 obj
  166 +14 0 obj
148 167 928
149 168 endobj
150 169  
  170 +15 0 obj
  171 +<<
  172 + /AP <<
  173 + /N 13 0 R
  174 + >>
  175 + /C [
  176 + 1
  177 + 1
  178 + 0
  179 + ]
  180 + /CA 1
  181 + /Contents (Salad)
  182 + /CreationDate (D:20181231235455Z00'00)
  183 + /F 28
  184 + /M (D:20181231235455Z00'00)
  185 + /Name /Comment
  186 + /P 3 0 R
  187 + /Popup 4 0 R
  188 + /Rect [
  189 + 235
  190 + 703
  191 + 253
  192 + 721
  193 + ]
  194 + /Subtype /Text
  195 + /T (Jay Berkenbilt)
  196 + /Type /Annot
  197 +>>
  198 +endobj
  199 +
151 200 xref
152   -0 14
  201 +0 16
153 202 0000000000 65535 f
154 203 0000000025 00000 n
155 204 0000000079 00000 n
156 205 0000000161 00000 n
157   -0000000450 00000 n
158   -0000000507 00000 n
159   -0000000548 00000 n
160   -0000000647 00000 n
161   -0000000689 00000 n
162   -0000000779 00000 n
163   -0000000798 00000 n
164   -0000000917 00000 n
165   -0000000953 00000 n
166   -0000002197 00000 n
  206 +0000000453 00000 n
  207 +0000000616 00000 n
  208 +0000000673 00000 n
  209 +0000000714 00000 n
  210 +0000000813 00000 n
  211 +0000000855 00000 n
  212 +0000000946 00000 n
  213 +0000000966 00000 n
  214 +0000001085 00000 n
  215 +0000001121 00000 n
  216 +0000002365 00000 n
  217 +0000002386 00000 n
167 218 trailer <<
168 219 /Root 1 0 R
169   - /Size 14
  220 + /Size 16
170 221 /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
171 222 >>
172 223 startxref
173   -2218
  224 +2716
174 225 %%EOF
... ...
qpdf/qtest/qpdf/comment-annotation-out.pdf
... ... @@ -22,10 +22,11 @@ endobj
22 22 %% Page 1
23 23 3 0 obj
24 24 <<
  25 + /Annots 4 0 R
25 26 /Contents [
26   - 4 0 R
27   - 6 0 R
28   - 8 0 R
  27 + 5 0 R
  28 + 7 0 R
  29 + 9 0 R
29 30 ]
30 31 /MediaBox [
31 32 0
... ... @@ -36,35 +37,41 @@ endobj
36 37 /Parent 2 0 R
37 38 /Resources <<
38 39 /Font <<
39   - /F1 10 0 R
  40 + /F1 11 0 R
40 41 >>
41   - /ProcSet 11 0 R
  42 + /ProcSet 12 0 R
42 43 /XObject <<
43   - /Fxo1 12 0 R
  44 + /Fxo1 13 0 R
44 45 >>
45 46 >>
46 47 /Type /Page
47 48 >>
48 49 endobj
49 50  
50   -%% Contents for page 1
51 51 4 0 obj
  52 +[
  53 + 15 0 R
  54 +]
  55 +endobj
  56 +
  57 +%% Contents for page 1
  58 +5 0 obj
52 59 <<
53   - /Length 5 0 R
  60 + /Length 6 0 R
54 61 >>
55 62 stream
56 63 q
57 64 endstream
58 65 endobj
59 66  
60   -5 0 obj
  67 +6 0 obj
61 68 2
62 69 endobj
63 70  
64 71 %% Contents for page 1
65   -6 0 obj
  72 +7 0 obj
66 73 <<
67   - /Length 7 0 R
  74 + /Length 8 0 R
68 75 >>
69 76 stream
70 77 BT
... ... @@ -75,14 +82,14 @@ ET
75 82 endstream
76 83 endobj
77 84  
78   -7 0 obj
  85 +8 0 obj
79 86 44
80 87 endobj
81 88  
82 89 %% Contents for page 1
83   -8 0 obj
  90 +9 0 obj
84 91 <<
85   - /Length 9 0 R
  92 + /Length 10 0 R
86 93 >>
87 94 stream
88 95  
... ... @@ -94,11 +101,11 @@ Q
94 101 endstream
95 102 endobj
96 103  
97   -9 0 obj
  104 +10 0 obj
98 105 35
99 106 endobj
100 107  
101   -10 0 obj
  108 +11 0 obj
102 109 <<
103 110 /BaseFont /Helvetica
104 111 /Encoding /WinAnsiEncoding
... ... @@ -108,14 +115,14 @@ endobj
108 115 >>
109 116 endobj
110 117  
111   -11 0 obj
  118 +12 0 obj
112 119 [
113 120 /PDF
114 121 /Text
115 122 ]
116 123 endobj
117 124  
118   -12 0 obj
  125 +13 0 obj
119 126 <<
120 127 /BBox [
121 128 0
... ... @@ -136,7 +143,7 @@ endobj
136 143 >>
137 144 /Subtype /Form
138 145 /Type /XObject
139   - /Length 13 0 R
  146 + /Length 14 0 R
140 147 >>
141 148 stream
142 149 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
... ... @@ -144,31 +151,80 @@ endstream
144 151 endobj
145 152  
146 153 %QDF: ignore_newline
147   -13 0 obj
  154 +14 0 obj
148 155 928
149 156 endobj
150 157  
  158 +15 0 obj
  159 +<<
  160 + /F 28
  161 + /Open false
  162 + /Parent 16 0 R
  163 + /Rect [
  164 + 612
  165 + 601
  166 + 792
  167 + 721
  168 + ]
  169 + /Subtype /Popup
  170 + /Type /Annot
  171 +>>
  172 +endobj
  173 +
  174 +16 0 obj
  175 +<<
  176 + /AP <<
  177 + /N 13 0 R
  178 + >>
  179 + /C [
  180 + 1
  181 + 1
  182 + 0
  183 + ]
  184 + /CA 1
  185 + /Contents (Salad)
  186 + /CreationDate (D:20181231235455Z00'00)
  187 + /F 28
  188 + /M (D:20181231235455Z00'00)
  189 + /Name /Comment
  190 + /P 3 0 R
  191 + /Popup 15 0 R
  192 + /Rect [
  193 + 235
  194 + 703
  195 + 253
  196 + 721
  197 + ]
  198 + /Subtype /Text
  199 + /T (Jay Berkenbilt)
  200 + /Type /Annot
  201 +>>
  202 +endobj
  203 +
151 204 xref
152   -0 14
  205 +0 17
153 206 0000000000 65535 f
154 207 0000000025 00000 n
155 208 0000000079 00000 n
156 209 0000000161 00000 n
157   -0000000450 00000 n
158   -0000000507 00000 n
159   -0000000548 00000 n
160   -0000000647 00000 n
161   -0000000689 00000 n
162   -0000000779 00000 n
163   -0000000798 00000 n
164   -0000000917 00000 n
165   -0000000953 00000 n
166   -0000002197 00000 n
  210 +0000000443 00000 n
  211 +0000000495 00000 n
  212 +0000000552 00000 n
  213 +0000000593 00000 n
  214 +0000000692 00000 n
  215 +0000000734 00000 n
  216 +0000000825 00000 n
  217 +0000000845 00000 n
  218 +0000000964 00000 n
  219 +0000001000 00000 n
  220 +0000002244 00000 n
  221 +0000002265 00000 n
  222 +0000002406 00000 n
167 223 trailer <<
168 224 /Root 1 0 R
169   - /Size 14
  225 + /Size 17
170 226 /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
171 227 >>
172 228 startxref
173   -2218
  229 +2737
174 230 %%EOF
... ...
qpdf/qtest/qpdf/need-appearances-more-out.pdf
No preview for this file type
qpdf/qtest/qpdf/need-appearances-out.pdf
No preview for this file type