mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-08 17:30:09 +02:00
[Regression] Re-factor the *internal* renderInteractiveForms
handling, since it's currently subtly wrong
The value of the `renderInteractiveForms` parameter, as passed to the `PDFPageProxy.render` method, will (potentially) affect the size/content of the operatorList that's returned from the worker (for documents with forms). Given that operatorLists will generally, unless they contain huge images, be cached in the API, repeated `PDFPageProxy.render` calls that *only* change the `renderInteractiveForms` parameter can thus return an incorrect operatorList. As far as I can tell, this *subtle* bug has existed ever since `renderInteractiveForms`-support was first added in PR 7633 (which is almost five years ago). With the previous patch, fixing this is now really simple by "encoding" the `renderInteractiveForms` parameter in the *internal* renderingIntent handling.
This commit is contained in:
parent
47f94235ab
commit
107efdb178
4 changed files with 12 additions and 14 deletions
|
@ -515,7 +515,7 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
|
|||
});
|
||||
}
|
||||
|
||||
function getRenderingIntent(intent, { isOpList = false }) {
|
||||
function getRenderingIntent(intent, { renderForms = false, isOpList = false }) {
|
||||
let renderingIntent = RenderingIntentFlag.DISPLAY; // Default value.
|
||||
switch (intent) {
|
||||
case "any":
|
||||
|
@ -529,6 +529,9 @@ function getRenderingIntent(intent, { isOpList = false }) {
|
|||
default:
|
||||
warn(`getRenderingIntent - invalid intent: ${intent}`);
|
||||
}
|
||||
if (renderForms) {
|
||||
renderingIntent += RenderingIntentFlag.ANNOTATION_FORMS;
|
||||
}
|
||||
if (isOpList) {
|
||||
renderingIntent += RenderingIntentFlag.OPLIST;
|
||||
}
|
||||
|
@ -1356,7 +1359,9 @@ class PDFPageProxy {
|
|||
this._stats.time("Overall");
|
||||
}
|
||||
|
||||
const renderingIntent = getRenderingIntent(intent, {});
|
||||
const renderingIntent = getRenderingIntent(intent, {
|
||||
renderForms: renderInteractiveForms === true,
|
||||
});
|
||||
// If there was a pending destroy, cancel it so no cleanup happens during
|
||||
// this call to render.
|
||||
this.pendingCleanup = false;
|
||||
|
@ -1400,7 +1405,6 @@ class PDFPageProxy {
|
|||
this._pumpOperatorList({
|
||||
pageIndex: this._pageIndex,
|
||||
intent: renderingIntent,
|
||||
renderInteractiveForms: renderInteractiveForms === true,
|
||||
annotationStorage,
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue