diff --git a/src/display/global.js b/src/display/global.js index 044a09e82..70def4c7c 100644 --- a/src/display/global.js +++ b/src/display/global.js @@ -243,13 +243,6 @@ PDFJS.isEvalSupported = (PDFJS.isEvalSupported === undefined ? true : PDFJS.isEvalSupported); - /** - * Renders interactive form elements. - * @var {boolean} - */ - PDFJS.renderInteractiveForms = (PDFJS.renderInteractiveForms === undefined ? - false : PDFJS.renderInteractiveForms); - //#if !MOZCENTRAL var savedOpenExternalLinksInNewWindow = PDFJS.openExternalLinksInNewWindow; delete PDFJS.openExternalLinksInNewWindow; diff --git a/web/annotation_layer_builder.js b/web/annotation_layer_builder.js index 5d8dd03b5..493e58262 100644 --- a/web/annotation_layer_builder.js +++ b/web/annotation_layer_builder.js @@ -36,6 +36,7 @@ var SimpleLinkService = pdfLinkService.SimpleLinkService; * @typedef {Object} AnnotationLayerBuilderOptions * @property {HTMLDivElement} pageDiv * @property {PDFPage} pdfPage + * @property {boolean} renderInteractiveForms * @property {IPDFLinkService} linkService * @property {DownloadManager} downloadManager */ @@ -51,6 +52,7 @@ var AnnotationLayerBuilder = (function AnnotationLayerBuilderClosure() { function AnnotationLayerBuilder(options) { this.pageDiv = options.pageDiv; this.pdfPage = options.pdfPage; + this.renderInteractiveForms = options.renderInteractiveForms; this.linkService = options.linkService; this.downloadManager = options.downloadManager; @@ -77,9 +79,9 @@ var AnnotationLayerBuilder = (function AnnotationLayerBuilderClosure() { div: self.div, annotations: annotations, page: self.pdfPage, + renderInteractiveForms: self.renderInteractiveForms, linkService: self.linkService, downloadManager: self.downloadManager, - renderInteractiveForms: pdfjsLib.PDFJS.renderInteractiveForms, }; if (self.div) { @@ -126,12 +128,15 @@ DefaultAnnotationLayerFactory.prototype = { /** * @param {HTMLDivElement} pageDiv * @param {PDFPage} pdfPage + * @param {boolean} renderInteractiveForms * @returns {AnnotationLayerBuilder} */ - createAnnotationLayerBuilder: function (pageDiv, pdfPage) { + createAnnotationLayerBuilder: function (pageDiv, pdfPage, + renderInteractiveForms) { return new AnnotationLayerBuilder({ pageDiv: pageDiv, pdfPage: pdfPage, + renderInteractiveForms: renderInteractiveForms, linkService: new SimpleLinkService(), }); } diff --git a/web/app.js b/web/app.js index f361e5940..6e9168669 100644 --- a/web/app.js +++ b/web/app.js @@ -211,6 +211,7 @@ var PDFViewerApplication = { linkService: pdfLinkService, downloadManager: downloadManager, enhanceTextSelection: false, + renderInteractiveForms: false, }); pdfRenderingQueue.setViewer(this.pdfViewer); pdfLinkService.setViewer(this.pdfViewer); @@ -371,7 +372,10 @@ var PDFViewerApplication = { PDFJS.externalLinkTarget = value; }), Preferences.get('renderInteractiveForms').then(function resolved(value) { - PDFJS.renderInteractiveForms = value; + // TODO: Like the `enhanceTextSelection` preference, move the + // initialization and fetching of `Preferences` to occur + // before the various viewer components are initialized. + self.pdfViewer.renderInteractiveForms = value; }), // TODO move more preferences and other async stuff here ]).catch(function (reason) { }); diff --git a/web/interfaces.js b/web/interfaces.js index 2b1bc6c2b..291cfc440 100644 --- a/web/interfaces.js +++ b/web/interfaces.js @@ -113,7 +113,9 @@ IPDFAnnotationLayerFactory.prototype = { /** * @param {HTMLDivElement} pageDiv * @param {PDFPage} pdfPage + * @param {boolean} renderInteractiveForms * @returns {AnnotationLayerBuilder} */ - createAnnotationLayerBuilder: function (pageDiv, pdfPage) {} + createAnnotationLayerBuilder: function (pageDiv, pdfPage, + renderInteractiveForms) {} }; diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index bebe9e537..8a1d197b7 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -52,6 +52,8 @@ var TEXT_LAYER_RENDER_DELAY = 200; // ms * @property {IPDFAnnotationLayerFactory} annotationLayerFactory * @property {boolean} enhanceTextSelection - Turns on the text selection * enhancement. The default is `false`. + * @property {boolean} renderInteractiveForms - Turns on rendering of + * interactive form elements. The default is `false`. */ /** @@ -72,6 +74,7 @@ var PDFPageView = (function PDFPageViewClosure() { var textLayerFactory = options.textLayerFactory; var annotationLayerFactory = options.annotationLayerFactory; var enhanceTextSelection = options.enhanceTextSelection || false; + var renderInteractiveForms = options.renderInteractiveForms || false; this.id = id; this.renderingId = 'page' + id; @@ -82,6 +85,7 @@ var PDFPageView = (function PDFPageViewClosure() { this.pdfPageRotate = defaultViewport.rotation; this.hasRestrictedScaling = false; this.enhanceTextSelection = enhanceTextSelection; + this.renderInteractiveForms = renderInteractiveForms; this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); this.renderingQueue = renderingQueue; @@ -498,7 +502,7 @@ var PDFPageView = (function PDFPageViewClosure() { canvasContext: ctx, transform: transform, viewport: this.viewport, - renderInteractiveForms: pdfjsLib.PDFJS.renderInteractiveForms, + renderInteractiveForms: this.renderInteractiveForms, // intent: 'default', // === 'display' }; var renderTask = this.renderTask = this.pdfPage.render(renderContext); @@ -524,7 +528,8 @@ var PDFPageView = (function PDFPageViewClosure() { if (this.annotationLayerFactory) { if (!this.annotationLayer) { this.annotationLayer = this.annotationLayerFactory. - createAnnotationLayerBuilder(div, this.pdfPage); + createAnnotationLayerBuilder(div, this.pdfPage, + this.renderInteractiveForms); } this.annotationLayer.render(this.viewport, 'display'); } diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 771f68805..cab205254 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -78,6 +78,8 @@ var DEFAULT_CACHE_SIZE = 10; * around the pages. The default is false. * @property {boolean} enhanceTextSelection - (optional) Enables the improved * text selection behaviour. The default is `false`. + * @property {boolean} renderInteractiveForms - (optional) Enables rendering of + * interactive form elements. The default is `false`. */ /** @@ -130,6 +132,7 @@ var PDFViewer = (function pdfViewer() { this.downloadManager = options.downloadManager || null; this.removePageBorders = options.removePageBorders || false; this.enhanceTextSelection = options.enhanceTextSelection || false; + this.renderInteractiveForms = options.renderInteractiveForms || false; this.defaultRenderingQueue = !options.renderingQueue; if (this.defaultRenderingQueue) { @@ -357,6 +360,7 @@ var PDFViewer = (function pdfViewer() { textLayerFactory: textLayerFactory, annotationLayerFactory: this, enhanceTextSelection: this.enhanceTextSelection, + renderInteractiveForms: this.renderInteractiveForms, }); bindOnAfterAndBeforeDraw(pageView); this._pages.push(pageView); @@ -856,12 +860,15 @@ var PDFViewer = (function pdfViewer() { /** * @param {HTMLDivElement} pageDiv * @param {PDFPage} pdfPage + * @param {boolean} renderInteractiveForms * @returns {AnnotationLayerBuilder} */ - createAnnotationLayerBuilder: function (pageDiv, pdfPage) { + createAnnotationLayerBuilder: function (pageDiv, pdfPage, + renderInteractiveForms) { return new AnnotationLayerBuilder({ pageDiv: pageDiv, pdfPage: pdfPage, + renderInteractiveForms: renderInteractiveForms, linkService: this.linkService, downloadManager: this.downloadManager });