Fix annotation border style parsing by handling empty dash arrays
The PDF specification states that empty dash arrays, i.e. arrays with zero elements, are in fact valid. In that case the dash array simply corresponds to a solid, unbroken line. However, this case was erroneously being flagged as invalid and therefore the annotation was not drawn because its width was set to zero. This commit fixes the issue by allowing dash arrays to have a length of zero.
This commit is contained in:
parent
5adad89eb3
commit
d01a0bd0c8
@ -1474,9 +1474,9 @@ class AnnotationBorderStyle {
|
||||
// We validate the dash array, but we do not use it because CSS does not
|
||||
// allow us to change spacing of dashes. For more information, visit
|
||||
// http://www.w3.org/TR/css3-background/#the-border-style.
|
||||
if (Array.isArray(dashArray) && dashArray.length > 0) {
|
||||
// According to the PDF specification: the elements in `dashArray`
|
||||
// shall be numbers that are nonnegative and not all equal to zero.
|
||||
if (Array.isArray(dashArray)) {
|
||||
// The PDF specification states that elements in the dash array, if
|
||||
// present, must be non-negative numbers and must not all equal zero.
|
||||
let isValid = true;
|
||||
let allZeros = true;
|
||||
for (const element of dashArray) {
|
||||
@ -1488,7 +1488,7 @@ class AnnotationBorderStyle {
|
||||
allZeros = false;
|
||||
}
|
||||
}
|
||||
if (isValid && !allZeros) {
|
||||
if (dashArray.length === 0 || (isValid && !allZeros)) {
|
||||
this.dashArray = dashArray;
|
||||
|
||||
if (forceStyle) {
|
||||
|
||||
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -514,6 +514,7 @@
|
||||
!issue11549_reduced.pdf
|
||||
!issue8097_reduced.pdf
|
||||
!issue15262.pdf
|
||||
!issue17904.pdf
|
||||
!bug1743245.pdf
|
||||
!quadpoints.pdf
|
||||
!transparent.pdf
|
||||
|
||||
BIN
test/pdfs/issue17904.pdf
Normal file
BIN
test/pdfs/issue17904.pdf
Normal file
Binary file not shown.
@ -3858,6 +3858,14 @@
|
||||
"type": "eq",
|
||||
"annotations": true
|
||||
},
|
||||
{
|
||||
"id": "issue17904",
|
||||
"file": "pdfs/issue17904.pdf",
|
||||
"md5": "4b8f0b565a61bf068ef72d232c997cef",
|
||||
"rounds": 1,
|
||||
"type": "eq",
|
||||
"annotations": true
|
||||
},
|
||||
{
|
||||
"id": "issue6179_reduced",
|
||||
"file": "pdfs/issue6179_reduced.pdf",
|
||||
|
||||
@ -549,6 +549,15 @@ describe("annotation", function () {
|
||||
expect(borderStyle.dashArray).toEqual([3]);
|
||||
});
|
||||
|
||||
it("should not set the width to zero if the dash array is empty (issue 17904)", function () {
|
||||
const borderStyle = new AnnotationBorderStyle();
|
||||
borderStyle.setWidth(3);
|
||||
borderStyle.setDashArray([]);
|
||||
|
||||
expect(borderStyle.width).toEqual(3);
|
||||
expect(borderStyle.dashArray).toEqual([]);
|
||||
});
|
||||
|
||||
it("should set and get a valid horizontal corner radius", function () {
|
||||
const borderStyle = new AnnotationBorderStyle();
|
||||
borderStyle.setHorizontalCornerRadius(3);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user