Skip to content

Commit

Permalink
[api-minor] Normalize the view-getter on the worker-thread
Browse files Browse the repository at this point in the history
*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.
  • Loading branch information
Snuffleupagus committed Dec 2, 2022
1 parent e3c2af1 commit 775c54f
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 14 deletions.
16 changes: 6 additions & 10 deletions src/core/document.js
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,11 @@ class Page {
if (this.xfaData) {
return this.xfaData.bbox;
}

const box = this._getInheritableProperty(name, /* getArray = */ true);

if (Array.isArray(box) && box.length === 4) {
if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
return box;
return Util.normalizeRect(box);
}
warn(`Empty /${name} entry.`);
}
Expand Down Expand Up @@ -190,18 +189,15 @@ class Page {
// extend beyond the boundaries of the media box. If they do, they are
// effectively reduced to their intersection with the media box."
const { cropBox, mediaBox } = this;
let view;
if (cropBox === mediaBox || isArrayEqual(cropBox, mediaBox)) {
view = mediaBox;
} else {

if (cropBox !== mediaBox && !isArrayEqual(cropBox, mediaBox)) {
const box = Util.intersect(cropBox, mediaBox);
if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
view = box;
} else {
warn("Empty /CropBox and /MediaBox intersection.");
return shadow(this, "view", box);
}
warn("Empty /CropBox and /MediaBox intersection.");
}
return shadow(this, "view", view || mediaBox);
return shadow(this, "view", mediaBox);
}

get rotate() {
Expand Down
8 changes: 4 additions & 4 deletions src/display/display_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,13 +224,13 @@ class PageViewport {
if (rotateA === 0) {
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
width = Math.abs(viewBox[3] - viewBox[1]) * scale;
height = Math.abs(viewBox[2] - viewBox[0]) * scale;
width = (viewBox[3] - viewBox[1]) * scale;
height = (viewBox[2] - viewBox[0]) * scale;
} else {
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
width = Math.abs(viewBox[2] - viewBox[0]) * scale;
height = Math.abs(viewBox[3] - viewBox[1]) * scale;
width = (viewBox[2] - viewBox[0]) * scale;
height = (viewBox[3] - viewBox[1]) * scale;
}
// creating transform for the following operations:
// translate(-centerX, -centerY), rotate and flip vertically,
Expand Down

0 comments on commit 775c54f

Please sign in to comment.