Support InkAnnotations without appearance streams (issue 13298) (#13301)

For now, we keep things purposely simple by using straight lines (rather than curves); please see https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G11.2096579
This commit is contained in:
Jonas Jenwald 2021-04-27 11:49:03 +02:00 committed by GitHub
parent 72be684c10
commit 6f4394fcd8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 244 additions and 0 deletions

View File

@ -2552,6 +2552,36 @@ class InkAnnotation extends MarkupAnnotation {
});
}
}
if (!this.appearance) {
// The default stroke color is black.
const strokeColor = this.color
? Array.from(this.color).map(c => c / 255)
: [0, 0, 0];
const borderWidth = this.borderStyle.width || 1;
this._setDefaultAppearance({
xref: parameters.xref,
extra: `${borderWidth} w`,
strokeColor,
pointsCallback: (buffer, points) => {
// According to the specification, see "12.5.6.13 Ink Annotations":
// When drawn, the points shall be connected by straight lines or
// curves in an implementation-dependent way.
// In order to simplify things, we utilize straight lines for now.
for (const inkList of this.data.inkLists) {
for (let i = 0, ii = inkList.length; i < ii; i++) {
buffer.push(
`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`
);
}
buffer.push("S");
}
return [points[0].x, points[1].x, points[3].y, points[1].y];
},
});
}
}
}

View File

@ -181,6 +181,7 @@
!images_1bit_grayscale.pdf
!issue5280.pdf
!issue12399_reduced.pdf
!annotation-ink-without-appearance.pdf
!issue5677.pdf
!issue5954.pdf
!issue6612.pdf

View File

