Skip to content

Commit

Permalink
Update the noHTML flag to take into account the hasOwnCanvas one (fixes
Browse files Browse the repository at this point in the history
#17069)

When an element has the hasOwnCanvas flag we must have an HTML container to attach
the canvas where the element will be rendered.
So the noHTML flag must take this information into account:
 - in some cases the noHTML flag is resetted depending on the hasOwnCanvas value;
 - in some others, the hasOwnCanvas flag is set depending on the value of noHTML.
  • Loading branch information
calixteman committed Oct 4, 2023
1 parent 40d6b0e commit 40b1d92
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 1 deletion.
19 changes: 18 additions & 1 deletion src/core/annotation.js
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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() {
Expand All @@ -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;
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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 (
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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");
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -615,3 +615,4 @@
!tagged_stamp.pdf
!bug1851498.pdf
!issue17065.pdf
!issue17069.pdf
Binary file added test/pdfs/issue17069.pdf
Binary file not shown.
8 changes: 8 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -8156,5 +8156,13 @@
"md5": "16a70b9941ba049a61612109e0e1d719",
"rounds": 1,
"type": "eq"
},
{
"id": "issue17069",
"file": "pdfs/issue17069.pdf",
"md5": "e44a3920c83d8e7be112c52da4db8e57",
"rounds": 1,
"type": "eq",
"annotations": true
}
]

0 comments on commit 40b1d92

Please sign in to comment.