Support Annotations, without appearance streams, with bogus /Rect-entries (issue 13447)
This extends PR 13106 to apply not only to empty /Rect-entries, but also to bogus /Rect-entries for various Annotation-types.
This commit is contained in:
parent
a6447f2ca2
commit
52c13326cd
@ -23,7 +23,6 @@ import {
|
|||||||
assert,
|
assert,
|
||||||
escapeString,
|
escapeString,
|
||||||
getModificationDate,
|
getModificationDate,
|
||||||
isArrayEqual,
|
|
||||||
isAscii,
|
isAscii,
|
||||||
isString,
|
isString,
|
||||||
OPS,
|
OPS,
|
||||||
@ -2422,17 +2421,19 @@ class LineAnnotation extends MarkupAnnotation {
|
|||||||
}
|
}
|
||||||
const fillAlpha = fillColor ? strokeAlpha : null;
|
const fillAlpha = fillColor ? strokeAlpha : null;
|
||||||
|
|
||||||
const borderWidth = this.borderStyle.width;
|
const borderWidth = this.borderStyle.width || 1,
|
||||||
|
borderAdjust = 2 * borderWidth;
|
||||||
|
|
||||||
// If the /Rect-entry is empty, create a fallback rectangle such that we
|
// If the /Rect-entry is empty/wrong, create a fallback rectangle so that
|
||||||
// get similar rendering/highlighting behaviour as in Adobe Reader.
|
// we get similar rendering/highlighting behaviour as in Adobe Reader.
|
||||||
if (isArrayEqual(this.rectangle, [0, 0, 0, 0])) {
|
const bbox = [
|
||||||
this.rectangle = [
|
this.data.lineCoordinates[0] - borderAdjust,
|
||||||
this.data.lineCoordinates[0] - 2 * borderWidth,
|
this.data.lineCoordinates[1] - borderAdjust,
|
||||||
this.data.lineCoordinates[1] - 2 * borderWidth,
|
this.data.lineCoordinates[2] + borderAdjust,
|
||||||
this.data.lineCoordinates[2] + 2 * borderWidth,
|
this.data.lineCoordinates[3] + borderAdjust,
|
||||||
this.data.lineCoordinates[3] + 2 * borderWidth,
|
];
|
||||||
];
|
if (!Util.intersect(this.rectangle, bbox)) {
|
||||||
|
this.rectangle = bbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._setDefaultAppearance({
|
this._setDefaultAppearance({
|
||||||
@ -2603,7 +2604,21 @@ class PolylineAnnotation extends MarkupAnnotation {
|
|||||||
: [0, 0, 0];
|
: [0, 0, 0];
|
||||||
const strokeAlpha = parameters.dict.get("CA");
|
const strokeAlpha = parameters.dict.get("CA");
|
||||||
|
|
||||||
const borderWidth = this.borderStyle.width || 1;
|
const borderWidth = this.borderStyle.width || 1,
|
||||||
|
borderAdjust = 2 * borderWidth;
|
||||||
|
|
||||||
|
// If the /Rect-entry is empty/wrong, create a fallback rectangle so that
|
||||||
|
// we get similar rendering/highlighting behaviour as in Adobe Reader.
|
||||||
|
const bbox = [Infinity, Infinity, -Infinity, -Infinity];
|
||||||
|
for (const vertex of this.data.vertices) {
|
||||||
|
bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);
|
||||||
|
bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);
|
||||||
|
bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);
|
||||||
|
bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);
|
||||||
|
}
|
||||||
|
if (!Util.intersect(this.rectangle, bbox)) {
|
||||||
|
this.rectangle = bbox;
|
||||||
|
}
|
||||||
|
|
||||||
this._setDefaultAppearance({
|
this._setDefaultAppearance({
|
||||||
xref: parameters.xref,
|
xref: parameters.xref,
|
||||||
@ -2675,7 +2690,23 @@ class InkAnnotation extends MarkupAnnotation {
|
|||||||
: [0, 0, 0];
|
: [0, 0, 0];
|
||||||
const strokeAlpha = parameters.dict.get("CA");
|
const strokeAlpha = parameters.dict.get("CA");
|
||||||
|
|
||||||
const borderWidth = this.borderStyle.width || 1;
|
const borderWidth = this.borderStyle.width || 1,
|
||||||
|
borderAdjust = 2 * borderWidth;
|
||||||
|
|
||||||
|
// If the /Rect-entry is empty/wrong, create a fallback rectangle so that
|
||||||
|
// we get similar rendering/highlighting behaviour as in Adobe Reader.
|
||||||
|
const bbox = [Infinity, Infinity, -Infinity, -Infinity];
|
||||||
|
for (const inkLists of this.data.inkLists) {
|
||||||
|
for (const vertex of inkLists) {
|
||||||
|
bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);
|
||||||
|
bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);
|
||||||
|
bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);
|
||||||
|
bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!Util.intersect(this.rectangle, bbox)) {
|
||||||
|
this.rectangle = bbox;
|
||||||
|
}
|
||||||
|
|
||||||
this._setDefaultAppearance({
|
this._setDefaultAppearance({
|
||||||
xref: parameters.xref,
|
xref: parameters.xref,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user