[api-minor] Normalize the view
-getter on the worker-thread
*Please note:* I don't really expect that this is will be an observable change, since virtually all PDF documents already order e.g. /MediaBox and /CropBox entries correctly. By normalizing boundingBoxes already on the worker-thread, we can be sure that even a corrupt document won't cause issues. Note how we're passing the `view`-getter to the `PartialEvaluator.getTextContent` method, in order to detect textContent which is outside of the page, hence it makes sense to ensure that it's formatted as expected. Furthermore, by normalizing this once on the worker-tread we should no longer have to worry about a possibly negative width/height in the `PageViewport` constructor. Finally, the patch also simplifies the `view`-getter a little bit.
This commit is contained in:
parent
e3c2af14b3
commit
5f8598abb7
@ -146,14 +146,14 @@ class Page {
|
|||||||
if (this.xfaData) {
|
if (this.xfaData) {
|
||||||
return this.xfaData.bbox;
|
return this.xfaData.bbox;
|
||||||
}
|
}
|
||||||
|
let box = this._getInheritableProperty(name, /* getArray = */ true);
|
||||||
const box = this._getInheritableProperty(name, /* getArray = */ true);
|
|
||||||
|
|
||||||
if (Array.isArray(box) && box.length === 4) {
|
if (Array.isArray(box) && box.length === 4) {
|
||||||
if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
|
box = Util.normalizeRect(box);
|
||||||
|
if (box[2] - box[0] > 0 && box[3] - box[1] > 0) {
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
warn(`Empty /${name} entry.`);
|
warn(`Empty, or invalid, /${name} entry.`);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -190,18 +190,15 @@ class Page {
|
|||||||
// extend beyond the boundaries of the media box. If they do, they are
|
// extend beyond the boundaries of the media box. If they do, they are
|
||||||
// effectively reduced to their intersection with the media box."
|
// effectively reduced to their intersection with the media box."
|
||||||
const { cropBox, mediaBox } = this;
|
const { cropBox, mediaBox } = this;
|
||||||
let view;
|
|
||||||
if (cropBox === mediaBox || isArrayEqual(cropBox, mediaBox)) {
|
if (cropBox !== mediaBox && !isArrayEqual(cropBox, mediaBox)) {
|
||||||
view = mediaBox;
|
|
||||||
} else {
|
|
||||||
const box = Util.intersect(cropBox, mediaBox);
|
const box = Util.intersect(cropBox, mediaBox);
|
||||||
if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
|
if (box && box[2] - box[0] > 0 && box[3] - box[1] > 0) {
|
||||||
view = box;
|
return shadow(this, "view", box);
|
||||||
} else {
|
|
||||||
warn("Empty /CropBox and /MediaBox intersection.");
|
|
||||||
}
|
}
|
||||||
|
warn("Empty /CropBox and /MediaBox intersection.");
|
||||||
}
|
}
|
||||||
return shadow(this, "view", view || mediaBox);
|
return shadow(this, "view", mediaBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
get rotate() {
|
get rotate() {
|
||||||
|
@ -224,13 +224,13 @@ class PageViewport {
|
|||||||
if (rotateA === 0) {
|
if (rotateA === 0) {
|
||||||
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
|
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
|
||||||
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
|
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
|
||||||
width = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
width = (viewBox[3] - viewBox[1]) * scale;
|
||||||
height = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
height = (viewBox[2] - viewBox[0]) * scale;
|
||||||
} else {
|
} else {
|
||||||
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
|
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
|
||||||
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
|
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
|
||||||
width = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
width = (viewBox[2] - viewBox[0]) * scale;
|
||||||
height = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
height = (viewBox[3] - viewBox[1]) * scale;
|
||||||
}
|
}
|
||||||
// creating transform for the following operations:
|
// creating transform for the following operations:
|
||||||
// translate(-centerX, -centerY), rotate and flip vertically,
|
// translate(-centerX, -centerY), rotate and flip vertically,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user