diff --git a/examples/acroforms/forms.js b/examples/acroforms/forms.js index d7c40c8cc..732ea94e5 100644 --- a/examples/acroforms/forms.js +++ b/examples/acroforms/forms.js @@ -140,9 +140,9 @@ function renderPage(div, pdf, pageNumber, callback) { // In production, the bundled pdf.js shall be used instead of RequireJS. require.config({paths: {'pdfjs': '../../src'}}); -require(['pdfjs/display/api'], function (api) { +require(['pdfjs/display/api', 'pdfjs/display/global'], function (api, global) { // In production, change this to point to the built `pdf.worker.js` file. - PDFJS.workerSrc = '../../src/worker_loader.js'; + global.PDFJS.workerSrc = '../../src/worker_loader.js'; // Fetch the PDF document from the URL using promises. api.getDocument(pdfWithFormsPath).then(function getPdfForm(pdf) { diff --git a/examples/helloworld/hello.js b/examples/helloworld/hello.js index 00aac8f61..3571b59a6 100644 --- a/examples/helloworld/hello.js +++ b/examples/helloworld/hello.js @@ -2,9 +2,9 @@ // In production, the bundled pdf.js shall be used instead of RequireJS. require.config({paths: {'pdfjs': '../../src'}}); -require(['pdfjs/display/api'], function (api) { +require(['pdfjs/display/api', 'pdfjs/display/global'], function (api, global) { // In production, change this to point to the built `pdf.worker.js` file. - PDFJS.workerSrc = '../../src/worker_loader.js'; + global.PDFJS.workerSrc = '../../src/worker_loader.js'; // Fetch the PDF document from the URL using promises. api.getDocument('helloworld.pdf').then(function (pdf) { diff --git a/examples/node/getinfo.js b/examples/node/getinfo.js index c06e05ddd..3bed39297 100644 --- a/examples/node/getinfo.js +++ b/examples/node/getinfo.js @@ -13,7 +13,7 @@ var fs = require('fs'); global.DOMParser = require('./domparsermock.js').DOMParserMock; // Run `gulp dist` to generate 'pdfjs-dist' npm package files. -require('../../build/dist'); +var pdfjsLib = require('../../build/dist'); // Loading file from file system into typed array var pdfPath = process.argv[2] || '../../web/compressed.tracemonkey-pldi-09.pdf'; @@ -21,7 +21,7 @@ var data = new Uint8Array(fs.readFileSync(pdfPath)); // Will be using promises to load document, pages and misc data instead of // callback. -PDFJS.getDocument(data).then(function (doc) { +pdfjsLib.getDocument(data).then(function (doc) { var numPages = doc.numPages; console.log('# Document Loaded'); console.log('Number of Pages: ' + numPages); diff --git a/examples/node/pdf2svg.js b/examples/node/pdf2svg.js index 48268bfce..00d412169 100644 --- a/examples/node/pdf2svg.js +++ b/examples/node/pdf2svg.js @@ -11,7 +11,7 @@ var fs = require('fs'); require('./domstubs.js'); // Run `gulp dist` to generate 'pdfjs-dist' npm package files. -require('../../build/dist'); +var pdfjsLib = require('../../build/dist'); // Loading file from file system into typed array var pdfPath = process.argv[2] || '../../web/compressed.tracemonkey-pldi-09.pdf'; @@ -44,7 +44,7 @@ function getFileNameFromPath(path) { // Will be using promises to load document, pages and misc data instead of // callback. -PDFJS.getDocument(data).then(function (doc) { +pdfjsLib.getDocument(data).then(function (doc) { var numPages = doc.numPages; console.log('# Document Loaded'); console.log('Number of Pages: ' + numPages); @@ -59,7 +59,7 @@ PDFJS.getDocument(data).then(function (doc) { console.log(); return page.getOperatorList().then(function (opList) { - var svgGfx = new PDFJS.SVGGraphics(page.commonObjs, page.objs); + var svgGfx = new pdfjsLib.SVGGraphics(page.commonObjs, page.objs); svgGfx.embedFonts = true; return svgGfx.getSVG(opList, viewport).then(function (svg) { var svgDump = svg.toString(); diff --git a/examples/svgviewer/viewer.js b/examples/svgviewer/viewer.js index 3fe24d954..51f5ad2dd 100644 --- a/examples/svgviewer/viewer.js +++ b/examples/svgviewer/viewer.js @@ -9,7 +9,7 @@ var queryParams = query ? JSON.parse('{' + query.split('&').map(function (a) { var url = queryParams.file || '../../test/pdfs/liveprogramming.pdf'; var scale = +queryParams.scale || 1.5; -function renderDocument(pdf) { +function renderDocument(pdf, svgLib) { var numPages = pdf.numPages; // Using promise to fetch the page @@ -37,7 +37,7 @@ function renderDocument(pdf) { anchor.appendChild(container); return page.getOperatorList().then(function (opList) { - var svgGfx = new PDFJS.SVGGraphics(page.commonObjs, page.objs); + var svgGfx = new svgLib.SVGGraphics(page.commonObjs, page.objs); return svgGfx.getSVG(opList, viewport).then(function (svg) { container.appendChild(svg); }); @@ -49,14 +49,17 @@ function renderDocument(pdf) { // In production, the bundled pdf.js shall be used instead of RequireJS. require.config({paths: {'pdfjs': '../../src'}}); -require(['pdfjs/display/api', 'pdfjs/display/svg'], function (api, svg) { +require(['pdfjs/display/api', 'pdfjs/display/svg', 'pdfjs/display/global'], + function (api, svg, global) { // In production, change this to point to the built `pdf.worker.js` file. - PDFJS.workerSrc = '../../src/worker_loader.js'; + global.PDFJS.workerSrc = '../../src/worker_loader.js'; // In production, change this to point to where the cMaps are placed. - PDFJS.cMapUrl = '../../external/bcmaps/'; - PDFJS.cMapPacked = true; + global.PDFJS.cMapUrl = '../../external/bcmaps/'; + global.PDFJS.cMapPacked = true; // Fetch the PDF document from the URL using promises. - api.getDocument(url).then(renderDocument); + api.getDocument(url).then(function (doc) { + renderDocument(doc, svg); + }); }); diff --git a/examples/webpack/main.js b/examples/webpack/main.js index 2a3509d7a..6b475dc5b 100644 --- a/examples/webpack/main.js +++ b/examples/webpack/main.js @@ -3,7 +3,7 @@ // Hello world example for webpack. -require('pdfjs-dist'); +var pdfjsLib = require('pdfjs-dist'); var pdfPath = '../helloworld/helloworld.pdf'; @@ -11,7 +11,7 @@ var pdfPath = '../helloworld/helloworld.pdf'; // however that might degrade the UI performance in web browsers. // Loading a document. -var loadingTask = PDFJS.getDocument(pdfPath); +var loadingTask = pdfjsLib.getDocument(pdfPath); loadingTask.promise.then(function (pdfDocument) { // Request a first page return pdfDocument.getPage(1).then(function (pdfPage) { diff --git a/src/display/api.js b/src/display/api.js index 0bb61fcde..17b280d9e 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals pdfjsFilePath */ +/* globals pdfjsFilePath, pdfjsVersion, pdfjsBuild */ 'use strict'; @@ -2051,6 +2051,13 @@ var _UnsupportedManager = (function UnsupportedManagerClosure() { }; })(); +if (typeof pdfjsVersion !== 'undefined') { + exports.version = pdfjsVersion; +} +if (typeof pdfjsBuild !== 'undefined') { + exports.build = pdfjsBuild; +} + exports.getDocument = getDocument; exports.PDFDataRangeTransport = PDFDataRangeTransport; exports.PDFWorker = PDFWorker; diff --git a/src/main_loader.js b/src/main_loader.js index e9afea7c2..e6dc4920e 100644 --- a/src/main_loader.js +++ b/src/main_loader.js @@ -40,9 +40,11 @@ // Sync the exports below with ./pdf.js file/template. exports.PDFJS = displayGlobal.PDFJS; - + exports.build = displayAPI.build; + exports.version = displayAPI.version; exports.getDocument = displayAPI.getDocument; exports.PDFDataRangeTransport = displayAPI.PDFDataRangeTransport; + exports.PDFWorker = displayAPI.PDFWorker; exports.renderTextLayer = displayTextLayer.renderTextLayer; exports.AnnotationLayer = displayAnnotationLayer.AnnotationLayer; exports.CustomStyle = displayDOMUtils.CustomStyle; @@ -51,4 +53,14 @@ exports.MissingPDFException = sharedUtil.MissingPDFException; exports.SVGGraphics = displaySVG.SVGGraphics; exports.UnexpectedResponseException = sharedUtil.UnexpectedResponseException; + exports.OPS = sharedUtil.OPS; + exports.UNSUPPORTED_FEATURES = sharedUtil.UNSUPPORTED_FEATURES; + exports.isValidUrl = sharedUtil.isValidUrl; + exports.createObjectURL = sharedUtil.createObjectURL; + exports.removeNullCharacters = sharedUtil.removeNullCharacters; + exports.shadow = sharedUtil.shadow; + exports.createBlob = sharedUtil.createBlob; + exports.getFilenameFromUrl = displayDOMUtils.getFilenameFromUrl; + exports.addLinkAttributes = displayDOMUtils.addLinkAttributes; + })); diff --git a/src/pdf.js b/src/pdf.js index 4c0087d5c..61dea39ea 100644 --- a/src/pdf.js +++ b/src/pdf.js @@ -45,9 +45,12 @@ //#if MAIN_FILE exports.PDFJS = pdfjsLibs.pdfjsDisplayGlobal.PDFJS; + exports.build = pdfjsLibs.pdfjsDisplayAPI.build; + exports.version = pdfjsLibs.pdfjsDisplayAPI.version; exports.getDocument = pdfjsLibs.pdfjsDisplayAPI.getDocument; exports.PDFDataRangeTransport = pdfjsLibs.pdfjsDisplayAPI.PDFDataRangeTransport; + exports.PDFWorker = pdfjsLibs.pdfjsDisplayAPI.PDFWorker; exports.renderTextLayer = pdfjsLibs.pdfjsDisplayTextLayer.renderTextLayer; exports.AnnotationLayer = pdfjsLibs.pdfjsDisplayAnnotationLayer.AnnotationLayer; @@ -58,6 +61,16 @@ exports.SVGGraphics = pdfjsLibs.pdfjsDisplaySVG.SVGGraphics; exports.UnexpectedResponseException = pdfjsLibs.pdfjsSharedUtil.UnexpectedResponseException; + exports.OPS = pdfjsLibs.pdfjsSharedUtil.OPS; + exports.UNSUPPORTED_FEATURES = pdfjsLibs.pdfjsSharedUtil.UNSUPPORTED_FEATURES; + exports.isValidUrl = pdfjsLibs.pdfjsSharedUtil.isValidUrl; + exports.createObjectURL = pdfjsLibs.pdfjsSharedUtil.createObjectURL; + exports.removeNullCharacters = pdfjsLibs.pdfjsSharedUtil.removeNullCharacters; + exports.shadow = pdfjsLibs.pdfjsSharedUtil.shadow; + exports.createBlob = pdfjsLibs.pdfjsSharedUtil.createBlob; + exports.getFilenameFromUrl = + pdfjsLibs.pdfjsDisplayDOMUtils.getFilenameFromUrl; + exports.addLinkAttributes = pdfjsLibs.pdfjsDisplayDOMUtils.addLinkAttributes; //#else exports.WorkerMessageHandler = pdfjsLibs.pdfjsCoreWorker.WorkerMessageHandler; //#endif diff --git a/web/annotation_layer_builder.js b/web/annotation_layer_builder.js index 6d985b8cc..d2bf28ba2 100644 --- a/web/annotation_layer_builder.js +++ b/web/annotation_layer_builder.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/*globals PDFJS, mozL10n, SimpleLinkService */ +/*globals pdfjsLib, mozL10n, SimpleLinkService */ 'use strict'; @@ -68,7 +68,7 @@ var AnnotationLayerBuilder = (function AnnotationLayerBuilderClosure() { if (self.div) { // If an annotationLayer already exists, refresh its children's // transformation matrices. - PDFJS.AnnotationLayer.update(parameters); + pdfjsLib.AnnotationLayer.update(parameters); } else { // Create an annotation layer div and render the annotations // if there is at least one annotation. @@ -81,7 +81,7 @@ var AnnotationLayerBuilder = (function AnnotationLayerBuilderClosure() { self.pageDiv.appendChild(self.div); parameters.div = self.div; - PDFJS.AnnotationLayer.render(parameters); + pdfjsLib.AnnotationLayer.render(parameters); if (typeof mozL10n !== 'undefined') { mozL10n.translate(self.div); } diff --git a/web/app.js b/web/app.js index 0f65a8864..a6c027aa3 100644 --- a/web/app.js +++ b/web/app.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS, PDFBug, FirefoxCom, Stats, ProgressBar, DownloadManager, +/* globals pdfjsLib, PDFBug, FirefoxCom, Stats, ProgressBar, DownloadManager, getPDFFileNameFromURL, PDFHistory, Preferences, SidebarView, ViewHistory, Stats, PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar, PasswordPrompt, PDFPresentationMode, PDFSidebar, @@ -20,8 +20,7 @@ PDFOutlineViewer, PDFAttachmentViewer, OverlayManager, PDFFindController, PDFFindBar, PDFViewer, PDFRenderingQueue, PresentationModeState, parseQueryString, RenderingStates, - UNKNOWN_SCALE, DEFAULT_SCALE_VALUE, DEFAULT_URL, mozL10n, - IGNORE_CURRENT_POSITION_ON_ZOOM: true */ + UNKNOWN_SCALE, DEFAULT_SCALE_VALUE, DEFAULT_URL, mozL10n */ 'use strict'; @@ -108,7 +107,7 @@ var PDFViewerApplication = { // called once when the document is loaded initialize: function pdfViewInitialize() { - configure(PDFJS); + configure(pdfjsLib.PDFJS); var pdfRenderingQueue = new PDFRenderingQueue(); pdfRenderingQueue.onIdle = this.cleanup.bind(this); @@ -263,6 +262,7 @@ var PDFViewerApplication = { this.pdfSidebar.onToggled = this.forceRendering.bind(this); var self = this; + var PDFJS = pdfjsLib.PDFJS; var initializedPromise = Promise.all([ Preferences.get('enableWebGL').then(function resolved(value) { PDFJS.disableWebGL = !value; @@ -369,7 +369,7 @@ var PDFViewerApplication = { var canvas = document.createElement('canvas'); var value = 'mozPrintCallback' in canvas; - return PDFJS.shadow(this, 'supportsPrinting', value); + return pdfjsLib.shadow(this, 'supportsPrinting', value); }, get supportsFullscreen() { @@ -383,11 +383,11 @@ var PDFViewerApplication = { document.msFullscreenEnabled === false) { support = false; } - if (support && PDFJS.disableFullscreen === true) { + if (support && pdfjsLib.PDFJS.disableFullscreen === true) { support = false; } - return PDFJS.shadow(this, 'supportsFullscreen', support); + return pdfjsLib.shadow(this, 'supportsFullscreen', support); }, get supportsIntegratedFind() { @@ -396,7 +396,7 @@ var PDFViewerApplication = { // support = FirefoxCom.requestSync('supportsIntegratedFind'); //#endif - return PDFJS.shadow(this, 'supportsIntegratedFind', support); + return pdfjsLib.shadow(this, 'supportsIntegratedFind', support); }, get supportsDocumentFonts() { @@ -405,7 +405,7 @@ var PDFViewerApplication = { // support = FirefoxCom.requestSync('supportsDocumentFonts'); //#endif - return PDFJS.shadow(this, 'supportsDocumentFonts', support); + return pdfjsLib.shadow(this, 'supportsDocumentFonts', support); }, get supportsDocumentColors() { @@ -414,13 +414,13 @@ var PDFViewerApplication = { // support = FirefoxCom.requestSync('supportsDocumentColors'); //#endif - return PDFJS.shadow(this, 'supportsDocumentColors', support); + return pdfjsLib.shadow(this, 'supportsDocumentColors', support); }, get loadingBar() { var bar = new ProgressBar('#loadingBar', {}); - return PDFJS.shadow(this, 'loadingBar', bar); + return pdfjsLib.shadow(this, 'loadingBar', bar); }, get supportedMouseWheelZoomModifierKeys() { @@ -432,16 +432,17 @@ var PDFViewerApplication = { // support = FirefoxCom.requestSync('supportedMouseWheelZoomModifierKeys'); //#endif - return PDFJS.shadow(this, 'supportedMouseWheelZoomModifierKeys', support); + return pdfjsLib.shadow(this, 'supportedMouseWheelZoomModifierKeys', + support); }, //#if (FIREFOX || MOZCENTRAL) initPassiveLoading: function pdfViewInitPassiveLoading() { function FirefoxComDataRangeTransport(length, initialData) { - PDFJS.PDFDataRangeTransport.call(this, length, initialData); + pdfjsLib.PDFDataRangeTransport.call(this, length, initialData); } FirefoxComDataRangeTransport.prototype = - Object.create(PDFJS.PDFDataRangeTransport.prototype); + Object.create(pdfjsLib.PDFDataRangeTransport.prototype); FirefoxComDataRangeTransport.prototype.requestDataRange = function FirefoxComDataRangeTransport_requestDataRange(begin, end) { FirefoxCom.request('requestDataRange', { begin: begin, end: end }); @@ -507,7 +508,8 @@ var PDFViewerApplication = { setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) { this.url = url; try { - this.setTitle(decodeURIComponent(PDFJS.getFilenameFromUrl(url)) || url); + this.setTitle(decodeURIComponent( + pdfjsLib.getFilenameFromUrl(url)) || url); } catch (e) { // decodeURIComponent may throw URIError, // fall back to using the unprocessed url in that case @@ -618,7 +620,7 @@ var PDFViewerApplication = { var self = this; self.downloadComplete = false; - var loadingTask = PDFJS.getDocument(parameters); + var loadingTask = pdfjsLib.getDocument(parameters); this.pdfLoadingTask = loadingTask; loadingTask.onPassword = function passwordNeeded(updatePassword, reason) { @@ -643,15 +645,15 @@ var PDFViewerApplication = { var loadingErrorMessage = mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); - if (exception instanceof PDFJS.InvalidPDFException) { + if (exception instanceof pdfjsLib.InvalidPDFException) { // change error message also for other builds loadingErrorMessage = mozL10n.get('invalid_file_error', null, 'Invalid or corrupted PDF file.'); - } else if (exception instanceof PDFJS.MissingPDFException) { + } else if (exception instanceof pdfjsLib.MissingPDFException) { // special message for missing PDF's loadingErrorMessage = mozL10n.get('missing_file_error', null, 'Missing PDF file.'); - } else if (exception instanceof PDFJS.UnexpectedResponseException) { + } else if (exception instanceof pdfjsLib.UnexpectedResponseException) { loadingErrorMessage = mozL10n.get('unexpected_response_error', null, 'Unexpected server response.'); } @@ -697,7 +699,7 @@ var PDFViewerApplication = { this.pdfDocument.getData().then( function getDataSuccess(data) { - var blob = PDFJS.createBlob(data, 'application/pdf'); + var blob = pdfjsLib.createBlob(data, 'application/pdf'); downloadManager.download(blob, url, filename); }, downloadByUrl // Error occurred try downloading with just the url. @@ -737,7 +739,7 @@ var PDFViewerApplication = { */ error: function pdfViewError(message, moreInfo) { var moreInfoText = mozL10n.get('error_version_info', - {version: PDFJS.version || '?', build: PDFJS.build || '?'}, + {version: pdfjsLib.version || '?', build: pdfjsLib.build || '?'}, 'PDF.js v{{version}} (build: {{build}})') + '\n'; if (moreInfo) { moreInfoText += @@ -813,7 +815,7 @@ var PDFViewerApplication = { // the loading bar will not be completely filled, nor will it be hidden. // To prevent displaying a partially filled loading bar permanently, we // hide it when no data has been loaded during a certain amount of time. - if (PDFJS.disableAutoFetch && percent) { + if (pdfjsLib.PDFJS.disableAutoFetch && percent) { if (this.disableAutoFetchLoadingBarTimeout) { clearTimeout(this.disableAutoFetchLoadingBarTimeout); this.disableAutoFetchLoadingBarTimeout = null; @@ -881,7 +883,7 @@ var PDFViewerApplication = { self.loadingBar.setWidth(document.getElementById('viewer')); - if (!PDFJS.disableHistory && !self.isViewerEmbedded) { + if (!pdfjsLib.PDFJS.disableHistory && !self.isViewerEmbedded) { // The browsing history is only enabled when the viewer is standalone, // i.e. not when it is embedded in a web page. if (!self.preferenceShowPreviousViewOnLoad) { @@ -954,7 +956,7 @@ var PDFViewerApplication = { pdfDocument.getJavaScript().then(function(javaScript) { if (javaScript.length) { console.warn('Warning: JavaScript is not supported'); - self.fallback(PDFJS.UNSUPPORTED_FEATURES.javaScript); + self.fallback(pdfjsLib.UNSUPPORTED_FEATURES.javaScript); } // Hack to support auto printing. var regex = /\bprint\s*\(/; @@ -991,8 +993,8 @@ var PDFViewerApplication = { console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + - ' (PDF.js: ' + (PDFJS.version || '-') + - (!PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); + ' (PDF.js: ' + (pdfjsLib.version || '-') + + (!pdfjsLib.PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); var pdfTitle; if (metadata && metadata.has('dc:title')) { @@ -1013,7 +1015,7 @@ var PDFViewerApplication = { if (info.IsAcroFormPresent) { console.warn('Warning: AcroForm/XFA is not supported'); - self.fallback(PDFJS.UNSUPPORTED_FEATURES.forms); + self.fallback(pdfjsLib.UNSUPPORTED_FEATURES.forms); } //#if !PRODUCTION @@ -1296,9 +1298,7 @@ function webViewerInitialized() { //document.getElementById('secondaryOpenFile').setAttribute('hidden', 'true'); //#endif -//#if !(FIREFOX || MOZCENTRAL) - var locale = PDFJS.locale || navigator.language; -//#endif + var PDFJS = pdfjsLib.PDFJS; //#if !PRODUCTION if (true) { @@ -1337,7 +1337,7 @@ function webViewerInitialized() { PDFJS.verbosity = hashParams['verbosity'] | 0; } if ('ignorecurrentpositiononzoom' in hashParams) { - IGNORE_CURRENT_POSITION_ON_ZOOM = + PDFJS.ignoreCurrentPositionOnZoom = (hashParams['ignorecurrentpositiononzoom'] === 'true'); } //#if !PRODUCTION @@ -1348,7 +1348,7 @@ function webViewerInitialized() { //#endif //#if !(FIREFOX || MOZCENTRAL) if ('locale' in hashParams) { - locale = hashParams['locale']; + PDFJS.locale = hashParams['locale']; } //#endif if ('textlayer' in hashParams) { @@ -1374,7 +1374,7 @@ function webViewerInitialized() { } //#if !(FIREFOX || MOZCENTRAL) - mozL10n.setLanguage(locale); + mozL10n.setLanguage(PDFJS.locale); //#endif //#if (FIREFOX || MOZCENTRAL) if (!PDFViewerApplication.supportsDocumentFonts) { @@ -1518,7 +1518,7 @@ document.addEventListener('pagerendered', function (e) { thumbnailView.setImage(pageView); } - if (PDFJS.pdfBug && Stats.enabled && pageView.stats) { + if (pdfjsLib.PDFJS.pdfBug && Stats.enabled && pageView.stats) { Stats.add(pageNumber, pageView.stats); } @@ -1711,7 +1711,7 @@ window.addEventListener('change', function webViewerChange(evt) { } var file = files[0]; - if (!PDFJS.disableCreateObjectURL && + if (!pdfjsLib.PDFJS.disableCreateObjectURL && typeof URL !== 'undefined' && URL.createObjectURL) { PDFViewerApplication.open(URL.createObjectURL(file)); } else { @@ -1815,7 +1815,7 @@ window.addEventListener('pagechange', function pagechange(evt) { document.getElementById('lastPage').disabled = (page >= numPages); // we need to update stats - if (PDFJS.pdfBug && Stats.enabled) { + if (pdfjsLib.PDFJS.pdfBug && Stats.enabled) { var pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); if (pageView.stats) { Stats.add(page, pageView.stats); diff --git a/web/chromecom.js b/web/chromecom.js index 8d4014084..f9848f0f8 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -13,7 +13,7 @@ * limitations under the License. */ -/* globals chrome, PDFJS, PDFViewerApplication, OverlayManager */ +/* globals chrome, pdfjsLib, PDFViewerApplication, OverlayManager */ 'use strict'; var ChromeCom = (function ChromeComClosure() { @@ -81,7 +81,7 @@ var ChromeCom = (function ChromeComClosure() { return; } } - if (/^filesystem:/.test(file) && !PDFJS.disableWorker) { + if (/^filesystem:/.test(file) && !pdfjsLib.PDFJS.disableWorker) { // The security origin of filesystem:-URLs are not preserved when the // URL is passed to a Web worker, (http://crbug.com/362061), so we have // to create an intermediate blob:-URL as a work-around. diff --git a/web/debugger.js b/web/debugger.js index 19d29163d..bd3e5620d 100644 --- a/web/debugger.js +++ b/web/debugger.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS */ +/* globals pdfjsLib */ 'use strict'; @@ -307,8 +307,8 @@ var Stepper = (function StepperClosure() { this.table = table; if (!opMap) { opMap = Object.create(null); - for (var key in PDFJS.OPS) { - opMap[PDFJS.OPS[key]] = key; + for (var key in pdfjsLib.OPS) { + opMap[pdfjsLib.OPS[key]] = key; } } }, @@ -460,7 +460,7 @@ var Stats = (function Stats() { manager: null, init: function init() { this.panel.setAttribute('style', 'padding: 5px;'); - PDFJS.enableStats = true; + pdfjsLib.PDFJS.enableStats = true; }, enabled: false, active: false, diff --git a/web/download_manager.js b/web/download_manager.js index 62564e565..dc899e739 100644 --- a/web/download_manager.js +++ b/web/download_manager.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals URL, PDFJS */ +/* globals URL, pdfjsLib */ 'use strict'; @@ -58,7 +58,7 @@ var DownloadManager = (function DownloadManagerClosure() { DownloadManager.prototype = { downloadUrl: function DownloadManager_downloadUrl(url, filename) { - if (!PDFJS.isValidUrl(url, true)) { + if (!pdfjsLib.isValidUrl(url, true)) { return; // restricted/invalid URL } @@ -72,7 +72,8 @@ var DownloadManager = (function DownloadManagerClosure() { filename); } - var blobUrl = PDFJS.createObjectURL(data, contentType); + var blobUrl = pdfjsLib.createObjectURL(data, contentType, + pdfjsLib.PDFJS.disableCreateObjectURL); download(blobUrl, filename); }, diff --git a/web/firefoxcom.js b/web/firefoxcom.js index 70c5bd126..1931f1fc9 100644 --- a/web/firefoxcom.js +++ b/web/firefoxcom.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals Preferences, PDFJS, Promise */ +/* globals Preferences, pdfjsLib, Promise */ 'use strict'; @@ -87,7 +87,7 @@ var DownloadManager = (function DownloadManagerClosure() { downloadData: function DownloadManager_downloadData(data, filename, contentType) { - var blobUrl = PDFJS.createObjectURL(data, contentType); + var blobUrl = pdfjsLib.createObjectURL(data, contentType, false); FirefoxCom.request('download', { blobUrl: blobUrl, diff --git a/web/password_prompt.js b/web/password_prompt.js index d2d1e2070..4ca9474df 100644 --- a/web/password_prompt.js +++ b/web/password_prompt.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS, mozL10n, OverlayManager */ +/* globals pdfjsLib, mozL10n, OverlayManager */ 'use strict'; @@ -55,7 +55,7 @@ var PasswordPrompt = { var promptString = mozL10n.get('password_label', null, 'Enter the password to open this PDF file.'); - if (this.reason === PDFJS.PasswordResponses.INCORRECT_PASSWORD) { + if (this.reason === pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) { promptString = mozL10n.get('password_invalid', null, 'Invalid password. Please try again.'); } diff --git a/web/pdf_attachment_viewer.js b/web/pdf_attachment_viewer.js index e5a1d541d..68c90d88d 100644 --- a/web/pdf_attachment_viewer.js +++ b/web/pdf_attachment_viewer.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS */ +/* globals pdfjsLib */ 'use strict'; @@ -98,12 +98,12 @@ var PDFAttachmentViewer = (function PDFAttachmentViewerClosure() { for (var i = 0; i < attachmentsCount; i++) { var item = attachments[names[i]]; - var filename = PDFJS.getFilenameFromUrl(item.filename); + var filename = pdfjsLib.getFilenameFromUrl(item.filename); var div = document.createElement('div'); div.className = 'attachmentsItem'; var button = document.createElement('button'); this._bindLink(button, item.content, filename); - button.textContent = PDFJS.removeNullCharacters(filename); + button.textContent = pdfjsLib.removeNullCharacters(filename); div.appendChild(button); this.container.appendChild(div); } diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 407cc1651..89fae7515 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS, FirefoxCom, Promise, scrollIntoView */ +/* globals FirefoxCom, Promise, scrollIntoView */ 'use strict'; diff --git a/web/pdf_outline_viewer.js b/web/pdf_outline_viewer.js index d778f7e46..235380c99 100644 --- a/web/pdf_outline_viewer.js +++ b/web/pdf_outline_viewer.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS */ +/* globals pdfjsLib */ 'use strict'; @@ -71,7 +71,7 @@ var PDFOutlineViewer = (function PDFOutlineViewerClosure() { */ _bindLink: function PDFOutlineViewer_bindLink(element, item) { if (item.url) { - PDFJS.addLinkAttributes(element, { url: item.url }); + pdfjsLib.addLinkAttributes(element, { url: item.url }); return; } var linkService = this.linkService; @@ -180,7 +180,7 @@ var PDFOutlineViewer = (function PDFOutlineViewerClosure() { this._bindLink(element, item); this._setStyles(element, item); element.textContent = - PDFJS.removeNullCharacters(item.title) || DEFAULT_TITLE; + pdfjsLib.removeNullCharacters(item.title) || DEFAULT_TITLE; div.appendChild(element); diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index a7cfe5631..81e1c1b17 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals RenderingStates, PDFJS, DEFAULT_SCALE, CSS_UNITS, getOutputScale, +/* globals RenderingStates, pdfjsLib, DEFAULT_SCALE, CSS_UNITS, getOutputScale, TextLayerBuilder, Promise, approximateFraction, roundToDivide */ 'use strict'; @@ -162,19 +162,18 @@ var PDFPageView = (function PDFPageViewClosure() { }); var isScalingRestricted = false; - if (this.canvas && PDFJS.maxCanvasPixels > 0) { + if (this.canvas && pdfjsLib.PDFJS.maxCanvasPixels > 0) { var outputScale = this.outputScale; var pixelsInViewport = this.viewport.width * this.viewport.height; - var maxScale = Math.sqrt(PDFJS.maxCanvasPixels / pixelsInViewport); if (((Math.floor(this.viewport.width) * outputScale.sx) | 0) * ((Math.floor(this.viewport.height) * outputScale.sy) | 0) > - PDFJS.maxCanvasPixels) { + pdfjsLib.PDFJS.maxCanvasPixels) { isScalingRestricted = true; } } if (this.canvas) { - if (PDFJS.useOnlyCssZoom || + if (pdfjsLib.PDFJS.useOnlyCssZoom || (this.hasRestrictedScaling && isScalingRestricted)) { this.cssTransform(this.canvas, true); @@ -208,7 +207,7 @@ var PDFPageView = (function PDFPageViewClosure() { }, cssTransform: function PDFPageView_transform(canvas, redrawAnnotations) { - var CustomStyle = PDFJS.CustomStyle; + var CustomStyle = pdfjsLib.CustomStyle; // Scale canvas, canvas wrapper, and page container. var width = this.viewport.width; @@ -330,7 +329,7 @@ var PDFPageView = (function PDFPageViewClosure() { var outputScale = getOutputScale(ctx); this.outputScale = outputScale; - if (PDFJS.useOnlyCssZoom) { + if (pdfjsLib.PDFJS.useOnlyCssZoom) { var actualSizeViewport = viewport.clone({scale: CSS_UNITS}); // Use a scale that will make the canvas be the original intended size // of the page. @@ -339,9 +338,10 @@ var PDFPageView = (function PDFPageViewClosure() { outputScale.scaled = true; } - if (PDFJS.maxCanvasPixels > 0) { + if (pdfjsLib.PDFJS.maxCanvasPixels > 0) { var pixelsInViewport = viewport.width * viewport.height; - var maxScale = Math.sqrt(PDFJS.maxCanvasPixels / pixelsInViewport); + var maxScale = + Math.sqrt(pdfjsLib.PDFJS.maxCanvasPixels / pixelsInViewport); if (outputScale.sx > maxScale || outputScale.sy > maxScale) { outputScale.sx = maxScale; outputScale.sy = maxScale; @@ -517,7 +517,7 @@ var PDFPageView = (function PDFPageViewClosure() { }, beforePrint: function PDFPageView_beforePrint() { - var CustomStyle = PDFJS.CustomStyle; + var CustomStyle = pdfjsLib.CustomStyle; var pdfPage = this.pdfPage; var viewport = pdfPage.getViewport(1); diff --git a/web/pdf_viewer.component.js b/web/pdf_viewer.component.js index 22af0e5f7..596362c71 100644 --- a/web/pdf_viewer.component.js +++ b/web/pdf_viewer.component.js @@ -17,14 +17,21 @@ DefaultTextLayerFactory, AnnotationLayerBuilder, PDFHistory, DefaultAnnotationLayerFactory, DownloadManager, ProgressBar */ -// Initializing PDFJS global object (if still undefined) -if (typeof PDFJS === 'undefined') { - (typeof window !== 'undefined' ? window : this).PDFJS = {}; -} - (function pdfViewerWrapper() { 'use strict'; + var root = this; + if (!root.pdfjsLib) { + Object.defineProperty(root, 'pdfjsLib', { + get: function () { + return root.pdfjsDistBuildPdf || root.pdfjsDistBuildPdfCombined || + root.pdfjsMainLoader; + }, + enumerable: true, + configurable: true + }); + } + //#include ui_utils.js //#include pdf_link_service.js //#include pdf_viewer.js diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index baf28551d..766d88c0a 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -15,7 +15,7 @@ /*globals watchScroll, PDFPageView, UNKNOWN_SCALE, SCROLLBAR_PADDING, VERTICAL_PADDING, MAX_AUTO_SCALE, CSS_UNITS, DEFAULT_SCALE, scrollIntoView, getVisibleElements, RenderingStates, - PDFJS, Promise, TextLayerBuilder, PDFRenderingQueue, + pdfjsLib, Promise, TextLayerBuilder, PDFRenderingQueue, AnnotationLayerBuilder, DEFAULT_SCALE_VALUE */ 'use strict'; @@ -27,7 +27,6 @@ var PresentationModeState = { FULLSCREEN: 3, }; -var IGNORE_CURRENT_POSITION_ON_ZOOM = false; var DEFAULT_CACHE_SIZE = 10; //#include pdf_rendering_queue.js @@ -287,7 +286,7 @@ var PDFViewer = (function pdfViewer() { var viewport = pdfPage.getViewport(scale * CSS_UNITS); for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { var textLayerFactory = null; - if (!PDFJS.disableTextLayer) { + if (!pdfjsLib.PDFJS.disableTextLayer) { textLayerFactory = this; } var pageView = new PDFPageView({ @@ -309,7 +308,7 @@ var PDFViewer = (function pdfViewer() { // starts to create the correct size canvas. Wait until one page is // rendered so we don't tie up too many resources early on. onePageRendered.then(function () { - if (!PDFJS.disableAutoFetch) { + if (!pdfjsLib.PDFJS.disableAutoFetch) { var getPagesLeft = pagesCount; for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { @@ -399,7 +398,7 @@ var PDFViewer = (function pdfViewer() { if (!noScroll) { var page = this._currentPageNumber, dest; - if (this._location && !IGNORE_CURRENT_POSITION_ON_ZOOM && + if (this._location && !pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom && !(this.isInPresentationMode || this.isChangingPresentationMode)) { page = this._location.pageNumber; dest = [null, { name: 'XYZ' }, this._location.left, diff --git a/web/text_layer_builder.js b/web/text_layer_builder.js index 6ef873684..e246fa91a 100644 --- a/web/text_layer_builder.js +++ b/web/text_layer_builder.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals PDFJS */ +/* globals pdfjsLib */ 'use strict'; @@ -78,7 +78,7 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() { this.textDivs = []; var textLayerFrag = document.createDocumentFragment(); - this.textLayerRenderTask = PDFJS.renderTextLayer({ + this.textLayerRenderTask = pdfjsLib.renderTextLayer({ textContent: this.textContent, container: textLayerFrag, viewport: this.viewport, diff --git a/web/ui_utils.js b/web/ui_utils.js index 1a031ebbc..0f54adc48 100644 --- a/web/ui_utils.js +++ b/web/ui_utils.js @@ -27,7 +27,7 @@ var VERTICAL_PADDING = 5; var mozL10n = document.mozL10n || document.webL10n; if (typeof PDFJS === 'undefined') { - window.PDFJS = {}; + (typeof window !== 'undefined' ? window : this).PDFJS = {}; } /** @@ -53,6 +53,34 @@ PDFJS.useOnlyCssZoom = (PDFJS.useOnlyCssZoom === undefined ? PDFJS.maxCanvasPixels = (PDFJS.maxCanvasPixels === undefined ? 16777216 : PDFJS.maxCanvasPixels); +/** + * Disables saving of the last position of the viewed PDF. + * @var {boolean} + */ +PDFJS.disableHistory = (PDFJS.disableHistory === undefined ? + false : PDFJS.disableHistory); + +/** + * Disables creation of the text layer that used for text selection and search. + * @var {boolean} + */ +PDFJS.disableTextLayer = (PDFJS.disableTextLayer === undefined ? + false : PDFJS.disableTextLayer); + +/** + * Disables maintaining the current position in the document when zooming. + */ +PDFJS.ignoreCurrentPositionOnZoom = (PDFJS.ignoreCurrentPositionOnZoom === + undefined ? false : PDFJS.ignoreCurrentPositionOnZoom); + +//#if !(FIREFOX || MOZCENTRAL) +/** + * Interface locale settings. + * @var {string} + */ +PDFJS.locale = (PDFJS.locale === undefined ? navigator.language : PDFJS.locale); +//#endif + /** * Returns scale factor for the canvas. It makes sense for the HiDPI displays. * @return {Object} The object with horizontal (sx) and vertical (sy) diff --git a/web/viewer.js b/web/viewer.js index 9709d3579..20b637117 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -41,9 +41,11 @@ function webViewerLoad() { //#if !PRODUCTION require.config({paths: {'pdfjs': '../src'}}); require(['pdfjs/main_loader'], function (loader) { + window.pdfjsLib = loader; PDFViewerApplication.run(); }); //#else +//window.pdfjsLib = window.pdfjsDistBuildPdf; //PDFViewerApplication.run(); //#endif }