Merge pull request #990 from m-holger/issue600

Ensure copied annotations are fixed (fixes #600)
This commit is contained in:
Jay Berkenbilt 2023-06-17 17:54:27 -04:00 committed by GitHub
commit 2ff7ac8a58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 4528 additions and 2 deletions

View File

@ -2494,7 +2494,7 @@ QPDFJob::handlePageSpecs(QPDF& pdf, std::vector<std::unique_ptr<QPDF>>& page_hea
// the original file until all copy operations are completed, any foreign pages that
// conflict with original pages will be adjusted. If we copy any page from the original
// file more than once, that page would be in conflict with the previous copy of itself.
if (other_afdh->hasAcroForm() && ((!this_file) || (!first_copy_from_orig))) {
if ((!this_file && other_afdh->hasAcroForm()) || !first_copy_from_orig) {
if (!this_file) {
QTC::TC("qpdf", "QPDFJob copy fields not this file");
} else if (!first_copy_from_orig) {

View File

@ -14,7 +14,7 @@ cleanup();
my $td = new TestDriver('copy-annotations');
my $n_tests = 39;
my $n_tests = 43;
$td->runtest("complex copy annotations",
{$td->COMMAND =>
@ -42,6 +42,30 @@ foreach my $page (1, 2, 5, 6)
{$td->FILE => "overlay-copy-annotations-p$page.pdf"});
}
$td->runtest("copy annotations no acroform from foreign file",
{$td->COMMAND =>
"qpdf --qdf --static-id --no-original-object-ids" .
" annotations-no-acroform.pdf --pages . 1,1 -- a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "annotations-same-file.out.pdf"});
$td->runtest("copy annotations no acroform from foreign file",
{$td->COMMAND =>
"qpdf --qdf --static-id --no-original-object-ids minimal.pdf" .
" --pages annotations-no-acroform.pdf 1,1 -- a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "a.pdf"},
{$td->FILE => "annotations-foreign-file.out.pdf"});
foreach my $d ([1, "appearances-1.pdf"],
[2, "appearances-1-rotated.pdf"])
{

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,935 @@
%PDF-1.6
%¿÷¢þ
%QDF-1.0
1 0 obj
<<
/Names <<
/EmbeddedFiles 6 0 R
>>
/Pages 7 0 R
/Type /Catalog
>>
endobj
2 0 obj
<<
/Font <<
/F1 8 0 R
>>
>>
endobj
3 0 obj
<<
/AP <<
/N 9 0 R
>>
/DA (0 0.4 0 rg /F1 18 Tf)
/DR 2 0 R
/DV ()
/FT /Tx
/Ff 0
/Rect [
72
470.774
190.8
484.922
]
/Subtype /Widget
/T (Text Box 1)
/Type /Annot
/V (Formy field)
>>
endobj
4 0 obj
<<
/AP <<
/N 11 0 R
>>
/DA (0 0.4 0 rg /F1 18 Tf)
/DR 2 0 R
/DV ()
/FT /Tx
/Ff 0
/Rect [
372
330.774
386.148
470.374
]
/Subtype /Widget
/T (Text Box 2)
/Type /Annot
/V (Rot-ccw field)
>>
endobj
5 0 obj
<<
/DV /1
/FT /Btn
/Ff 49152
/Kids [
13 0 R
14 0 R
15 0 R
]
/T (r1)
/V /2
>>
endobj
6 0 obj
<<
/Names [
(attachment1.txt)
16 0 R
]
>>
endobj
7 0 obj
<<
/Count 1
/Kids [
17 0 R
]
/Type /Pages
>>
endobj
8 0 obj
<<
/BaseFont /Courier
/Encoding /WinAnsiEncoding
/Subtype /Type1
/Type /Font
>>
endobj
9 0 obj
<<
/BBox [
0
-2.826
118.8
11.322
]
/Resources 2 0 R
/Subtype /Form
/Type /XObject
/Length 10 0 R
>>
stream
/Tx BMC
q
BT
/F1 18 Tf
(Formy field) Tj
ET
Q
EMC
endstream
endobj
10 0 obj
53
endobj
11 0 obj
<<
/BBox [
0
-2.826
140.4
11.322
]
/Matrix [
0
1
-1
0
0
0
]
/Resources 2 0 R
/Subtype /Form
/Type /XObject
/Length 12 0 R
>>
stream
/Tx BMC
q
BT
/F1 18 Tf
(Rot-ccw field) Tj
ET
Q
EMC
endstream
endobj
12 0 obj
55
endobj
13 0 obj
<<
/AP <<
/N <<
/1 18 0 R
/Off 20 0 R
>>
>>
/AS /1
/DA (0.18039 0.20392 0.21176 rg /ZaDi 0 Tf)
/DR <<
/Font <<
/ZaDi 22 0 R
>>
>>
/F 4
/FT /Btn
/MK <<
/CA (l)
>>
/Parent 5 0 R
/Rect [
152.749
648.501
164.801
660.549
]
/Subtype /Widget
/Type /Annot
>>
endobj
14 0 obj
<<
/AP <<
/N <<
/2 23 0 R
/Off 25 0 R
>>
>>
/AS /2
/DA (0.18039 0.20392 0.21176 rg /ZaDi 0 Tf)
/DR <<
/Font <<
/ZaDi 22 0 R
>>
>>
/F 4
/FT /Btn
/MK <<
/CA (l)
>>
/Parent 5 0 R
/Rect [
152.749
627.301
164.801
639.349
]
/Subtype /Widget
/Type /Annot
>>
endobj
15 0 obj
<<
/AP <<
/N <<
/3 27 0 R
/Off 29 0 R
>>
>>
/AS /3
/DA (0.18039 0.20392 0.21176 rg /ZaDi 0 Tf)
/DR <<
/Font <<
/ZaDi 22 0 R
>>
>>
/F 4
/FT /Btn
/MK <<
/CA (l)
>>
/Parent 5 0 R
/Rect [
151.399
606.501
163.451
618.549
]
/Subtype /Widget
/Type /Annot
>>
endobj
16 0 obj
<<
/EF <<
/F 31 0 R
/UF 31 0 R
>>
/F (attachment1.txt)
/Type /Filespec
/UF (attachment1.txt)
>>
endobj
%% Page 1
17 0 obj
<<
/Annots [
33 0 R
3 0 R
34 0 R
4 0 R
35 0 R
36 0 R
37 0 R
38 0 R
13 0 R
14 0 R
15 0 R
]
/Contents 39 0 R
/MediaBox [
0
0
612
792
]
/Parent 7 0 R
/Resources 2 0 R
/Type /Page
>>
endobj
18 0 obj
<<
/BBox [
0
0
12.05
12.05
]
/Resources 41 0 R
/Subtype /Form
/Type /XObject
/Length 19 0 R
>>
stream
/Tx BMC
q BT
0.18039 0.20392 0.21176 rg /ZaDi 12.05 Tf
0 0 Td
ET
Q
1 0 0 rg
6 8.4 m 7.35 8.4 8.45 7.35 8.45 6 c
8.45 4.65 7.35 3.55 6 3.55 c
4.65 3.55 3.6 4.65 3.6 6 c
3.6 7.35 4.65 8.4 6 8.4 c f*
EMC
endstream
endobj
19 0 obj
202
endobj
20 0 obj
<<
/BBox [
0
0
12.05
12.05
]
/Resources 41 0 R
/Subtype /Form
/Type /XObject
/Length 21 0 R
>>
stream
/Tx BMC
EMC
endstream
endobj
21 0 obj
12
endobj
22 0 obj
<<
/BaseFont /ZapfDingbats
/Subtype /Type1
/Type /Font
>>
endobj
23 0 obj
<<
/BBox [
0
0
12.05
12.05
]
/Resources 41 0 R
/Subtype /Form
/Type /XObject
/Length 24 0 R
>>
stream
/Tx BMC
q BT
0.18039 0.20392 0.21176 rg /ZaDi 12.05 Tf
0 0 Td
ET
Q
0 1 0 rg
6 8.4 m 7.35 8.4 8.45 7.35 8.45 6 c
8.45 4.65 7.35 3.55 6 3.55 c
4.65 3.55 3.6 4.65 3.6 6 c
3.6 7.35 4.65 8.4 6 8.4 c f*
EMC
endstream
endobj
24 0 obj
202
endobj
25 0 obj
<<
/BBox [
0
0
12.05
12.05
]
/Resources 41 0 R
/Subtype /Form
/Type /XObject
/Length 26 0 R
>>
stream
/Tx BMC
EMC
endstream
endobj
26 0 obj
12
endobj
27 0 obj
<<
/BBox [
0
0
12.05
12.05
]
/Resources 41 0 R
/Subtype /Form
/Type /XObject
/Length 28 0 R
>>
stream
/Tx BMC
q BT
0.18039 0.20392 0.21176 rg /ZaDi 12.05 Tf
0 0 Td
ET
Q
0 0 1 rg
6 8.4 m 7.35 8.4 8.45 7.35 8.45 6 c
8.45 4.65 7.35 3.55 6 3.55 c
4.65 3.55 3.6 4.65 3.6 6 c
3.6 7.35 4.65 8.4 6 8.4 c f*
EMC
endstream
endobj
28 0 obj
202
endobj
29 0 obj
<<
/BBox [
0
0
12.05
12.05
]
/Resources 41 0 R
/Subtype /Form
/Type /XObject
/Length 30 0 R
>>
stream
/Tx BMC
EMC
endstream
endobj
30 0 obj
12
endobj
31 0 obj
<<
/Params <<
/CheckSum <80a33fc110b5a7b8b4d58b8d57e814bc>
/Size 22
/Subtype /text#2fplain
>>
/Type /EmbeddedFile
/Length 32 0 R
>>
stream
content of attachment
endstream
endobj
32 0 obj
22
endobj
33 0 obj
<<
/A <<
/S /URI
/URI (https://www.qbilt.org/)
>>
/Border [
0
0
.4
]
/C [
.8
.6
.6
]
/H /I
/Rect [
72
501.832
374.4
520.696
]
/Subtype /Link
/Type /Annot
>>
endobj
34 0 obj
<<
/AP <<
/N 42 0 R
>>
/Contents (attachment1.txt)
/FS 16 0 R
/NM (attachment1.txt)
/Rect [
72
400
92
420
]
/Subtype /FileAttachment
/Type /Annot
>>
endobj
35 0 obj
<<
/AP <<
/N 44 0 R
>>
/DA ()
/Rect [
72
350
92
360
]
/Subtype /FreeText
/Type /Annot
>>
endobj
36 0 obj
<<
/AP <<
/N 46 0 R
>>
/DA ()
/Rect [
102
350
112
370
]
/Subtype /FreeText
/Type /Annot
>>
endobj
37 0 obj
<<
/AP <<
/N 48 0 R
>>
/DA ()
/Rect [
122
350
142
360
]
/Subtype /FreeText
/Type /Annot
>>
endobj
38 0 obj
<<
/AP <<
/N 50 0 R
>>
/DA ()
/Rect [
152
350
162
370
]
/Subtype /FreeText
/Type /Annot
>>
endobj
%% Contents for page 1
39 0 obj
<<
/Length 40 0 R
>>
stream
q
1 1 .7 rg
.5 .5 0 RG
72 470.77 118.8 14.15 re
B
Q
q
0 .5 .5 RG
0 1 1 rg
372 330.77 14.15 139.4 re
B
Q
q
1 0 0 RG
72 310 20 10 re
72 310 5 10 re
S
0 1 0 RG
102 310 10 20 re
102 310 10 5 re
S
0 0 1 RG
122 310 20 10 re
137 310 5 10 re
S
0.5 0 1 RG
152 310 10 20 re
152 325 10 5 re
S
10 w
0.14 .33 .18 RG
5 5 602 782 re
S
Q
BT
/F1 16 Tf
20.6 TL
170 650 Td
(radio button 1) Tj
(radio button 2) '
(radio button 3) '
1 0 0 1 72 546 Tm
/F1 20 Tf
(Thick green border surrounds page.) Tj
0 -40 Td
/F1 24 Tf
0 0 1 rg
(https://www.qbilt.org) Tj
/F1 12 Tf
1 0 0 1 202 474 Tm
(<- Formy field in yellow) Tj
1 0 0 1 392 410 Tm
14.4 TL
(<- Rot-ccw field) Tj
(with "Rot" at bottom) '
(and text going up) '
0 g
1 0 0 1 102 405 Tm
(Arrow to the left points down.) Tj
1 0 0 1 182 310 Tm
(<- Drawn rectangles appear below annotations.) Tj
ET
endstream
endobj
40 0 obj
874
endobj
41 0 obj
<<
/Font 52 0 R
/ProcSet [
/PDF
/Text
]
>>
endobj
42 0 obj
<<
/BBox [
0
0
20
20
]
/Resources <<
>>
/Subtype /Form
/Type /XObject
/Length 43 0 R
>>
stream
0 10 m
10 0 l
20 10 l
10 0 m
10 20 l
0 0 20 20 re
S
endstream
endobj
43 0 obj
52
endobj
44 0 obj
<<
/BBox [
0
0
20
10
]
/Resources 2 0 R
/Subtype /Form
/Type /XObject
/Length 45 0 R
>>
stream
1 0 0 RG
0 0 20 10 re
0 0 5 10 re
S
endstream
endobj
45 0 obj
36
endobj
46 0 obj
<<
/BBox [
0
0
20
10
]
/Matrix [
0
1
-1
0
0
0
]
/Resources 2 0 R
/Subtype /Form
/Type /XObject
/Length 47 0 R
>>
stream
0 1 0 RG
0 0 20 10 re
0 0 5 10 re
S
endstream
endobj
47 0 obj
36
endobj
48 0 obj
<<
/BBox [
0
0
20
10
]
/Matrix [
-1
0
0
-1
0
0
]
/Resources 2 0 R
/Subtype /Form
/Type /XObject
/Length 49 0 R
>>
stream
0 0 1 RG
0 0 20 10 re
0 0 5 10 re
S
endstream
endobj
49 0 obj
36
endobj
50 0 obj
<<
/BBox [
0
0
20
10
]
/Matrix [
0
-1
1
0
0
0
]
/Resources 2 0 R
/Subtype /Form
/Type /XObject
/Length 51 0 R
>>
stream
0.5 0 1 RG
0 0 20 10 re
0 0 5 10 re
S
endstream
endobj
51 0 obj
38
endobj
52 0 obj
<<
/ZaDi 22 0 R
>>
endobj
xref
0 53
0000000000 65535 f
0000000025 00000 n
0000000122 00000 n
0000000174 00000 n
0000000417 00000 n
0000000666 00000 n
0000000785 00000 n
0000000855 00000 n
0000000928 00000 n
0000001032 00000 n
0000001246 00000 n
0000001266 00000 n
0000001536 00000 n
0000001556 00000 n
0000001908 00000 n
0000002260 00000 n
0000002612 00000 n
0000002753 00000 n
0000003025 00000 n
0000003384 00000 n
0000003405 00000 n
0000003574 00000 n
0000003594 00000 n
0000003675 00000 n
0000004034 00000 n
0000004055 00000 n
0000004224 00000 n
0000004244 00000 n
0000004603 00000 n
0000004624 00000 n
0000004793 00000 n
0000004813 00000 n
0000005021 00000 n
0000005041 00000 n
0000005285 00000 n
0000005489 00000 n
0000005629 00000 n
0000005771 00000 n
0000005913 00000 n
0000006078 00000 n
0000007009 00000 n
0000007030 00000 n
0000007104 00000 n
0000007308 00000 n
0000007328 00000 n
0000007514 00000 n
0000007534 00000 n
0000007773 00000 n
0000007793 00000 n
0000008033 00000 n
0000008053 00000 n
0000008294 00000 n
0000008314 00000 n
trailer <<
/Root 1 0 R
/Size 53
/ID [<a2f146daeb6d814a742556489dab9882><7b639c67bfc16b5e891fa5468aac3a14>]
>>
startxref
8352
%%EOF

File diff suppressed because it is too large Load Diff