@ -0,0 +1,207 @@
%PDF-1.4
%âãÏÓ
1 0 obj
<<
/Kids [2 0 R]
/Type /Pages
/Count 1
>>
endobj
2 0 obj
<<
/Parent 1 0 R
/Annots 3 0 R
/MediaBox [0 0 612 792]
/Resources 4 0 R
/Contents 5 0 R
/Type /Page
>>
endobj
3 0 obj [6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R]
endobj
4 0 obj
<<
/Font
<<
/F1 12 0 R
>>
/ProcSet [/PDF /Text]
>>
endobj
5 0 obj
<<
/Length 71
>>
stream
BT
50 700 TD
/F1 20 Tf
(InkAnnotation without appearance stream) Tj
ET
endstream
endobj
6 0 obj
<<
/CA 1
/P 2 0 R
/InkList [[124.66666666666667 769.3333333333334 124.66666666666667 768.6666666666666 124.66666666666667 766.6666666666666 124.66666666666667 763.3333333333334 124.66666666666667 757.3333333333334 124.66666666666667 748.6666666666666 122.66666666666667 738 120.66666666666667 727.3333333333334 119.33333333333333 718.6666666666666 118.66666666666667 710.6666666666666 118.66666666666667 706 118.66666666666667 703.3333333333334 118.66666666666667 703.3333333333334 118.66666666666667 703.3333333333334 117.33333333333333 706.6666666666666 116.66666666666667 708.6666666666666]]
/M (D:20210426091448)
/Contents (Contents)
/F 132
/BS
<<
/D [3]
/W 1
>>
/C [0 0 0]
/Subtype /Ink
/Type /Annot
/T (Title)
/Border [1 0 0]
/Rect [129.66666666666669 698.3333333333334 111.66666666666667 774.3333333333334]
>>
endobj
7 0 obj
<<
/CA 1
/P 2 0 R
/InkList [[68.66666666666667 764.6666666666666 70.66666666666667 765.3333333333334 76 766.6666666666666 83.33333333333333 768.6666666666666 94.66666666666667 771.3333333333334 112 773.3333333333334 132.66666666666666 776.6666666666666 153.33333333333334 777.3333333333334 171.33333333333334 778 187.33333333333334 778 197.33333333333334 778 200.66666666666666 778 200.66666666666666 778]]
/M (D:20210426091449)
/Contents (Contents)
/F 132
/BS
<<
/D [3]
/W 1
>>
/C [0 0 0]
/Subtype /Ink
/Type /Annot
/T (Title)
/Border [1 0 0]
/Rect [205.66666666666666 759.6666666666666 63.66666666666667 783]
>>
endobj
8 0 obj
<<
/CA 1
/P 2 0 R
/InkList [[165.33333333333334 727.3333333333334 168 727.3333333333334 175.33333333333334 727.3333333333334 184.66666666666666 727.3333333333334 196 728.6666666666666 206 730 216 731.3333333333334 221.33333333333334 732.6666666666666 222.66666666666666 734 222.66666666666666 734.6666666666666 222.66666666666666 736 222 737.3333333333334 219.33333333333334 739.3333333333334 214 742.6666666666666 205.33333333333334 744.6666666666666 192 747.3333333333334 178.66666666666666 748.6666666666666 170 748.6666666666666 166 748 163.33333333333334 746 161.33333333333334 742.6666666666666 160 734.6666666666666 158.66666666666666 726.6666666666666 158.66666666666666 719.3333333333334 159.33333333333334 715.3333333333334 164.66666666666666 705.3333333333334 169.33333333333334 701.3333333333334 175.33333333333334 699.3333333333334 183.33333333333334 698 192 697.3333333333334 201.33333333333334 697.3333333333334 210.66666666666666 697.3333333333334 221.33333333333334 697.3333333333334 235.33333333333334 702 244 705.3333333333334 250.66666666666666 709.3333333333334 254 712.6666666666666 256 716 257.3333333333333 718.6666666666666 258.6666666666667 720.6666666666666 260.6666666666667 722.6666666666666 261.3333333333333 724 263.3333333333333 726 264.6666666666667 726.6666666666666 264.6666666666667 728 266 730 266 732 267.3333333333333 733.3333333333334 267.3333333333333 734.6666666666666 267.3333333333333 735.3333333333334]]
/M (D:20210426091451)
/Contents (Contents)
/F 132
/BS
<<
/D [3]
/W 1
>>
/C [0 0 0]
/Subtype /Ink
/Type /Annot
/T (Title)
/Border [1 0 0]
/Rect [272.3333333333333 692.3333333333334 153.66666666666666 753.6666666666666]
>>
endobj
9 0 obj
<<
/CA 1
/P 2 0 R
/InkList [[322.6666666666667 742.6666666666666 314.6666666666667 743.3333333333334 304.6666666666667 744.6666666666666 295.3333333333333 744.6666666666666 288 744.6666666666666 286 744 285.3333333333333 744 284.6666666666667 743.3333333333334 286 740 291.3333333333333 735.3333333333334 299.3333333333333 730 308 724.6666666666666 313.3333333333333 721.3333333333334 316.6666666666667 719.3333333333334 317.3333333333333 718.6666666666666 317.3333333333333 718 317.3333333333333 717.3333333333334 316.6666666666667 716.6666666666666 316 715.3333333333334 313.3333333333333 714 308 712.6666666666666 302.6666666666667 712.6666666666666 294.6666666666667 712.6666666666666 288.6666666666667 712.6666666666666 284.6666666666667 712 284 712 283.3333333333333 712 283.3333333333333 712 283.3333333333333 712 282 712.6666666666666 282 712.6666666666666]]
/M (D:20210426091452)
/Contents (Contents)
/F 132
/BS
<<
/D [3]
/W 1
>>
/C [0 0 0]
/Subtype /Ink
/Type /Annot
/T (Title)
/Border [1 0 0]
/Rect [327.6666666666667 707 277 749.6666666666666]
>>
endobj
10 0 obj
<<
/CA 1
/P 2 0 R
/InkList [[356.6666666666667 763.3333333333334 356.6666666666667 760 357.3333333333333 752 357.3333333333333 742.6666666666666 358 732 358 721.3333333333334 358 712 358 707.3333333333334 358 705.3333333333334 358 704 358 703.3333333333334 358 702.6666666666666 357.3333333333333 704]]
/M (D:20210426091453)
/Contents (Contents)
/F 132
/BS
<<
/D [3]
/W 1
>>
/C [0 0 0]
/Subtype /Ink
/Type /Annot
/T (Title)
/Border [1 0 0]
/Rect [363 697.6666666666666 351.6666666666667 768.3333333333334]
>>
endobj
11 0 obj
<<
/CA 1
/P 2 0 R
/InkList [[342.6666666666667 740 342.6666666666667 740 344 740.6666666666666 346 740.6666666666666 350.6666666666667 741.3333333333334 366.6666666666667 743.3333333333334 376 744.6666666666666 392.6666666666667 744.6666666666666 402 745.3333333333334 407.3333333333333 746.6666666666666 408 746.6666666666666 408 746.6666666666666 408 747.3333333333334]]
/M (D:20210426091454)
/Contents (Contents)
/F 132
/BS
<<
/D [3]
/W 1
>>
/C [0 0 0]
/Subtype /Ink
/Type /Annot
/T (Title)
/Border [1 0 0]
/Rect [413 735 337.6666666666667 752.3333333333334]
>>
endobj
12 0 obj
<<
/BaseFont /Times-Roman
/Subtype /Type1
/Type /Font
/Encoding /WinAnsiEncoding
>>
endobj
13 0 obj
<<
/Pages 1 0 R
/Type /Catalog
>>
endobj xref
0 14
0000000000 65535 f
0000000015 00000 n
0000000074 00000 n
0000000194 00000 n
0000000250 00000 n
0000000319 00000 n
0000000443 00000 n
0000001278 00000 n
0000001910 00000 n
0000003598 00000 n
0000004675 00000 n
0000005203 00000 n
0000005787 00000 n
0000005889 00000 n
trailer
<<
/Root 13 0 R
/Size 14
>>
startxref
5940
%%EOF

View File

@ -4511,6 +4511,12 @@
}
}
},
{ "id": "annotation-ink-without-appearance",
"file": "pdfs/annotation-ink-without-appearance.pdf",
"md5": "eb06ad4ac260060082ef86435a2feed5",
"rounds": 1,
"type": "eq"
},
{ "id": "issue4883",
"file": "pdfs/issue4883.pdf",
"md5": "2fac0d9a189ca5fcef8626153d050be8",