diff --git a/src/core/annotation.js b/src/core/annotation.js index d3f415512..e59af8713 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -2845,6 +2845,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { this._processRadioButton(params); } else if (this.data.pushButton) { this.data.hasOwnCanvas = true; + this.data.noHTML = false; this._processPushButton(params); } else { warn("Invalid field flags for button widget annotation"); @@ -3570,6 +3571,7 @@ class SignatureWidgetAnnotation extends WidgetAnnotation { // to the main-thread (issue 10347). this.data.fieldValue = null; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !this.data.hasOwnCanvas; } getFieldObject() { @@ -3591,6 +3593,7 @@ class TextAnnotation extends MarkupAnnotation { // No rotation for Text (see 12.5.6.4). this.data.noRotate = true; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; const { dict } = params; this.data.annotationType = AnnotationType.TEXT; @@ -3643,6 +3646,11 @@ class PopupAnnotation extends Annotation { const { dict } = params; this.data.annotationType = AnnotationType.POPUP; + + // A pop-up is never rendered on the main canvas so we must render its HTML + // version. + this.data.noHTML = false; + if ( this.data.rect[0] === this.data.rect[2] || this.data.rect[1] === this.data.rect[3] @@ -3712,7 +3720,10 @@ class FreeTextAnnotation extends MarkupAnnotation { constructor(params) { super(params); - this.data.hasOwnCanvas = true; + // It uses its own canvas in order to be hidden if edited. + // But if it has the noHTML flag, it means that we don't want to be able + // to modify it so we can just draw it on the main canvas. + this.data.hasOwnCanvas = !this.data.noHTML; const { evaluatorOptions, xref } = params; this.data.annotationType = AnnotationType.FREETEXT; @@ -3926,6 +3937,7 @@ class LineAnnotation extends MarkupAnnotation { const { dict, xref } = params; this.data.annotationType = AnnotationType.LINE; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; const lineCoordinates = dict.getArray("L"); this.data.lineCoordinates = Util.normalizeRect(lineCoordinates); @@ -3993,6 +4005,7 @@ class SquareAnnotation extends MarkupAnnotation { const { dict, xref } = params; this.data.annotationType = AnnotationType.SQUARE; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; if (!this.appearance) { // The default stroke color is black. @@ -4105,6 +4118,7 @@ class PolylineAnnotation extends MarkupAnnotation { const { dict, xref } = params; this.data.annotationType = AnnotationType.POLYLINE; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; this.data.vertices = []; if ( @@ -4193,6 +4207,7 @@ class InkAnnotation extends MarkupAnnotation { super(params); this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; const { dict, xref } = params; this.data.annotationType = AnnotationType.INK; @@ -4531,6 +4546,7 @@ class StampAnnotation extends MarkupAnnotation { this.data.annotationType = AnnotationType.STAMP; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; } static async createImage(bitmap, xref) { @@ -4680,6 +4696,7 @@ class FileAttachmentAnnotation extends MarkupAnnotation { this.data.annotationType = AnnotationType.FILEATTACHMENT; this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = false; this.data.file = file.serializable; const name = dict.get("Name"); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index bde07e5b3..f51c766b1 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -615,3 +615,4 @@ !tagged_stamp.pdf !bug1851498.pdf !issue17065.pdf +!issue17069.pdf diff --git a/test/pdfs/issue17069.pdf b/test/pdfs/issue17069.pdf new file mode 100755 index 000000000..041823a94 Binary files /dev/null and b/test/pdfs/issue17069.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 7d92433fb..ce4728f65 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -8156,5 +8156,13 @@ "md5": "16a70b9941ba049a61612109e0e1d719", "rounds": 1, "type": "eq" + }, + { + "id": "issue17069", + "file": "pdfs/issue17069.pdf", + "md5": "e44a3920c83d8e7be112c52da4db8e57", + "rounds": 1, + "type": "eq", + "annotations": true } ]