From 5828ff6cb0ca1c5676e2610d7e15f589500359ad Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sun, 28 Feb 2021 18:51:37 +0100 Subject: [PATCH] Implement rendering line annotations without appearance stream --- src/core/annotation.js | 31 ++++++++++++++++-- test/pdfs/.gitignore | 1 + .../annotation-line-without-appearance.pdf | Bin 0 -> 14170 bytes test/test_manifest.json | 7 ++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 test/pdfs/annotation-line-without-appearance.pdf diff --git a/src/core/annotation.js b/src/core/annotation.js index 02dc2c273..e28d12b82 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -2280,9 +2280,34 @@ class LineAnnotation extends MarkupAnnotation { this.data.annotationType = AnnotationType.LINE; - this.data.lineCoordinates = Util.normalizeRect( - parameters.dict.getArray("L") - ); + const lineCoordinates = parameters.dict.getArray("L"); + this.data.lineCoordinates = Util.normalizeRect(lineCoordinates); + + 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; + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: `${borderWidth} w`, + strokeColor, + pointsCallback: (buffer, points) => { + buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`); + buffer.push(`${lineCoordinates[2]} ${lineCoordinates[3]} l`); + buffer.push("S"); + return [ + points[0].x - borderWidth, + points[1].x + borderWidth, + points[3].y - borderWidth, + points[1].y + borderWidth, + ]; + }, + }); + } } } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 324651782..42e7bfeff 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -393,6 +393,7 @@ !issue12418_reduced.pdf !annotation-freetext.pdf !annotation-line.pdf +!annotation-line-without-appearance.pdf !bug1669099.pdf !annotation-square-circle.pdf !annotation-square-circle-without-appearance.pdf diff --git a/test/pdfs/annotation-line-without-appearance.pdf b/test/pdfs/annotation-line-without-appearance.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b85b756716941f2f2129c668d8486b108461841d GIT binary patch literal 14170 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