diff --git a/browser/extensions/pdfjs/README.mozilla b/browser/extensions/pdfjs/README.mozilla index 43ca27a93405..4a4eec4b8427 100644 --- a/browser/extensions/pdfjs/README.mozilla +++ b/browser/extensions/pdfjs/README.mozilla @@ -1,5 +1,5 @@ This is the PDF.js project output, https://github.com/mozilla/pdf.js -Current extension version is: 2.0.402 +Current extension version is: 2.0.447 -Taken from upstream commit: 401f3a9d +Taken from upstream commit: c0b22da0 diff --git a/browser/extensions/pdfjs/content/PdfJs.jsm b/browser/extensions/pdfjs/content/PdfJs.jsm index b21ab6d167a7..3682353f5986 100644 --- a/browser/extensions/pdfjs/content/PdfJs.jsm +++ b/browser/extensions/pdfjs/content/PdfJs.jsm @@ -49,6 +49,8 @@ ChromeUtils.defineModuleGetter(this, "PdfjsChromeUtils", "resource://pdf.js/PdfjsChromeUtils.jsm"); ChromeUtils.defineModuleGetter(this, "PdfjsContentUtils", "resource://pdf.js/PdfjsContentUtils.jsm"); +ChromeUtils.defineModuleGetter(this, "PdfJsDefaultPreferences", + "resource://pdf.js/PdfJsDefaultPreferences.jsm"); function getBoolPref(aPref, aDefaultValue) { try { @@ -75,35 +77,10 @@ function isDefaultHandler() { } function initializeDefaultPreferences() { - /* eslint-disable semi */ - var DEFAULT_PREFERENCES = -{ - "showPreviousViewOnLoad": true, - "defaultZoomValue": "", - "sidebarViewOnLoad": 0, - "cursorToolOnLoad": 0, - "enableWebGL": false, - "pdfBugEnabled": false, - "disableRange": false, - "disableStream": false, - "disableAutoFetch": false, - "disableFontFace": false, - "textLayerMode": 1, - "useOnlyCssZoom": false, - "externalLinkTarget": 0, - "renderer": "canvas", - "renderInteractiveForms": false, - "enablePrintAutoRotate": false, - "disablePageMode": false, - "disablePageLabels": false -} - - /* eslint-enable semi */ - var defaultBranch = Services.prefs.getDefaultBranch(PREF_PREFIX + "."); var defaultValue; - for (var key in DEFAULT_PREFERENCES) { - defaultValue = DEFAULT_PREFERENCES[key]; + for (var key in PdfJsDefaultPreferences) { + defaultValue = PdfJsDefaultPreferences[key]; switch (typeof defaultValue) { case "boolean": defaultBranch.setBoolPref(key, defaultValue); diff --git a/browser/extensions/pdfjs/content/PdfJsDefaultPreferences.jsm b/browser/extensions/pdfjs/content/PdfJsDefaultPreferences.jsm new file mode 100644 index 000000000000..a5b5744d1f5e --- /dev/null +++ b/browser/extensions/pdfjs/content/PdfJsDefaultPreferences.jsm @@ -0,0 +1,41 @@ +/* Copyright 2017 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// THIS FILE IS AUTOMATICALLY GENERATED, DO NOT EDIT MANUALLY! +// + +"use strict"; +var EXPORTED_SYMBOLS = ["PdfJsDefaultPreferences"]; +var PdfJsDefaultPreferences = Object.freeze({ + "showPreviousViewOnLoad": true, + "defaultZoomValue": "", + "sidebarViewOnLoad": 0, + "cursorToolOnLoad": 0, + "enableWebGL": false, + "pdfBugEnabled": false, + "disableRange": false, + "disableStream": false, + "disableAutoFetch": false, + "disableFontFace": false, + "textLayerMode": 1, + "useOnlyCssZoom": false, + "externalLinkTarget": 0, + "renderer": "canvas", + "renderInteractiveForms": false, + "enablePrintAutoRotate": false, + "disablePageMode": false, + "disablePageLabels": false +}); diff --git a/browser/extensions/pdfjs/content/PdfjsChromeUtils.jsm b/browser/extensions/pdfjs/content/PdfjsChromeUtils.jsm index 829916fe691a..fbe3edb4e6d0 100644 --- a/browser/extensions/pdfjs/content/PdfjsChromeUtils.jsm +++ b/browser/extensions/pdfjs/content/PdfjsChromeUtils.jsm @@ -23,40 +23,18 @@ const PDF_CONTENT_TYPE = "application/pdf"; ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); ChromeUtils.import("resource://gre/modules/Services.jsm"); +ChromeUtils.defineModuleGetter(this, "PdfJsDefaultPreferences", + "resource://pdf.js/PdfJsDefaultPreferences.jsm"); + var Svc = {}; XPCOMUtils.defineLazyServiceGetter(Svc, "mime", "@mozilla.org/mime;1", "nsIMIMEService"); -/* eslint-disable semi */ -var DEFAULT_PREFERENCES = -{ - "showPreviousViewOnLoad": true, - "defaultZoomValue": "", - "sidebarViewOnLoad": 0, - "cursorToolOnLoad": 0, - "enableWebGL": false, - "pdfBugEnabled": false, - "disableRange": false, - "disableStream": false, - "disableAutoFetch": false, - "disableFontFace": false, - "textLayerMode": 1, - "useOnlyCssZoom": false, - "externalLinkTarget": 0, - "renderer": "canvas", - "renderInteractiveForms": false, - "enablePrintAutoRotate": false, - "disablePageMode": false, - "disablePageLabels": false -} - -/* eslint-enable semi */ - var PdfjsChromeUtils = { // For security purposes when running remote, we restrict preferences // content can access. - _allowedPrefNames: Object.keys(DEFAULT_PREFERENCES), + _allowedPrefNames: Object.keys(PdfJsDefaultPreferences), _ppmm: null, _mmg: null, diff --git a/browser/extensions/pdfjs/content/build/pdf.js b/browser/extensions/pdfjs/content/build/pdf.js index a3e1ed15cd2e..b964295abc19 100644 --- a/browser/extensions/pdfjs/content/build/pdf.js +++ b/browser/extensions/pdfjs/content/build/pdf.js @@ -28,7 +28,7 @@ else if(typeof exports === 'object') exports["pdfjs-dist/build/pdf"] = factory(); else - root["pdfjs-dist/build/pdf"] = root.pdfjsDistBuildPdf = factory(); + root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); })(typeof self !== 'undefined' ? self : this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache @@ -92,7 +92,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ __w_pdfjs_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 9); +/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 5); /******/ }) /************************************************************************/ /******/ ([ @@ -105,11 +105,11 @@ return /******/ (function(modules) { // webpackBootstrap Object.defineProperty(exports, "__esModule", { value: true }); -exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.createBlob = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.PageViewport = exports.NotImplementedException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.MessageHandler = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined; +exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.createBlob = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.PageViewport = exports.NotImplementedException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.MessageHandler = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined; -__w_pdfjs_require__(10); +__w_pdfjs_require__(6); -var _streams_polyfill = __w_pdfjs_require__(11); +var _streams_polyfill = __w_pdfjs_require__(7); var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; const NativeImageDecoding = { @@ -627,6 +627,29 @@ function isEvalSupported() { return false; } } +function getInheritableProperty({ dict, key, getArray = false, stopWhenFound = true }) { + const LOOP_LIMIT = 100; + let loopCount = 0; + let values; + while (dict) { + const value = getArray ? dict.getArray(key) : dict.get(key); + if (value !== undefined) { + if (stopWhenFound) { + return value; + } + if (!values) { + values = []; + } + values.push(value); + } + if (++loopCount > LOOP_LIMIT) { + warn(`getInheritableProperty: maximum loop count exceeded for "${key}"`); + break; + } + dict = dict.get('Parent'); + } + return values; +} var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; var Util = function UtilClosure() { function Util() {} @@ -742,15 +765,6 @@ var Util = function UtilClosure() { obj1[key] = obj2[key]; } }; - Util.getInheritableProperty = function Util_getInheritableProperty(dict, name, getArray) { - while (dict && !dict.has(name)) { - dict = dict.get('Parent'); - } - if (!dict) { - return null; - } - return getArray ? dict.getArray(name) : dict.get(name); - }; Util.inherit = function Util_inherit(sub, base, prototype) { sub.prototype = Object.create(base.prototype); sub.prototype.constructor = sub; @@ -1349,6 +1363,7 @@ exports.createBlob = createBlob; exports.createPromiseCapability = createPromiseCapability; exports.createObjectURL = createObjectURL; exports.deprecated = deprecated; +exports.getInheritableProperty = getInheritableProperty; exports.getLookupTableFactory = getLookupTableFactory; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; @@ -1388,16 +1403,10 @@ exports.unreachable = unreachable; Object.defineProperty(exports, "__esModule", { value: true }); -exports.DummyStatTimer = exports.StatTimer = exports.SimpleXMLParser = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.getDefaultSetting = exports.LinkTarget = exports.getFilenameFromUrl = exports.addLinkAttributes = exports.RenderingCancelledException = undefined; +exports.DummyStatTimer = exports.StatTimer = exports.SimpleXMLParser = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.getFilenameFromUrl = exports.addLinkAttributes = exports.RenderingCancelledException = undefined; var _util = __w_pdfjs_require__(0); -var _global_scope = __w_pdfjs_require__(2); - -var _global_scope2 = _interopRequireDefault(_global_scope); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - const DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; const SVG_NS = 'http://www.w3.org/2000/svg'; class DOMCanvasFactory { @@ -1441,7 +1450,7 @@ class DOMCMapReaderFactory { } fetch({ name }) { if (!this.baseUrl) { - return Promise.reject(new Error('CMap baseUrl must be specified, ' + 'see "PDFJS.cMapUrl" (and also "PDFJS.cMapPacked").')); + return Promise.reject(new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.')); } if (!name) { return Promise.reject(new Error('CMap name must be specified.')); @@ -1628,33 +1637,6 @@ function getFilenameFromUrl(url) { var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); return url.substring(url.lastIndexOf('/', end) + 1, end); } -function getDefaultSetting(id) { - var globalSettings = _global_scope2.default.PDFJS; - switch (id) { - case 'pdfBug': - return globalSettings ? globalSettings.pdfBug : false; - case 'disableAutoFetch': - return globalSettings ? globalSettings.disableAutoFetch : false; - case 'disableStream': - return globalSettings ? globalSettings.disableStream : false; - case 'disableRange': - return globalSettings ? globalSettings.disableRange : false; - case 'disableFontFace': - return globalSettings ? globalSettings.disableFontFace : false; - case 'disableCreateObjectURL': - return globalSettings ? globalSettings.disableCreateObjectURL : false; - case 'cMapUrl': - return globalSettings ? globalSettings.cMapUrl : null; - case 'cMapPacked': - return globalSettings ? globalSettings.cMapPacked : false; - case 'maxImageSize': - return globalSettings ? globalSettings.maxImageSize : -1; - case 'isEvalSupported': - return globalSettings ? globalSettings.isEvalSupported : true; - default: - throw new Error('Unknown default setting: ' + id); - } -} class StatTimer { constructor(enable = true) { this.enabled = !!enable; @@ -1716,7 +1698,6 @@ exports.RenderingCancelledException = RenderingCancelledException; exports.addLinkAttributes = addLinkAttributes; exports.getFilenameFromUrl = getFilenameFromUrl; exports.LinkTarget = LinkTarget; -exports.getDefaultSetting = getDefaultSetting; exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; exports.DOMCanvasFactory = DOMCanvasFactory; exports.DOMCMapReaderFactory = DOMCMapReaderFactory; @@ -1744,10 +1725,10 @@ module.exports = typeof window !== 'undefined' && window.Math === Math ? window Object.defineProperty(exports, "__esModule", { value: true }); -const GlobalWorkerOptions = Object.create(null); -GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; -GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? '' : GlobalWorkerOptions.workerSrc; -exports.GlobalWorkerOptions = GlobalWorkerOptions; +let compatibilityParams = Object.create(null); +; +const apiCompatibilityParams = Object.freeze(compatibilityParams); +exports.apiCompatibilityParams = apiCompatibilityParams; /***/ }), /* 4 */ @@ -1759,1469 +1740,10 @@ exports.GlobalWorkerOptions = GlobalWorkerOptions; Object.defineProperty(exports, "__esModule", { value: true }); -exports.build = exports.version = exports.setPDFNetworkStreamFactory = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.getDocument = undefined; - -var _util = __w_pdfjs_require__(0); - -var _dom_utils = __w_pdfjs_require__(1); - -var _font_loader = __w_pdfjs_require__(14); - -var _canvas = __w_pdfjs_require__(15); - -var _global_scope = __w_pdfjs_require__(2); - -var _global_scope2 = _interopRequireDefault(_global_scope); - -var _worker_options = __w_pdfjs_require__(3); - -var _metadata = __w_pdfjs_require__(5); - -var _transport_stream = __w_pdfjs_require__(17); - -var _webgl = __w_pdfjs_require__(18); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var DEFAULT_RANGE_CHUNK_SIZE = 65536; -let isWorkerDisabled = false; -let workerSrc; -const pdfjsFilePath = null; -var fakeWorkerFilesLoader = null; -var useRequireEnsure = false; -; -var createPDFNetworkStream; -function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { - createPDFNetworkStream = pdfNetworkStreamFactory; -} -function getDocument(src) { - var task = new PDFDocumentLoadingTask(); - var source; - if (typeof src === 'string') { - source = { url: src }; - } else if ((0, _util.isArrayBuffer)(src)) { - source = { data: src }; - } else if (src instanceof PDFDataRangeTransport) { - source = { range: src }; - } else { - if (typeof src !== 'object') { - throw new Error('Invalid parameter in getDocument, ' + 'need either Uint8Array, string or a parameter object'); - } - if (!src.url && !src.data && !src.range) { - throw new Error('Invalid parameter object: need either .data, .range or .url'); - } - source = src; - } - var params = {}; - var rangeTransport = null; - let worker = null; - var CMapReaderFactory = _dom_utils.DOMCMapReaderFactory; - for (var key in source) { - if (key === 'url' && typeof window !== 'undefined') { - params[key] = new URL(source[key], window.location).href; - continue; - } else if (key === 'range') { - rangeTransport = source[key]; - continue; - } else if (key === 'worker') { - worker = source[key]; - continue; - } else if (key === 'data' && !(source[key] instanceof Uint8Array)) { - var pdfBytes = source[key]; - if (typeof pdfBytes === 'string') { - params[key] = (0, _util.stringToBytes)(pdfBytes); - } else if (typeof pdfBytes === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) { - params[key] = new Uint8Array(pdfBytes); - } else if ((0, _util.isArrayBuffer)(pdfBytes)) { - params[key] = new Uint8Array(pdfBytes); - } else { - throw new Error('Invalid PDF binary data: either typed array, ' + 'string or array-like object is expected in the ' + 'data property.'); - } - continue; - } else if (key === 'CMapReaderFactory') { - CMapReaderFactory = source[key]; - continue; - } - params[key] = source[key]; - } - params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; - params.ignoreErrors = params.stopAtErrors !== true; - const nativeImageDecoderValues = Object.values(_util.NativeImageDecoding); - if (params.nativeImageDecoderSupport === undefined || !nativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) { - params.nativeImageDecoderSupport = _util.NativeImageDecoding.DECODE; - } - (0, _util.setVerbosityLevel)(params.verbosity); - if (!worker) { - const workerParams = { - postMessageTransfers: params.postMessageTransfers, - verbosity: params.verbosity - }; - let workerPort = _worker_options.GlobalWorkerOptions.workerPort; - if (workerPort) { - workerParams.port = workerPort; - worker = PDFWorker.fromPort(workerParams); - } else { - worker = new PDFWorker(workerParams); - } - task._worker = worker; - } - var docId = task.docId; - worker.promise.then(function () { - if (task.destroyed) { - throw new Error('Loading aborted'); - } - return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) { - if (task.destroyed) { - throw new Error('Loading aborted'); - } - let networkStream; - if (rangeTransport) { - networkStream = new _transport_stream.PDFDataTransportStream(params, rangeTransport); - } else if (!params.data) { - networkStream = createPDFNetworkStream(params); - } - var messageHandler = new _util.MessageHandler(docId, workerId, worker.port); - messageHandler.postMessageTransfers = worker.postMessageTransfers; - var transport = new WorkerTransport(messageHandler, task, networkStream, CMapReaderFactory); - task._transport = transport; - messageHandler.send('Ready', null); - }); - }).catch(task._capability.reject); - return task; -} -function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { - if (worker.destroyed) { - return Promise.reject(new Error('Worker was destroyed')); - } - let apiVersion = '2.0.402'; - source.disableRange = (0, _dom_utils.getDefaultSetting)('disableRange'); - source.disableAutoFetch = (0, _dom_utils.getDefaultSetting)('disableAutoFetch'); - source.disableStream = (0, _dom_utils.getDefaultSetting)('disableStream'); - if (pdfDataRangeTransport) { - source.length = pdfDataRangeTransport.length; - source.initialData = pdfDataRangeTransport.initialData; - } - return worker.messageHandler.sendWithPromise('GetDocRequest', { - docId, - apiVersion, - source: { - data: source.data, - url: source.url, - password: source.password, - disableAutoFetch: source.disableAutoFetch, - rangeChunkSize: source.rangeChunkSize, - length: source.length - }, - maxImageSize: (0, _dom_utils.getDefaultSetting)('maxImageSize'), - disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'), - disableCreateObjectURL: (0, _dom_utils.getDefaultSetting)('disableCreateObjectURL'), - postMessageTransfers: worker.postMessageTransfers, - docBaseUrl: source.docBaseUrl, - nativeImageDecoderSupport: source.nativeImageDecoderSupport, - ignoreErrors: source.ignoreErrors, - isEvalSupported: (0, _dom_utils.getDefaultSetting)('isEvalSupported') - }).then(function (workerId) { - if (worker.destroyed) { - throw new Error('Worker was destroyed'); - } - return workerId; - }); -} -var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { - var nextDocumentId = 0; - function PDFDocumentLoadingTask() { - this._capability = (0, _util.createPromiseCapability)(); - this._transport = null; - this._worker = null; - this.docId = 'd' + nextDocumentId++; - this.destroyed = false; - this.onPassword = null; - this.onProgress = null; - this.onUnsupportedFeature = null; - } - PDFDocumentLoadingTask.prototype = { - get promise() { - return this._capability.promise; - }, - destroy() { - this.destroyed = true; - var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); - return transportDestroyed.then(() => { - this._transport = null; - if (this._worker) { - this._worker.destroy(); - this._worker = null; - } - }); - }, - then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) { - return this.promise.then.apply(this.promise, arguments); - } - }; - return PDFDocumentLoadingTask; -}(); -var PDFDataRangeTransport = function pdfDataRangeTransportClosure() { - function PDFDataRangeTransport(length, initialData) { - this.length = length; - this.initialData = initialData; - this._rangeListeners = []; - this._progressListeners = []; - this._progressiveReadListeners = []; - this._readyCapability = (0, _util.createPromiseCapability)(); - } - PDFDataRangeTransport.prototype = { - addRangeListener: function PDFDataRangeTransport_addRangeListener(listener) { - this._rangeListeners.push(listener); - }, - addProgressListener: function PDFDataRangeTransport_addProgressListener(listener) { - this._progressListeners.push(listener); - }, - addProgressiveReadListener: function PDFDataRangeTransport_addProgressiveReadListener(listener) { - this._progressiveReadListeners.push(listener); - }, - onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) { - var listeners = this._rangeListeners; - for (var i = 0, n = listeners.length; i < n; ++i) { - listeners[i](begin, chunk); - } - }, - onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) { - this._readyCapability.promise.then(() => { - var listeners = this._progressListeners; - for (var i = 0, n = listeners.length; i < n; ++i) { - listeners[i](loaded); - } - }); - }, - onDataProgressiveRead: function PDFDataRangeTransport_onDataProgress(chunk) { - this._readyCapability.promise.then(() => { - var listeners = this._progressiveReadListeners; - for (var i = 0, n = listeners.length; i < n; ++i) { - listeners[i](chunk); - } - }); - }, - transportReady: function PDFDataRangeTransport_transportReady() { - this._readyCapability.resolve(); - }, - requestDataRange: function PDFDataRangeTransport_requestDataRange(begin, end) { - (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange'); - }, - abort: function PDFDataRangeTransport_abort() {} - }; - return PDFDataRangeTransport; -}(); -var PDFDocumentProxy = function PDFDocumentProxyClosure() { - function PDFDocumentProxy(pdfInfo, transport, loadingTask) { - this.pdfInfo = pdfInfo; - this.transport = transport; - this.loadingTask = loadingTask; - } - PDFDocumentProxy.prototype = { - get numPages() { - return this.pdfInfo.numPages; - }, - get fingerprint() { - return this.pdfInfo.fingerprint; - }, - getPage(pageNumber) { - return this.transport.getPage(pageNumber); - }, - getPageIndex: function PDFDocumentProxy_getPageIndex(ref) { - return this.transport.getPageIndex(ref); - }, - getDestinations: function PDFDocumentProxy_getDestinations() { - return this.transport.getDestinations(); - }, - getDestination: function PDFDocumentProxy_getDestination(id) { - return this.transport.getDestination(id); - }, - getPageLabels: function PDFDocumentProxy_getPageLabels() { - return this.transport.getPageLabels(); - }, - getPageMode() { - return this.transport.getPageMode(); - }, - getAttachments: function PDFDocumentProxy_getAttachments() { - return this.transport.getAttachments(); - }, - getJavaScript() { - return this.transport.getJavaScript(); - }, - getOutline: function PDFDocumentProxy_getOutline() { - return this.transport.getOutline(); - }, - getMetadata: function PDFDocumentProxy_getMetadata() { - return this.transport.getMetadata(); - }, - getData: function PDFDocumentProxy_getData() { - return this.transport.getData(); - }, - getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() { - return this.transport.downloadInfoCapability.promise; - }, - getStats: function PDFDocumentProxy_getStats() { - return this.transport.getStats(); - }, - cleanup: function PDFDocumentProxy_cleanup() { - this.transport.startCleanup(); - }, - destroy: function PDFDocumentProxy_destroy() { - return this.loadingTask.destroy(); - } - }; - return PDFDocumentProxy; -}(); -var PDFPageProxy = function PDFPageProxyClosure() { - function PDFPageProxy(pageIndex, pageInfo, transport) { - this.pageIndex = pageIndex; - this.pageInfo = pageInfo; - this.transport = transport; - this._stats = (0, _dom_utils.getDefaultSetting)('pdfBug') ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer; - this.commonObjs = transport.commonObjs; - this.objs = new PDFObjects(); - this.cleanupAfterRender = false; - this.pendingCleanup = false; - this.intentStates = Object.create(null); - this.destroyed = false; - } - PDFPageProxy.prototype = { - get pageNumber() { - return this.pageIndex + 1; - }, - get rotate() { - return this.pageInfo.rotate; - }, - get ref() { - return this.pageInfo.ref; - }, - get userUnit() { - return this.pageInfo.userUnit; - }, - get view() { - return this.pageInfo.view; - }, - getViewport(scale, rotate = this.rotate, dontFlip = false) { - return new _util.PageViewport(this.view, scale, rotate, 0, 0, dontFlip); - }, - getAnnotations: function PDFPageProxy_getAnnotations(params) { - var intent = params && params.intent || null; - if (!this.annotationsPromise || this.annotationsIntent !== intent) { - this.annotationsPromise = this.transport.getAnnotations(this.pageIndex, intent); - this.annotationsIntent = intent; - } - return this.annotationsPromise; - }, - render: function PDFPageProxy_render(params) { - let stats = this._stats; - stats.time('Overall'); - this.pendingCleanup = false; - var renderingIntent = params.intent === 'print' ? 'print' : 'display'; - var canvasFactory = params.canvasFactory || new _dom_utils.DOMCanvasFactory(); - let webGLContext = new _webgl.WebGLContext({ enable: params.enableWebGL }); - if (!this.intentStates[renderingIntent]) { - this.intentStates[renderingIntent] = Object.create(null); - } - var intentState = this.intentStates[renderingIntent]; - if (!intentState.displayReadyCapability) { - intentState.receivingOperatorList = true; - intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; - stats.time('Page Request'); - this.transport.messageHandler.send('RenderPageRequest', { - pageIndex: this.pageNumber - 1, - intent: renderingIntent, - renderInteractiveForms: params.renderInteractiveForms === true - }); - } - var complete = error => { - var i = intentState.renderTasks.indexOf(internalRenderTask); - if (i >= 0) { - intentState.renderTasks.splice(i, 1); - } - if (this.cleanupAfterRender) { - this.pendingCleanup = true; - } - this._tryCleanup(); - if (error) { - internalRenderTask.capability.reject(error); - } else { - internalRenderTask.capability.resolve(); - } - stats.timeEnd('Rendering'); - stats.timeEnd('Overall'); - }; - var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext); - internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print'; - if (!intentState.renderTasks) { - intentState.renderTasks = []; - } - intentState.renderTasks.push(internalRenderTask); - var renderTask = internalRenderTask.task; - intentState.displayReadyCapability.promise.then(transparency => { - if (this.pendingCleanup) { - complete(); - return; - } - stats.time('Rendering'); - internalRenderTask.initializeGraphics(transparency); - internalRenderTask.operatorListChanged(); - }).catch(complete); - return renderTask; - }, - getOperatorList: function PDFPageProxy_getOperatorList() { - function operatorListChanged() { - if (intentState.operatorList.lastChunk) { - intentState.opListReadCapability.resolve(intentState.operatorList); - var i = intentState.renderTasks.indexOf(opListTask); - if (i >= 0) { - intentState.renderTasks.splice(i, 1); - } - } - } - var renderingIntent = 'oplist'; - if (!this.intentStates[renderingIntent]) { - this.intentStates[renderingIntent] = Object.create(null); - } - var intentState = this.intentStates[renderingIntent]; - var opListTask; - if (!intentState.opListReadCapability) { - opListTask = {}; - opListTask.operatorListChanged = operatorListChanged; - intentState.receivingOperatorList = true; - intentState.opListReadCapability = (0, _util.createPromiseCapability)(); - intentState.renderTasks = []; - intentState.renderTasks.push(opListTask); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; - this.transport.messageHandler.send('RenderPageRequest', { - pageIndex: this.pageIndex, - intent: renderingIntent - }); - } - return intentState.opListReadCapability.promise; - }, - streamTextContent(params = {}) { - const TEXT_CONTENT_CHUNK_SIZE = 100; - return this.transport.messageHandler.sendWithStream('GetTextContent', { - pageIndex: this.pageNumber - 1, - normalizeWhitespace: params.normalizeWhitespace === true, - combineTextItems: params.disableCombineTextItems !== true - }, { - highWaterMark: TEXT_CONTENT_CHUNK_SIZE, - size(textContent) { - return textContent.items.length; - } - }); - }, - getTextContent: function PDFPageProxy_getTextContent(params) { - params = params || {}; - let readableStream = this.streamTextContent(params); - return new Promise(function (resolve, reject) { - function pump() { - reader.read().then(function ({ value, done }) { - if (done) { - resolve(textContent); - return; - } - _util.Util.extendObj(textContent.styles, value.styles); - _util.Util.appendToArray(textContent.items, value.items); - pump(); - }, reject); - } - let reader = readableStream.getReader(); - let textContent = { - items: [], - styles: Object.create(null) - }; - pump(); - }); - }, - _destroy: function PDFPageProxy_destroy() { - this.destroyed = true; - this.transport.pageCache[this.pageIndex] = null; - var waitOn = []; - Object.keys(this.intentStates).forEach(function (intent) { - if (intent === 'oplist') { - return; - } - var intentState = this.intentStates[intent]; - intentState.renderTasks.forEach(function (renderTask) { - var renderCompleted = renderTask.capability.promise.catch(function () {}); - waitOn.push(renderCompleted); - renderTask.cancel(); - }); - }, this); - this.objs.clear(); - this.annotationsPromise = null; - this.pendingCleanup = false; - return Promise.all(waitOn); - }, - cleanup(resetStats = false) { - this.pendingCleanup = true; - this._tryCleanup(resetStats); - }, - _tryCleanup(resetStats = false) { - if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) { - var intentState = this.intentStates[intent]; - return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList; - }, this)) { - return; - } - Object.keys(this.intentStates).forEach(function (intent) { - delete this.intentStates[intent]; - }, this); - this.objs.clear(); - this.annotationsPromise = null; - if (resetStats && this._stats instanceof _dom_utils.StatTimer) { - this._stats = new _dom_utils.StatTimer(); - } - this.pendingCleanup = false; - }, - _startRenderPage: function PDFPageProxy_startRenderPage(transparency, intent) { - var intentState = this.intentStates[intent]; - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.resolve(transparency); - } - }, - _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, intent) { - var intentState = this.intentStates[intent]; - var i, ii; - for (i = 0, ii = operatorListChunk.length; i < ii; i++) { - intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); - intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); - } - intentState.operatorList.lastChunk = operatorListChunk.lastChunk; - for (i = 0; i < intentState.renderTasks.length; i++) { - intentState.renderTasks[i].operatorListChanged(); - } - if (operatorListChunk.lastChunk) { - intentState.receivingOperatorList = false; - this._tryCleanup(); - } - }, - get stats() { - return this._stats instanceof _dom_utils.StatTimer ? this._stats : null; - } - }; - return PDFPageProxy; -}(); -class LoopbackPort { - constructor(defer) { - this._listeners = []; - this._defer = defer; - this._deferred = Promise.resolve(undefined); - } - postMessage(obj, transfers) { - function cloneValue(value) { - if (typeof value !== 'object' || value === null) { - return value; - } - if (cloned.has(value)) { - return cloned.get(value); - } - var result; - var buffer; - if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { - var transferable = transfers && transfers.includes(buffer); - if (value === buffer) { - result = value; - } else if (transferable) { - result = new value.constructor(buffer, value.byteOffset, value.byteLength); - } else { - result = new value.constructor(value); - } - cloned.set(value, result); - return result; - } - result = Array.isArray(value) ? [] : {}; - cloned.set(value, result); - for (var i in value) { - var desc, - p = value; - while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { - p = Object.getPrototypeOf(p); - } - if (typeof desc.value === 'undefined' || typeof desc.value === 'function') { - continue; - } - result[i] = cloneValue(desc.value); - } - return result; - } - if (!this._defer) { - this._listeners.forEach(function (listener) { - listener.call(this, { data: obj }); - }, this); - return; - } - var cloned = new WeakMap(); - var e = { data: cloneValue(obj) }; - this._deferred.then(() => { - this._listeners.forEach(function (listener) { - listener.call(this, e); - }, this); - }); - } - addEventListener(name, listener) { - this._listeners.push(listener); - } - removeEventListener(name, listener) { - var i = this._listeners.indexOf(listener); - this._listeners.splice(i, 1); - } - terminate() { - this._listeners = []; - } -} -var PDFWorker = function PDFWorkerClosure() { - let nextFakeWorkerId = 0; - function getWorkerSrc() { - if (_worker_options.GlobalWorkerOptions.workerSrc) { - return _worker_options.GlobalWorkerOptions.workerSrc; - } - if (typeof workerSrc !== 'undefined') { - return workerSrc; - } - throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); - } - function getMainThreadWorkerMessageHandler() { - if (typeof window === 'undefined') { - return null; - } - return window.pdfjsDistBuildPdfWorker && window.pdfjsDistBuildPdfWorker.WorkerMessageHandler; - } - let fakeWorkerFilesLoadedCapability; - function setupFakeWorkerGlobal() { - if (fakeWorkerFilesLoadedCapability) { - return fakeWorkerFilesLoadedCapability.promise; - } - fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)(); - let mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); - if (mainWorkerMessageHandler) { - fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler); - return fakeWorkerFilesLoadedCapability.promise; - } - let loader = fakeWorkerFilesLoader || function (callback) { - _util.Util.loadScript(getWorkerSrc(), function () { - callback(window.pdfjsDistBuildPdfWorker.WorkerMessageHandler); - }); - }; - loader(fakeWorkerFilesLoadedCapability.resolve); - return fakeWorkerFilesLoadedCapability.promise; - } - function createCDNWrapper(url) { - var wrapper = 'importScripts(\'' + url + '\');'; - return URL.createObjectURL(new Blob([wrapper])); - } - let pdfWorkerPorts = new WeakMap(); - function PDFWorker({ name = null, port = null, postMessageTransfers = true, verbosity = null } = {}) { - if (port && pdfWorkerPorts.has(port)) { - throw new Error('Cannot use more than one PDFWorker per port'); - } - this.name = name; - this.destroyed = false; - this.postMessageTransfers = postMessageTransfers !== false; - this.verbosity = (0, _util.isNum)(verbosity) ? verbosity : (0, _util.getVerbosityLevel)(); - this._readyCapability = (0, _util.createPromiseCapability)(); - this._port = null; - this._webWorker = null; - this._messageHandler = null; - if (port) { - pdfWorkerPorts.set(port, this); - this._initializeFromPort(port); - return; - } - this._initialize(); - } - PDFWorker.prototype = { - get promise() { - return this._readyCapability.promise; - }, - get port() { - return this._port; - }, - get messageHandler() { - return this._messageHandler; - }, - _initializeFromPort: function PDFWorker_initializeFromPort(port) { - this._port = port; - this._messageHandler = new _util.MessageHandler('main', 'worker', port); - this._messageHandler.on('ready', function () {}); - this._readyCapability.resolve(); - }, - _initialize: function PDFWorker_initialize() { - if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { - var workerSrc = getWorkerSrc(); - try { - var worker = new Worker(workerSrc); - var messageHandler = new _util.MessageHandler('main', 'worker', worker); - var terminateEarly = () => { - worker.removeEventListener('error', onWorkerError); - messageHandler.destroy(); - worker.terminate(); - if (this.destroyed) { - this._readyCapability.reject(new Error('Worker was destroyed')); - } else { - this._setupFakeWorker(); - } - }; - var onWorkerError = () => { - if (!this._webWorker) { - terminateEarly(); - } - }; - worker.addEventListener('error', onWorkerError); - messageHandler.on('test', data => { - worker.removeEventListener('error', onWorkerError); - if (this.destroyed) { - terminateEarly(); - return; - } - var supportTypedArray = data && data.supportTypedArray; - if (supportTypedArray) { - this._messageHandler = messageHandler; - this._port = worker; - this._webWorker = worker; - if (!data.supportTransfers) { - this.postMessageTransfers = false; - } - this._readyCapability.resolve(); - messageHandler.send('configure', { verbosity: this.verbosity }); - } else { - this._setupFakeWorker(); - messageHandler.destroy(); - worker.terminate(); - } - }); - messageHandler.on('ready', data => { - worker.removeEventListener('error', onWorkerError); - if (this.destroyed) { - terminateEarly(); - return; - } - try { - sendTest(); - } catch (e) { - this._setupFakeWorker(); - } - }); - const sendTest = () => { - let testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]); - try { - messageHandler.send('test', testObj, [testObj.buffer]); - } catch (ex) { - (0, _util.info)('Cannot use postMessage transfers'); - testObj[0] = 0; - messageHandler.send('test', testObj); - } - }; - sendTest(); - return; - } catch (e) { - (0, _util.info)('The worker has been disabled.'); - } - } - this._setupFakeWorker(); - }, - _setupFakeWorker: function PDFWorker_setupFakeWorker() { - if (!isWorkerDisabled) { - (0, _util.warn)('Setting up fake worker.'); - isWorkerDisabled = true; - } - setupFakeWorkerGlobal().then(WorkerMessageHandler => { - if (this.destroyed) { - this._readyCapability.reject(new Error('Worker was destroyed')); - return; - } - var isTypedArraysPresent = Uint8Array !== Float32Array; - var port = new LoopbackPort(isTypedArraysPresent); - this._port = port; - var id = 'fake' + nextFakeWorkerId++; - var workerHandler = new _util.MessageHandler(id + '_worker', id, port); - WorkerMessageHandler.setup(workerHandler, port); - var messageHandler = new _util.MessageHandler(id, id + '_worker', port); - this._messageHandler = messageHandler; - this._readyCapability.resolve(); - }); - }, - destroy: function PDFWorker_destroy() { - this.destroyed = true; - if (this._webWorker) { - this._webWorker.terminate(); - this._webWorker = null; - } - pdfWorkerPorts.delete(this._port); - this._port = null; - if (this._messageHandler) { - this._messageHandler.destroy(); - this._messageHandler = null; - } - } - }; - PDFWorker.fromPort = function (params) { - if (pdfWorkerPorts.has(params.port)) { - return pdfWorkerPorts.get(params.port); - } - return new PDFWorker(params); - }; - PDFWorker.getWorkerSrc = function () { - return getWorkerSrc(); - }; - return PDFWorker; -}(); -var WorkerTransport = function WorkerTransportClosure() { - function WorkerTransport(messageHandler, loadingTask, networkStream, CMapReaderFactory) { - this.messageHandler = messageHandler; - this.loadingTask = loadingTask; - this.commonObjs = new PDFObjects(); - this.fontLoader = new _font_loader.FontLoader(loadingTask.docId); - this.CMapReaderFactory = new CMapReaderFactory({ - baseUrl: (0, _dom_utils.getDefaultSetting)('cMapUrl'), - isCompressed: (0, _dom_utils.getDefaultSetting)('cMapPacked') - }); - this.destroyed = false; - this.destroyCapability = null; - this._passwordCapability = null; - this._networkStream = networkStream; - this._fullReader = null; - this._lastProgress = null; - this.pageCache = []; - this.pagePromises = []; - this.downloadInfoCapability = (0, _util.createPromiseCapability)(); - this.setupMessageHandler(); - } - WorkerTransport.prototype = { - destroy: function WorkerTransport_destroy() { - if (this.destroyCapability) { - return this.destroyCapability.promise; - } - this.destroyed = true; - this.destroyCapability = (0, _util.createPromiseCapability)(); - if (this._passwordCapability) { - this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback')); - } - var waitOn = []; - this.pageCache.forEach(function (page) { - if (page) { - waitOn.push(page._destroy()); - } - }); - this.pageCache = []; - this.pagePromises = []; - var terminated = this.messageHandler.sendWithPromise('Terminate', null); - waitOn.push(terminated); - Promise.all(waitOn).then(() => { - this.fontLoader.clear(); - if (this._networkStream) { - this._networkStream.cancelAllRequests(); - } - if (this.messageHandler) { - this.messageHandler.destroy(); - this.messageHandler = null; - } - this.destroyCapability.resolve(); - }, this.destroyCapability.reject); - return this.destroyCapability.promise; - }, - setupMessageHandler: function WorkerTransport_setupMessageHandler() { - var messageHandler = this.messageHandler; - var loadingTask = this.loadingTask; - messageHandler.on('GetReader', function (data, sink) { - (0, _util.assert)(this._networkStream); - this._fullReader = this._networkStream.getFullReader(); - this._fullReader.onProgress = evt => { - this._lastProgress = { - loaded: evt.loaded, - total: evt.total - }; - }; - sink.onPull = () => { - this._fullReader.read().then(function ({ value, done }) { - if (done) { - sink.close(); - return; - } - (0, _util.assert)((0, _util.isArrayBuffer)(value)); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - sink.onCancel = reason => { - this._fullReader.cancel(reason); - }; - }, this); - messageHandler.on('ReaderHeadersReady', function (data) { - let headersCapability = (0, _util.createPromiseCapability)(); - let fullReader = this._fullReader; - fullReader.headersReady.then(() => { - if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { - if (this._lastProgress) { - let loadingTask = this.loadingTask; - if (loadingTask.onProgress) { - loadingTask.onProgress(this._lastProgress); - } - } - fullReader.onProgress = evt => { - let loadingTask = this.loadingTask; - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: evt.loaded, - total: evt.total - }); - } - }; - } - headersCapability.resolve({ - isStreamingSupported: fullReader.isStreamingSupported, - isRangeSupported: fullReader.isRangeSupported, - contentLength: fullReader.contentLength - }); - }, headersCapability.reject); - return headersCapability.promise; - }, this); - messageHandler.on('GetRangeReader', function (data, sink) { - (0, _util.assert)(this._networkStream); - let _rangeReader = this._networkStream.getRangeReader(data.begin, data.end); - sink.onPull = () => { - _rangeReader.read().then(function ({ value, done }) { - if (done) { - sink.close(); - return; - } - (0, _util.assert)((0, _util.isArrayBuffer)(value)); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - sink.onCancel = reason => { - _rangeReader.cancel(reason); - }; - }, this); - messageHandler.on('GetDoc', function transportDoc({ pdfInfo }) { - this.numPages = pdfInfo.numPages; - var loadingTask = this.loadingTask; - var pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask); - this.pdfDocument = pdfDocument; - loadingTask._capability.resolve(pdfDocument); - }, this); - messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) { - this._passwordCapability = (0, _util.createPromiseCapability)(); - if (loadingTask.onPassword) { - var updatePassword = password => { - this._passwordCapability.resolve({ password }); - }; - loadingTask.onPassword(updatePassword, exception.code); - } else { - this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); - } - return this._passwordCapability.promise; - }, this); - messageHandler.on('PasswordException', function transportPasswordException(exception) { - loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code)); - }, this); - messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) { - this.loadingTask._capability.reject(new _util.InvalidPDFException(exception.message)); - }, this); - messageHandler.on('MissingPDF', function transportMissingPDF(exception) { - this.loadingTask._capability.reject(new _util.MissingPDFException(exception.message)); - }, this); - messageHandler.on('UnexpectedResponse', function transportUnexpectedResponse(exception) { - this.loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status)); - }, this); - messageHandler.on('UnknownError', function transportUnknownError(exception) { - this.loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details)); - }, this); - messageHandler.on('DataLoaded', function transportPage(data) { - this.downloadInfoCapability.resolve(data); - }, this); - messageHandler.on('PDFManagerReady', function transportPage(data) {}, this); - messageHandler.on('StartRenderPage', function transportRender(data) { - if (this.destroyed) { - return; - } - var page = this.pageCache[data.pageIndex]; - page._stats.timeEnd('Page Request'); - page._startRenderPage(data.transparency, data.intent); - }, this); - messageHandler.on('RenderPageChunk', function transportRender(data) { - if (this.destroyed) { - return; - } - var page = this.pageCache[data.pageIndex]; - page._renderPageChunk(data.operatorList, data.intent); - }, this); - messageHandler.on('commonobj', function transportObj(data) { - if (this.destroyed) { - return; - } - var id = data[0]; - var type = data[1]; - if (this.commonObjs.hasData(id)) { - return; - } - switch (type) { - case 'Font': - var exportedData = data[2]; - if ('error' in exportedData) { - var exportedError = exportedData.error; - (0, _util.warn)('Error during font loading: ' + exportedError); - this.commonObjs.resolve(id, exportedError); - break; - } - var fontRegistry = null; - if ((0, _dom_utils.getDefaultSetting)('pdfBug') && _global_scope2.default.FontInspector && _global_scope2.default['FontInspector'].enabled) { - fontRegistry = { - registerFont(font, url) { - _global_scope2.default['FontInspector'].fontAdded(font, url); - } - }; - } - var font = new _font_loader.FontFaceObject(exportedData, { - isEvalSupported: (0, _dom_utils.getDefaultSetting)('isEvalSupported'), - disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'), - fontRegistry - }); - var fontReady = fontObjs => { - this.commonObjs.resolve(id, font); - }; - this.fontLoader.bind([font], fontReady); - break; - case 'FontPath': - this.commonObjs.resolve(id, data[2]); - break; - default: - throw new Error(`Got unknown common object type ${type}`); - } - }, this); - messageHandler.on('obj', function transportObj(data) { - if (this.destroyed) { - return; - } - var id = data[0]; - var pageIndex = data[1]; - var type = data[2]; - var pageProxy = this.pageCache[pageIndex]; - var imageData; - if (pageProxy.objs.hasData(id)) { - return; - } - switch (type) { - case 'JpegStream': - imageData = data[3]; - return new Promise((resolve, reject) => { - const img = new Image(); - img.onload = function () { - resolve(img); - }; - img.onerror = function () { - reject(new Error('Error during JPEG image loading')); - }; - img.src = imageData; - }).then(img => { - pageProxy.objs.resolve(id, img); - }); - case 'Image': - imageData = data[3]; - pageProxy.objs.resolve(id, imageData); - var MAX_IMAGE_SIZE_TO_STORE = 8000000; - if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { - pageProxy.cleanupAfterRender = true; - } - break; - default: - throw new Error(`Got unknown object type ${type}`); - } - }, this); - messageHandler.on('DocProgress', function transportDocProgress(data) { - if (this.destroyed) { - return; - } - var loadingTask = this.loadingTask; - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: data.loaded, - total: data.total - }); - } - }, this); - messageHandler.on('PageError', function transportError(data) { - if (this.destroyed) { - return; - } - var page = this.pageCache[data.pageNum - 1]; - var intentState = page.intentStates[data.intent]; - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.reject(data.error); - } else { - throw new Error(data.error); - } - if (intentState.operatorList) { - intentState.operatorList.lastChunk = true; - for (var i = 0; i < intentState.renderTasks.length; i++) { - intentState.renderTasks[i].operatorListChanged(); - } - } - }, this); - messageHandler.on('UnsupportedFeature', function (data) { - if (this.destroyed) { - return; - } - let loadingTask = this.loadingTask; - if (loadingTask.onUnsupportedFeature) { - loadingTask.onUnsupportedFeature(data.featureId); - } - }, this); - messageHandler.on('JpegDecode', function (data) { - if (this.destroyed) { - return Promise.reject(new Error('Worker was destroyed')); - } - if (typeof document === 'undefined') { - return Promise.reject(new Error('"document" is not defined.')); - } - var imageUrl = data[0]; - var components = data[1]; - if (components !== 3 && components !== 1) { - return Promise.reject(new Error('Only 3 components or 1 component can be returned')); - } - return new Promise(function (resolve, reject) { - var img = new Image(); - img.onload = function () { - var width = img.width; - var height = img.height; - var size = width * height; - var rgbaLength = size * 4; - var buf = new Uint8Array(size * components); - var tmpCanvas = document.createElement('canvas'); - tmpCanvas.width = width; - tmpCanvas.height = height; - var tmpCtx = tmpCanvas.getContext('2d'); - tmpCtx.drawImage(img, 0, 0); - var data = tmpCtx.getImageData(0, 0, width, height).data; - var i, j; - if (components === 3) { - for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) { - buf[j] = data[i]; - buf[j + 1] = data[i + 1]; - buf[j + 2] = data[i + 2]; - } - } else if (components === 1) { - for (i = 0, j = 0; i < rgbaLength; i += 4, j++) { - buf[j] = data[i]; - } - } - resolve({ - data: buf, - width, - height - }); - }; - img.onerror = function () { - reject(new Error('JpegDecode failed to load image')); - }; - img.src = imageUrl; - }); - }, this); - messageHandler.on('FetchBuiltInCMap', function (data) { - if (this.destroyed) { - return Promise.reject(new Error('Worker was destroyed')); - } - return this.CMapReaderFactory.fetch({ name: data.name }); - }, this); - }, - getData: function WorkerTransport_getData() { - return this.messageHandler.sendWithPromise('GetData', null); - }, - getPage(pageNumber) { - if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) { - return Promise.reject(new Error('Invalid page request')); - } - var pageIndex = pageNumber - 1; - if (pageIndex in this.pagePromises) { - return this.pagePromises[pageIndex]; - } - var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex }).then(pageInfo => { - if (this.destroyed) { - throw new Error('Transport destroyed'); - } - var page = new PDFPageProxy(pageIndex, pageInfo, this); - this.pageCache[pageIndex] = page; - return page; - }); - this.pagePromises[pageIndex] = promise; - return promise; - }, - getPageIndex: function WorkerTransport_getPageIndexByRef(ref) { - return this.messageHandler.sendWithPromise('GetPageIndex', { ref }).catch(function (reason) { - return Promise.reject(new Error(reason)); - }); - }, - getAnnotations: function WorkerTransport_getAnnotations(pageIndex, intent) { - return this.messageHandler.sendWithPromise('GetAnnotations', { - pageIndex, - intent - }); - }, - getDestinations: function WorkerTransport_getDestinations() { - return this.messageHandler.sendWithPromise('GetDestinations', null); - }, - getDestination: function WorkerTransport_getDestination(id) { - return this.messageHandler.sendWithPromise('GetDestination', { id }); - }, - getPageLabels: function WorkerTransport_getPageLabels() { - return this.messageHandler.sendWithPromise('GetPageLabels', null); - }, - getPageMode() { - return this.messageHandler.sendWithPromise('GetPageMode', null); - }, - getAttachments: function WorkerTransport_getAttachments() { - return this.messageHandler.sendWithPromise('GetAttachments', null); - }, - getJavaScript: function WorkerTransport_getJavaScript() { - return this.messageHandler.sendWithPromise('GetJavaScript', null); - }, - getOutline: function WorkerTransport_getOutline() { - return this.messageHandler.sendWithPromise('GetOutline', null); - }, - getMetadata: function WorkerTransport_getMetadata() { - return this.messageHandler.sendWithPromise('GetMetadata', null).then(results => { - return { - info: results[0], - metadata: results[1] ? new _metadata.Metadata(results[1]) : null, - contentDispositionFilename: this._fullReader ? this._fullReader.filename : null - }; - }); - }, - getStats: function WorkerTransport_getStats() { - return this.messageHandler.sendWithPromise('GetStats', null); - }, - startCleanup: function WorkerTransport_startCleanup() { - this.messageHandler.sendWithPromise('Cleanup', null).then(() => { - for (var i = 0, ii = this.pageCache.length; i < ii; i++) { - var page = this.pageCache[i]; - if (page) { - page.cleanup(); - } - } - this.commonObjs.clear(); - this.fontLoader.clear(); - }); - } - }; - return WorkerTransport; -}(); -var PDFObjects = function PDFObjectsClosure() { - function PDFObjects() { - this.objs = Object.create(null); - } - PDFObjects.prototype = { - ensureObj: function PDFObjects_ensureObj(objId) { - if (this.objs[objId]) { - return this.objs[objId]; - } - var obj = { - capability: (0, _util.createPromiseCapability)(), - data: null, - resolved: false - }; - this.objs[objId] = obj; - return obj; - }, - get: function PDFObjects_get(objId, callback) { - if (callback) { - this.ensureObj(objId).capability.promise.then(callback); - return null; - } - var obj = this.objs[objId]; - if (!obj || !obj.resolved) { - throw new Error(`Requesting object that isn't resolved yet ${objId}`); - } - return obj.data; - }, - resolve: function PDFObjects_resolve(objId, data) { - var obj = this.ensureObj(objId); - obj.resolved = true; - obj.data = data; - obj.capability.resolve(data); - }, - isResolved: function PDFObjects_isResolved(objId) { - var objs = this.objs; - if (!objs[objId]) { - return false; - } - return objs[objId].resolved; - }, - hasData: function PDFObjects_hasData(objId) { - return this.isResolved(objId); - }, - getData: function PDFObjects_getData(objId) { - var objs = this.objs; - if (!objs[objId] || !objs[objId].resolved) { - return null; - } - return objs[objId].data; - }, - clear: function PDFObjects_clear() { - this.objs = Object.create(null); - } - }; - return PDFObjects; -}(); -var RenderTask = function RenderTaskClosure() { - function RenderTask(internalRenderTask) { - this._internalRenderTask = internalRenderTask; - this.onContinue = null; - } - RenderTask.prototype = { - get promise() { - return this._internalRenderTask.capability.promise; - }, - cancel: function RenderTask_cancel() { - this._internalRenderTask.cancel(); - }, - then: function RenderTask_then(onFulfilled, onRejected) { - return this.promise.then.apply(this.promise, arguments); - } - }; - return RenderTask; -}(); -var InternalRenderTask = function InternalRenderTaskClosure() { - let canvasInRendering = new WeakMap(); - function InternalRenderTask(callback, params, objs, commonObjs, operatorList, pageNumber, canvasFactory, webGLContext) { - this.callback = callback; - this.params = params; - this.objs = objs; - this.commonObjs = commonObjs; - this.operatorListIdx = null; - this.operatorList = operatorList; - this.pageNumber = pageNumber; - this.canvasFactory = canvasFactory; - this.webGLContext = webGLContext; - this.running = false; - this.graphicsReadyCallback = null; - this.graphicsReady = false; - this.useRequestAnimationFrame = false; - this.cancelled = false; - this.capability = (0, _util.createPromiseCapability)(); - this.task = new RenderTask(this); - this._continueBound = this._continue.bind(this); - this._scheduleNextBound = this._scheduleNext.bind(this); - this._nextBound = this._next.bind(this); - this._canvas = params.canvasContext.canvas; - } - InternalRenderTask.prototype = { - initializeGraphics: function InternalRenderTask_initializeGraphics(transparency) { - if (this._canvas) { - if (canvasInRendering.has(this._canvas)) { - throw new Error('Cannot use the same canvas during multiple render() operations. ' + 'Use different canvas or ensure previous operations were ' + 'cancelled or completed.'); - } - canvasInRendering.set(this._canvas, this); - } - if (this.cancelled) { - return; - } - if ((0, _dom_utils.getDefaultSetting)('pdfBug') && _global_scope2.default.StepperManager && _global_scope2.default.StepperManager.enabled) { - this.stepper = _global_scope2.default.StepperManager.create(this.pageNumber - 1); - this.stepper.init(this.operatorList); - this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); - } - var params = this.params; - this.gfx = new _canvas.CanvasGraphics(params.canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, params.imageLayer); - this.gfx.beginDrawing({ - transform: params.transform, - viewport: params.viewport, - transparency, - background: params.background - }); - this.operatorListIdx = 0; - this.graphicsReady = true; - if (this.graphicsReadyCallback) { - this.graphicsReadyCallback(); - } - }, - cancel: function InternalRenderTask_cancel() { - this.running = false; - this.cancelled = true; - if (this._canvas) { - canvasInRendering.delete(this._canvas); - } - this.callback(new _dom_utils.RenderingCancelledException('Rendering cancelled, page ' + this.pageNumber, 'canvas')); - }, - operatorListChanged: function InternalRenderTask_operatorListChanged() { - if (!this.graphicsReady) { - if (!this.graphicsReadyCallback) { - this.graphicsReadyCallback = this._continueBound; - } - return; - } - if (this.stepper) { - this.stepper.updateOperatorList(this.operatorList); - } - if (this.running) { - return; - } - this._continue(); - }, - _continue: function InternalRenderTask__continue() { - this.running = true; - if (this.cancelled) { - return; - } - if (this.task.onContinue) { - this.task.onContinue(this._scheduleNextBound); - } else { - this._scheduleNext(); - } - }, - _scheduleNext: function InternalRenderTask__scheduleNext() { - if (this.useRequestAnimationFrame && typeof window !== 'undefined') { - window.requestAnimationFrame(this._nextBound); - } else { - Promise.resolve(undefined).then(this._nextBound); - } - }, - _next: function InternalRenderTask__next() { - if (this.cancelled) { - return; - } - this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); - if (this.operatorListIdx === this.operatorList.argsArray.length) { - this.running = false; - if (this.operatorList.lastChunk) { - this.gfx.endDrawing(); - if (this._canvas) { - canvasInRendering.delete(this._canvas); - } - this.callback(); - } - } - } - }; - return InternalRenderTask; -}(); -var version, build; -{ - exports.version = version = '2.0.402'; - exports.build = build = '401f3a9d'; -} -exports.getDocument = getDocument; -exports.LoopbackPort = LoopbackPort; -exports.PDFDataRangeTransport = PDFDataRangeTransport; -exports.PDFWorker = PDFWorker; -exports.PDFDocumentProxy = PDFDocumentProxy; -exports.PDFPageProxy = PDFPageProxy; -exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; -exports.version = version; -exports.build = build; +const GlobalWorkerOptions = Object.create(null); +GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; +GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? '' : GlobalWorkerOptions.workerSrc; +exports.GlobalWorkerOptions = GlobalWorkerOptions; /***/ }), /* 5 */ @@ -3230,1394 +1752,17 @@ exports.build = build; "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Metadata = undefined; - -var _util = __w_pdfjs_require__(0); - -var _dom_utils = __w_pdfjs_require__(1); - -class Metadata { - constructor(data) { - (0, _util.assert)(typeof data === 'string', 'Metadata: input is not a string'); - data = this._repair(data); - let parser = new _dom_utils.SimpleXMLParser(); - data = parser.parseFromString(data); - this._metadata = Object.create(null); - this._parse(data); - } - _repair(data) { - return data.replace(/>\\376\\377([^<]+)/g, function (all, codes) { - let bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { - return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); - }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { - switch (name) { - case 'amp': - return '&'; - case 'apos': - return '\''; - case 'gt': - return '>'; - case 'lt': - return '<'; - case 'quot': - return '\"'; - } - throw new Error(`_repair: ${name} isn't defined.`); - }); - let chars = ''; - for (let i = 0, ii = bytes.length; i < ii; i += 2) { - let code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); - if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { - chars += String.fromCharCode(code); - } else { - chars += '&#x' + (0x10000 + code).toString(16).substring(1) + ';'; - } - } - return '>' + chars; - }); - } - _parse(domDocument) { - let rdf = domDocument.documentElement; - if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { - rdf = rdf.firstChild; - while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') { - rdf = rdf.nextSibling; - } - } - let nodeName = rdf ? rdf.nodeName.toLowerCase() : null; - if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) { - return; - } - let children = rdf.childNodes; - for (let i = 0, ii = children.length; i < ii; i++) { - let desc = children[i]; - if (desc.nodeName.toLowerCase() !== 'rdf:description') { - continue; - } - for (let j = 0, jj = desc.childNodes.length; j < jj; j++) { - if (desc.childNodes[j].nodeName.toLowerCase() !== '#text') { - let entry = desc.childNodes[j]; - let name = entry.nodeName.toLowerCase(); - this._metadata[name] = entry.textContent.trim(); - } - } - } - } - get(name) { - return this._metadata[name] || null; - } - getAll() { - return this._metadata; - } - has(name) { - return typeof this._metadata[name] !== 'undefined'; - } -} -exports.Metadata = Metadata; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.AnnotationLayer = undefined; - -var _dom_utils = __w_pdfjs_require__(1); - -var _util = __w_pdfjs_require__(0); - -class AnnotationElementFactory { - static create(parameters) { - let subtype = parameters.data.annotationType; - switch (subtype) { - case _util.AnnotationType.LINK: - return new LinkAnnotationElement(parameters); - case _util.AnnotationType.TEXT: - return new TextAnnotationElement(parameters); - case _util.AnnotationType.WIDGET: - let fieldType = parameters.data.fieldType; - switch (fieldType) { - case 'Tx': - return new TextWidgetAnnotationElement(parameters); - case 'Btn': - if (parameters.data.radioButton) { - return new RadioButtonWidgetAnnotationElement(parameters); - } else if (parameters.data.checkBox) { - return new CheckboxWidgetAnnotationElement(parameters); - } - return new PushButtonWidgetAnnotationElement(parameters); - case 'Ch': - return new ChoiceWidgetAnnotationElement(parameters); - } - return new WidgetAnnotationElement(parameters); - case _util.AnnotationType.POPUP: - return new PopupAnnotationElement(parameters); - case _util.AnnotationType.LINE: - return new LineAnnotationElement(parameters); - case _util.AnnotationType.SQUARE: - return new SquareAnnotationElement(parameters); - case _util.AnnotationType.CIRCLE: - return new CircleAnnotationElement(parameters); - case _util.AnnotationType.POLYLINE: - return new PolylineAnnotationElement(parameters); - case _util.AnnotationType.POLYGON: - return new PolygonAnnotationElement(parameters); - case _util.AnnotationType.HIGHLIGHT: - return new HighlightAnnotationElement(parameters); - case _util.AnnotationType.UNDERLINE: - return new UnderlineAnnotationElement(parameters); - case _util.AnnotationType.SQUIGGLY: - return new SquigglyAnnotationElement(parameters); - case _util.AnnotationType.STRIKEOUT: - return new StrikeOutAnnotationElement(parameters); - case _util.AnnotationType.STAMP: - return new StampAnnotationElement(parameters); - case _util.AnnotationType.FILEATTACHMENT: - return new FileAttachmentAnnotationElement(parameters); - default: - return new AnnotationElement(parameters); - } - } -} -class AnnotationElement { - constructor(parameters, isRenderable = false, ignoreBorder = false) { - this.isRenderable = isRenderable; - this.data = parameters.data; - this.layer = parameters.layer; - this.page = parameters.page; - this.viewport = parameters.viewport; - this.linkService = parameters.linkService; - this.downloadManager = parameters.downloadManager; - this.imageResourcesPath = parameters.imageResourcesPath; - this.renderInteractiveForms = parameters.renderInteractiveForms; - this.svgFactory = parameters.svgFactory; - if (isRenderable) { - this.container = this._createContainer(ignoreBorder); - } - } - _createContainer(ignoreBorder = false) { - let data = this.data, - page = this.page, - viewport = this.viewport; - let container = document.createElement('section'); - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; - container.setAttribute('data-annotation-id', data.id); - let rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); - container.style.transform = 'matrix(' + viewport.transform.join(',') + ')'; - container.style.transformOrigin = -rect[0] + 'px ' + -rect[1] + 'px'; - if (!ignoreBorder && data.borderStyle.width > 0) { - container.style.borderWidth = data.borderStyle.width + 'px'; - if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { - width = width - 2 * data.borderStyle.width; - height = height - 2 * data.borderStyle.width; - } - let horizontalRadius = data.borderStyle.horizontalCornerRadius; - let verticalRadius = data.borderStyle.verticalCornerRadius; - if (horizontalRadius > 0 || verticalRadius > 0) { - let radius = horizontalRadius + 'px / ' + verticalRadius + 'px'; - container.style.borderRadius = radius; - } - switch (data.borderStyle.style) { - case _util.AnnotationBorderStyleType.SOLID: - container.style.borderStyle = 'solid'; - break; - case _util.AnnotationBorderStyleType.DASHED: - container.style.borderStyle = 'dashed'; - break; - case _util.AnnotationBorderStyleType.BEVELED: - (0, _util.warn)('Unimplemented border style: beveled'); - break; - case _util.AnnotationBorderStyleType.INSET: - (0, _util.warn)('Unimplemented border style: inset'); - break; - case _util.AnnotationBorderStyleType.UNDERLINE: - container.style.borderBottomStyle = 'solid'; - break; - default: - break; - } - if (data.color) { - container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); - } else { - container.style.borderWidth = 0; - } - } - container.style.left = rect[0] + 'px'; - container.style.top = rect[1] + 'px'; - container.style.width = width + 'px'; - container.style.height = height + 'px'; - return container; - } - _createPopup(container, trigger, data) { - if (!trigger) { - trigger = document.createElement('div'); - trigger.style.height = container.style.height; - trigger.style.width = container.style.width; - container.appendChild(trigger); - } - let popupElement = new PopupElement({ - container, - trigger, - color: data.color, - title: data.title, - contents: data.contents, - hideWrapper: true - }); - let popup = popupElement.render(); - popup.style.left = container.style.width; - container.appendChild(popup); - } - render() { - (0, _util.unreachable)('Abstract method `AnnotationElement.render` called'); - } -} -class LinkAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action); - super(parameters, isRenderable); - } - render() { - this.container.className = 'linkAnnotation'; - let { data, linkService } = this; - let link = document.createElement('a'); - (0, _dom_utils.addLinkAttributes)(link, { - url: data.url, - target: data.newWindow ? _dom_utils.LinkTarget.BLANK : linkService.externalLinkTarget, - rel: linkService.externalLinkRel - }); - if (!data.url) { - if (data.action) { - this._bindNamedAction(link, data.action); - } else { - this._bindLink(link, data.dest); - } - } - this.container.appendChild(link); - return this.container; - } - _bindLink(link, destination) { - link.href = this.linkService.getDestinationHash(destination); - link.onclick = () => { - if (destination) { - this.linkService.navigateTo(destination); - } - return false; - }; - if (destination) { - link.className = 'internalLink'; - } - } - _bindNamedAction(link, action) { - link.href = this.linkService.getAnchorUrl(''); - link.onclick = () => { - this.linkService.executeNamedAction(action); - return false; - }; - link.className = 'internalLink'; - } -} -class TextAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable); - } - render() { - this.container.className = 'textAnnotation'; - let image = document.createElement('img'); - image.style.height = this.container.style.height; - image.style.width = this.container.style.width; - image.src = this.imageResourcesPath + 'annotation-' + this.data.name.toLowerCase() + '.svg'; - image.alt = '[{{type}} Annotation]'; - image.dataset.l10nId = 'text_annotation_type'; - image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); - if (!this.data.hasPopup) { - this._createPopup(this.container, image, this.data); - } - this.container.appendChild(image); - return this.container; - } -} -class WidgetAnnotationElement extends AnnotationElement { - render() { - return this.container; - } -} -class TextWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - let isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; - super(parameters, isRenderable); - } - render() { - const TEXT_ALIGNMENT = ['left', 'center', 'right']; - this.container.className = 'textWidgetAnnotation'; - let element = null; - if (this.renderInteractiveForms) { - if (this.data.multiLine) { - element = document.createElement('textarea'); - element.textContent = this.data.fieldValue; - } else { - element = document.createElement('input'); - element.type = 'text'; - element.setAttribute('value', this.data.fieldValue); - } - element.disabled = this.data.readOnly; - if (this.data.maxLen !== null) { - element.maxLength = this.data.maxLen; - } - if (this.data.comb) { - let fieldWidth = this.data.rect[2] - this.data.rect[0]; - let combWidth = fieldWidth / this.data.maxLen; - element.classList.add('comb'); - element.style.letterSpacing = 'calc(' + combWidth + 'px - 1ch)'; - } - } else { - element = document.createElement('div'); - element.textContent = this.data.fieldValue; - element.style.verticalAlign = 'middle'; - element.style.display = 'table-cell'; - let font = null; - if (this.data.fontRefName) { - font = this.page.commonObjs.getData(this.data.fontRefName); - } - this._setTextStyle(element, font); - } - if (this.data.textAlignment !== null) { - element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; - } - this.container.appendChild(element); - return this.container; - } - _setTextStyle(element, font) { - let style = element.style; - style.fontSize = this.data.fontSize + 'px'; - style.direction = this.data.fontDirection < 0 ? 'rtl' : 'ltr'; - if (!font) { - return; - } - style.fontWeight = font.black ? font.bold ? '900' : 'bold' : font.bold ? 'bold' : 'normal'; - style.fontStyle = font.italic ? 'italic' : 'normal'; - let fontFamily = font.loadedName ? '"' + font.loadedName + '", ' : ''; - let fallbackName = font.fallbackName || 'Helvetica, sans-serif'; - style.fontFamily = fontFamily + fallbackName; - } -} -class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - super(parameters, parameters.renderInteractiveForms); - } - render() { - this.container.className = 'buttonWidgetAnnotation checkBox'; - let element = document.createElement('input'); - element.disabled = this.data.readOnly; - element.type = 'checkbox'; - if (this.data.fieldValue && this.data.fieldValue !== 'Off') { - element.setAttribute('checked', true); - } - this.container.appendChild(element); - return this.container; - } -} -class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - super(parameters, parameters.renderInteractiveForms); - } - render() { - this.container.className = 'buttonWidgetAnnotation radioButton'; - let element = document.createElement('input'); - element.disabled = this.data.readOnly; - element.type = 'radio'; - element.name = this.data.fieldName; - if (this.data.fieldValue === this.data.buttonValue) { - element.setAttribute('checked', true); - } - this.container.appendChild(element); - return this.container; - } -} -class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { - render() { - let container = super.render(); - container.className = 'buttonWidgetAnnotation pushButton'; - return container; - } -} -class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - super(parameters, parameters.renderInteractiveForms); - } - render() { - this.container.className = 'choiceWidgetAnnotation'; - let selectElement = document.createElement('select'); - selectElement.disabled = this.data.readOnly; - if (!this.data.combo) { - selectElement.size = this.data.options.length; - if (this.data.multiSelect) { - selectElement.multiple = true; - } - } - for (let i = 0, ii = this.data.options.length; i < ii; i++) { - let option = this.data.options[i]; - let optionElement = document.createElement('option'); - optionElement.textContent = option.displayValue; - optionElement.value = option.exportValue; - if (this.data.fieldValue.includes(option.displayValue)) { - optionElement.setAttribute('selected', true); - } - selectElement.appendChild(optionElement); - } - this.container.appendChild(selectElement); - return this.container; - } -} -class PopupAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.title || parameters.data.contents); - super(parameters, isRenderable); - } - render() { - const IGNORE_TYPES = ['Line', 'Square', 'Circle', 'PolyLine', 'Polygon']; - this.container.className = 'popupAnnotation'; - if (IGNORE_TYPES.includes(this.data.parentType)) { - return this.container; - } - let selector = '[data-annotation-id="' + this.data.parentId + '"]'; - let parentElement = this.layer.querySelector(selector); - if (!parentElement) { - return this.container; - } - let popup = new PopupElement({ - container: this.container, - trigger: parentElement, - color: this.data.color, - title: this.data.title, - contents: this.data.contents - }); - let parentLeft = parseFloat(parentElement.style.left); - let parentWidth = parseFloat(parentElement.style.width); - this.container.style.transformOrigin = -(parentLeft + parentWidth) + 'px -' + parentElement.style.top; - this.container.style.left = parentLeft + parentWidth + 'px'; - this.container.appendChild(popup.render()); - return this.container; - } -} -class PopupElement { - constructor(parameters) { - this.container = parameters.container; - this.trigger = parameters.trigger; - this.color = parameters.color; - this.title = parameters.title; - this.contents = parameters.contents; - this.hideWrapper = parameters.hideWrapper || false; - this.pinned = false; - } - render() { - const BACKGROUND_ENLIGHT = 0.7; - let wrapper = document.createElement('div'); - wrapper.className = 'popupWrapper'; - this.hideElement = this.hideWrapper ? wrapper : this.container; - this.hideElement.setAttribute('hidden', true); - let popup = document.createElement('div'); - popup.className = 'popup'; - let color = this.color; - if (color) { - let r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; - let g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; - let b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; - popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0); - } - let contents = this._formatContents(this.contents); - let title = document.createElement('h1'); - title.textContent = this.title; - this.trigger.addEventListener('click', this._toggle.bind(this)); - this.trigger.addEventListener('mouseover', this._show.bind(this, false)); - this.trigger.addEventListener('mouseout', this._hide.bind(this, false)); - popup.addEventListener('click', this._hide.bind(this, true)); - popup.appendChild(title); - popup.appendChild(contents); - wrapper.appendChild(popup); - return wrapper; - } - _formatContents(contents) { - let p = document.createElement('p'); - let lines = contents.split(/(?:\r\n?|\n)/); - for (let i = 0, ii = lines.length; i < ii; ++i) { - let line = lines[i]; - p.appendChild(document.createTextNode(line)); - if (i < ii - 1) { - p.appendChild(document.createElement('br')); - } - } - return p; - } - _toggle() { - if (this.pinned) { - this._hide(true); - } else { - this._show(true); - } - } - _show(pin = false) { - if (pin) { - this.pinned = true; - } - if (this.hideElement.hasAttribute('hidden')) { - this.hideElement.removeAttribute('hidden'); - this.container.style.zIndex += 1; - } - } - _hide(unpin = true) { - if (unpin) { - this.pinned = false; - } - if (!this.hideElement.hasAttribute('hidden') && !this.pinned) { - this.hideElement.setAttribute('hidden', true); - this.container.style.zIndex -= 1; - } - } -} -class LineAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'lineAnnotation'; - let data = this.data; - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; - let svg = this.svgFactory.create(width, height); - let line = this.svgFactory.createElement('svg:line'); - line.setAttribute('x1', data.rect[2] - data.lineCoordinates[0]); - line.setAttribute('y1', data.rect[3] - data.lineCoordinates[1]); - line.setAttribute('x2', data.rect[2] - data.lineCoordinates[2]); - line.setAttribute('y2', data.rect[3] - data.lineCoordinates[3]); - line.setAttribute('stroke-width', data.borderStyle.width); - line.setAttribute('stroke', 'transparent'); - svg.appendChild(line); - this.container.append(svg); - this._createPopup(this.container, line, data); - return this.container; - } -} -class SquareAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'squareAnnotation'; - let data = this.data; - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; - let svg = this.svgFactory.create(width, height); - let borderWidth = data.borderStyle.width; - let square = this.svgFactory.createElement('svg:rect'); - square.setAttribute('x', borderWidth / 2); - square.setAttribute('y', borderWidth / 2); - square.setAttribute('width', width - borderWidth); - square.setAttribute('height', height - borderWidth); - square.setAttribute('stroke-width', borderWidth); - square.setAttribute('stroke', 'transparent'); - square.setAttribute('fill', 'none'); - svg.appendChild(square); - this.container.append(svg); - this._createPopup(this.container, square, data); - return this.container; - } -} -class CircleAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'circleAnnotation'; - let data = this.data; - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; - let svg = this.svgFactory.create(width, height); - let borderWidth = data.borderStyle.width; - let circle = this.svgFactory.createElement('svg:ellipse'); - circle.setAttribute('cx', width / 2); - circle.setAttribute('cy', height / 2); - circle.setAttribute('rx', width / 2 - borderWidth / 2); - circle.setAttribute('ry', height / 2 - borderWidth / 2); - circle.setAttribute('stroke-width', borderWidth); - circle.setAttribute('stroke', 'transparent'); - circle.setAttribute('fill', 'none'); - svg.appendChild(circle); - this.container.append(svg); - this._createPopup(this.container, circle, data); - return this.container; - } -} -class PolylineAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - this.containerClassName = 'polylineAnnotation'; - this.svgElementName = 'svg:polyline'; - } - render() { - this.container.className = this.containerClassName; - let data = this.data; - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; - let svg = this.svgFactory.create(width, height); - let vertices = data.vertices; - let points = []; - for (let i = 0, ii = vertices.length; i < ii; i++) { - let x = vertices[i].x - data.rect[0]; - let y = data.rect[3] - vertices[i].y; - points.push(x + ',' + y); - } - points = points.join(' '); - let borderWidth = data.borderStyle.width; - let polyline = this.svgFactory.createElement(this.svgElementName); - polyline.setAttribute('points', points); - polyline.setAttribute('stroke-width', borderWidth); - polyline.setAttribute('stroke', 'transparent'); - polyline.setAttribute('fill', 'none'); - svg.appendChild(polyline); - this.container.append(svg); - this._createPopup(this.container, polyline, data); - return this.container; - } -} -class PolygonAnnotationElement extends PolylineAnnotationElement { - constructor(parameters) { - super(parameters); - this.containerClassName = 'polygonAnnotation'; - this.svgElementName = 'svg:polygon'; - } -} -class HighlightAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'highlightAnnotation'; - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - return this.container; - } -} -class UnderlineAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'underlineAnnotation'; - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - return this.container; - } -} -class SquigglyAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'squigglyAnnotation'; - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - return this.container; - } -} -class StrikeOutAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'strikeoutAnnotation'; - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - return this.container; - } -} -class StampAnnotationElement extends AnnotationElement { - constructor(parameters) { - let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - super(parameters, isRenderable, true); - } - render() { - this.container.className = 'stampAnnotation'; - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - return this.container; - } -} -class FileAttachmentAnnotationElement extends AnnotationElement { - constructor(parameters) { - super(parameters, true); - let file = this.data.file; - this.filename = (0, _dom_utils.getFilenameFromUrl)(file.filename); - this.content = file.content; - this.linkService.onFileAttachmentAnnotation({ - id: (0, _util.stringToPDFString)(file.filename), - filename: file.filename, - content: file.content - }); - } - render() { - this.container.className = 'fileAttachmentAnnotation'; - let trigger = document.createElement('div'); - trigger.style.height = this.container.style.height; - trigger.style.width = this.container.style.width; - trigger.addEventListener('dblclick', this._download.bind(this)); - if (!this.data.hasPopup && (this.data.title || this.data.contents)) { - this._createPopup(this.container, trigger, this.data); - } - this.container.appendChild(trigger); - return this.container; - } - _download() { - if (!this.downloadManager) { - (0, _util.warn)('Download cannot be started due to unavailable download manager'); - return; - } - this.downloadManager.downloadData(this.content, this.filename, ''); - } -} -class AnnotationLayer { - static render(parameters) { - for (let i = 0, ii = parameters.annotations.length; i < ii; i++) { - let data = parameters.annotations[i]; - if (!data) { - continue; - } - let element = AnnotationElementFactory.create({ - data, - layer: parameters.div, - page: parameters.page, - viewport: parameters.viewport, - linkService: parameters.linkService, - downloadManager: parameters.downloadManager, - imageResourcesPath: parameters.imageResourcesPath || '', - renderInteractiveForms: parameters.renderInteractiveForms || false, - svgFactory: new _dom_utils.DOMSVGFactory() - }); - if (element.isRenderable) { - parameters.div.appendChild(element.render()); - } - } - } - static update(parameters) { - for (let i = 0, ii = parameters.annotations.length; i < ii; i++) { - let data = parameters.annotations[i]; - let element = parameters.div.querySelector('[data-annotation-id="' + data.id + '"]'); - if (element) { - element.style.transform = 'matrix(' + parameters.viewport.transform.join(',') + ')'; - } - } - parameters.div.removeAttribute('hidden'); - } -} -exports.AnnotationLayer = AnnotationLayer; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.renderTextLayer = undefined; - -var _util = __w_pdfjs_require__(0); - -var _dom_utils = __w_pdfjs_require__(1); - -var renderTextLayer = function renderTextLayerClosure() { - var MAX_TEXT_DIVS_TO_RENDER = 100000; - var NonWhitespaceRegexp = /\S/; - function isAllWhitespace(str) { - return !NonWhitespaceRegexp.test(str); - } - var styleBuf = ['left: ', 0, 'px; top: ', 0, 'px; font-size: ', 0, 'px; font-family: ', '', ';']; - function appendText(task, geom, styles) { - var textDiv = document.createElement('div'); - var textDivProperties = { - style: null, - angle: 0, - canvasWidth: 0, - isWhitespace: false, - originalTransform: null, - paddingBottom: 0, - paddingLeft: 0, - paddingRight: 0, - paddingTop: 0, - scale: 1 - }; - task._textDivs.push(textDiv); - if (isAllWhitespace(geom.str)) { - textDivProperties.isWhitespace = true; - task._textDivProperties.set(textDiv, textDivProperties); - return; - } - var tx = _util.Util.transform(task._viewport.transform, geom.transform); - var angle = Math.atan2(tx[1], tx[0]); - var style = styles[geom.fontName]; - if (style.vertical) { - angle += Math.PI / 2; - } - var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); - var fontAscent = fontHeight; - if (style.ascent) { - fontAscent = style.ascent * fontAscent; - } else if (style.descent) { - fontAscent = (1 + style.descent) * fontAscent; - } - var left; - var top; - if (angle === 0) { - left = tx[4]; - top = tx[5] - fontAscent; - } else { - left = tx[4] + fontAscent * Math.sin(angle); - top = tx[5] - fontAscent * Math.cos(angle); - } - styleBuf[1] = left; - styleBuf[3] = top; - styleBuf[5] = fontHeight; - styleBuf[7] = style.fontFamily; - textDivProperties.style = styleBuf.join(''); - textDiv.setAttribute('style', textDivProperties.style); - textDiv.textContent = geom.str; - if ((0, _dom_utils.getDefaultSetting)('pdfBug')) { - textDiv.dataset.fontName = geom.fontName; - } - if (angle !== 0) { - textDivProperties.angle = angle * (180 / Math.PI); - } - if (geom.str.length > 1) { - if (style.vertical) { - textDivProperties.canvasWidth = geom.height * task._viewport.scale; - } else { - textDivProperties.canvasWidth = geom.width * task._viewport.scale; - } - } - task._textDivProperties.set(textDiv, textDivProperties); - if (task._textContentStream) { - task._layoutText(textDiv); - } - if (task._enhanceTextSelection) { - var angleCos = 1, - angleSin = 0; - if (angle !== 0) { - angleCos = Math.cos(angle); - angleSin = Math.sin(angle); - } - var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; - var divHeight = fontHeight; - var m, b; - if (angle !== 0) { - m = [angleCos, angleSin, -angleSin, angleCos, left, top]; - b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); - } else { - b = [left, top, left + divWidth, top + divHeight]; - } - task._bounds.push({ - left: b[0], - top: b[1], - right: b[2], - bottom: b[3], - div: textDiv, - size: [divWidth, divHeight], - m - }); - } - } - function render(task) { - if (task._canceled) { - return; - } - var textDivs = task._textDivs; - var capability = task._capability; - var textDivsLength = textDivs.length; - if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { - task._renderingDone = true; - capability.resolve(); - return; - } - if (!task._textContentStream) { - for (var i = 0; i < textDivsLength; i++) { - task._layoutText(textDivs[i]); - } - } - task._renderingDone = true; - capability.resolve(); - } - function expand(task) { - var bounds = task._bounds; - var viewport = task._viewport; - var expanded = expandBounds(viewport.width, viewport.height, bounds); - for (var i = 0; i < expanded.length; i++) { - var div = bounds[i].div; - var divProperties = task._textDivProperties.get(div); - if (divProperties.angle === 0) { - divProperties.paddingLeft = bounds[i].left - expanded[i].left; - divProperties.paddingTop = bounds[i].top - expanded[i].top; - divProperties.paddingRight = expanded[i].right - bounds[i].right; - divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; - task._textDivProperties.set(div, divProperties); - continue; - } - var e = expanded[i], - b = bounds[i]; - var m = b.m, - c = m[0], - s = m[1]; - var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; - var ts = new Float64Array(64); - points.forEach(function (p, i) { - var t = _util.Util.applyTransform(p, m); - ts[i + 0] = c && (e.left - t[0]) / c; - ts[i + 4] = s && (e.top - t[1]) / s; - ts[i + 8] = c && (e.right - t[0]) / c; - ts[i + 12] = s && (e.bottom - t[1]) / s; - ts[i + 16] = s && (e.left - t[0]) / -s; - ts[i + 20] = c && (e.top - t[1]) / c; - ts[i + 24] = s && (e.right - t[0]) / -s; - ts[i + 28] = c && (e.bottom - t[1]) / c; - ts[i + 32] = c && (e.left - t[0]) / -c; - ts[i + 36] = s && (e.top - t[1]) / -s; - ts[i + 40] = c && (e.right - t[0]) / -c; - ts[i + 44] = s && (e.bottom - t[1]) / -s; - ts[i + 48] = s && (e.left - t[0]) / s; - ts[i + 52] = c && (e.top - t[1]) / -c; - ts[i + 56] = s && (e.right - t[0]) / s; - ts[i + 60] = c && (e.bottom - t[1]) / -c; - }); - var findPositiveMin = function (ts, offset, count) { - var result = 0; - for (var i = 0; i < count; i++) { - var t = ts[offset++]; - if (t > 0) { - result = result ? Math.min(t, result) : t; - } - } - return result; - }; - var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); - divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; - divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; - divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; - divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; - task._textDivProperties.set(div, divProperties); - } - } - function expandBounds(width, height, boxes) { - var bounds = boxes.map(function (box, i) { - return { - x1: box.left, - y1: box.top, - x2: box.right, - y2: box.bottom, - index: i, - x1New: undefined, - x2New: undefined - }; - }); - expandBoundsLTR(width, bounds); - var expanded = new Array(boxes.length); - bounds.forEach(function (b) { - var i = b.index; - expanded[i] = { - left: b.x1New, - top: 0, - right: b.x2New, - bottom: 0 - }; - }); - boxes.map(function (box, i) { - var e = expanded[i], - b = bounds[i]; - b.x1 = box.top; - b.y1 = width - e.right; - b.x2 = box.bottom; - b.y2 = width - e.left; - b.index = i; - b.x1New = undefined; - b.x2New = undefined; - }); - expandBoundsLTR(height, bounds); - bounds.forEach(function (b) { - var i = b.index; - expanded[i].top = b.x1New; - expanded[i].bottom = b.x2New; - }); - return expanded; - } - function expandBoundsLTR(width, bounds) { - bounds.sort(function (a, b) { - return a.x1 - b.x1 || a.index - b.index; - }); - var fakeBoundary = { - x1: -Infinity, - y1: -Infinity, - x2: 0, - y2: Infinity, - index: -1, - x1New: 0, - x2New: 0 - }; - var horizon = [{ - start: -Infinity, - end: Infinity, - boundary: fakeBoundary - }]; - bounds.forEach(function (boundary) { - var i = 0; - while (i < horizon.length && horizon[i].end <= boundary.y1) { - i++; - } - var j = horizon.length - 1; - while (j >= 0 && horizon[j].start >= boundary.y2) { - j--; - } - var horizonPart, affectedBoundary; - var q, - k, - maxXNew = -Infinity; - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - var xNew; - if (affectedBoundary.x2 > boundary.x1) { - xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; - } else if (affectedBoundary.x2New === undefined) { - xNew = (affectedBoundary.x2 + boundary.x1) / 2; - } else { - xNew = affectedBoundary.x2New; - } - if (xNew > maxXNew) { - maxXNew = xNew; - } - } - boundary.x1New = maxXNew; - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - if (affectedBoundary.x2New === undefined) { - if (affectedBoundary.x2 > boundary.x1) { - if (affectedBoundary.index > boundary.index) { - affectedBoundary.x2New = affectedBoundary.x2; - } - } else { - affectedBoundary.x2New = maxXNew; - } - } else if (affectedBoundary.x2New > maxXNew) { - affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); - } - } - var changedHorizon = [], - lastBoundary = null; - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; - if (lastBoundary === useBoundary) { - changedHorizon[changedHorizon.length - 1].end = horizonPart.end; - } else { - changedHorizon.push({ - start: horizonPart.start, - end: horizonPart.end, - boundary: useBoundary - }); - lastBoundary = useBoundary; - } - } - if (horizon[i].start < boundary.y1) { - changedHorizon[0].start = boundary.y1; - changedHorizon.unshift({ - start: horizon[i].start, - end: boundary.y1, - boundary: horizon[i].boundary - }); - } - if (boundary.y2 < horizon[j].end) { - changedHorizon[changedHorizon.length - 1].end = boundary.y2; - changedHorizon.push({ - start: boundary.y2, - end: horizon[j].end, - boundary: horizon[j].boundary - }); - } - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - if (affectedBoundary.x2New !== undefined) { - continue; - } - var used = false; - for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { - used = horizon[k].boundary === affectedBoundary; - } - for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { - used = horizon[k].boundary === affectedBoundary; - } - for (k = 0; !used && k < changedHorizon.length; k++) { - used = changedHorizon[k].boundary === affectedBoundary; - } - if (!used) { - affectedBoundary.x2New = maxXNew; - } - } - Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); - }); - horizon.forEach(function (horizonPart) { - var affectedBoundary = horizonPart.boundary; - if (affectedBoundary.x2New === undefined) { - affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); - } - }); - } - function TextLayerRenderTask({ textContent, textContentStream, container, viewport, textDivs, textContentItemsStr, enhanceTextSelection }) { - this._textContent = textContent; - this._textContentStream = textContentStream; - this._container = container; - this._viewport = viewport; - this._textDivs = textDivs || []; - this._textContentItemsStr = textContentItemsStr || []; - this._enhanceTextSelection = !!enhanceTextSelection; - this._reader = null; - this._layoutTextLastFontSize = null; - this._layoutTextLastFontFamily = null; - this._layoutTextCtx = null; - this._textDivProperties = new WeakMap(); - this._renderingDone = false; - this._canceled = false; - this._capability = (0, _util.createPromiseCapability)(); - this._renderTimer = null; - this._bounds = []; - } - TextLayerRenderTask.prototype = { - get promise() { - return this._capability.promise; - }, - cancel: function TextLayer_cancel() { - if (this._reader) { - this._reader.cancel(new _util.AbortException('text layer task cancelled')); - this._reader = null; - } - this._canceled = true; - if (this._renderTimer !== null) { - clearTimeout(this._renderTimer); - this._renderTimer = null; - } - this._capability.reject('canceled'); - }, - _processItems(items, styleCache) { - for (let i = 0, len = items.length; i < len; i++) { - this._textContentItemsStr.push(items[i].str); - appendText(this, items[i], styleCache); - } - }, - _layoutText(textDiv) { - let textLayerFrag = this._container; - let textDivProperties = this._textDivProperties.get(textDiv); - if (textDivProperties.isWhitespace) { - return; - } - let fontSize = textDiv.style.fontSize; - let fontFamily = textDiv.style.fontFamily; - if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { - this._layoutTextCtx.font = fontSize + ' ' + fontFamily; - this._lastFontSize = fontSize; - this._lastFontFamily = fontFamily; - } - let width = this._layoutTextCtx.measureText(textDiv.textContent).width; - let transform = ''; - if (textDivProperties.canvasWidth !== 0 && width > 0) { - textDivProperties.scale = textDivProperties.canvasWidth / width; - transform = 'scaleX(' + textDivProperties.scale + ')'; - } - if (textDivProperties.angle !== 0) { - transform = 'rotate(' + textDivProperties.angle + 'deg) ' + transform; - } - if (transform !== '') { - textDivProperties.originalTransform = transform; - textDiv.style.transform = transform; - } - this._textDivProperties.set(textDiv, textDivProperties); - textLayerFrag.appendChild(textDiv); - }, - _render: function TextLayer_render(timeout) { - let capability = (0, _util.createPromiseCapability)(); - let styleCache = Object.create(null); - let canvas = document.createElement('canvas'); - canvas.mozOpaque = true; - this._layoutTextCtx = canvas.getContext('2d', { alpha: false }); - if (this._textContent) { - let textItems = this._textContent.items; - let textStyles = this._textContent.styles; - this._processItems(textItems, textStyles); - capability.resolve(); - } else if (this._textContentStream) { - let pump = () => { - this._reader.read().then(({ value, done }) => { - if (done) { - capability.resolve(); - return; - } - _util.Util.extendObj(styleCache, value.styles); - this._processItems(value.items, styleCache); - pump(); - }, capability.reject); - }; - this._reader = this._textContentStream.getReader(); - pump(); - } else { - throw new Error('Neither "textContent" nor "textContentStream"' + ' parameters specified.'); - } - capability.promise.then(() => { - styleCache = null; - if (!timeout) { - render(this); - } else { - this._renderTimer = setTimeout(() => { - render(this); - this._renderTimer = null; - }, timeout); - } - }, this._capability.reject); - }, - expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { - if (!this._enhanceTextSelection || !this._renderingDone) { - return; - } - if (this._bounds !== null) { - expand(this); - this._bounds = null; - } - for (var i = 0, ii = this._textDivs.length; i < ii; i++) { - var div = this._textDivs[i]; - var divProperties = this._textDivProperties.get(div); - if (divProperties.isWhitespace) { - continue; - } - if (expandDivs) { - var transform = '', - padding = ''; - if (divProperties.scale !== 1) { - transform = 'scaleX(' + divProperties.scale + ')'; - } - if (divProperties.angle !== 0) { - transform = 'rotate(' + divProperties.angle + 'deg) ' + transform; - } - if (divProperties.paddingLeft !== 0) { - padding += ' padding-left: ' + divProperties.paddingLeft / divProperties.scale + 'px;'; - transform += ' translateX(' + -divProperties.paddingLeft / divProperties.scale + 'px)'; - } - if (divProperties.paddingTop !== 0) { - padding += ' padding-top: ' + divProperties.paddingTop + 'px;'; - transform += ' translateY(' + -divProperties.paddingTop + 'px)'; - } - if (divProperties.paddingRight !== 0) { - padding += ' padding-right: ' + divProperties.paddingRight / divProperties.scale + 'px;'; - } - if (divProperties.paddingBottom !== 0) { - padding += ' padding-bottom: ' + divProperties.paddingBottom + 'px;'; - } - if (padding !== '') { - div.setAttribute('style', divProperties.style + padding); - } - if (transform !== '') { - div.style.transform = transform; - } - } else { - div.style.padding = 0; - div.style.transform = divProperties.originalTransform || ''; - } - } - } - }; - function renderTextLayer(renderParameters) { - var task = new TextLayerRenderTask({ - textContent: renderParameters.textContent, - textContentStream: renderParameters.textContentStream, - container: renderParameters.container, - viewport: renderParameters.viewport, - textDivs: renderParameters.textDivs, - textContentItemsStr: renderParameters.textContentItemsStr, - enhanceTextSelection: renderParameters.enhanceTextSelection - }); - task._render(renderParameters.timeout); - return task; - } - return renderTextLayer; -}(); -exports.renderTextLayer = renderTextLayer; - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SVGGraphics = undefined; - -var _util = __w_pdfjs_require__(0); - -var _dom_utils = __w_pdfjs_require__(1); - -var _is_node = __w_pdfjs_require__(19); - -var _is_node2 = _interopRequireDefault(_is_node); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SVGGraphics = function () { - throw new Error('Not implemented: SVGGraphics'); -}; -; -exports.SVGGraphics = SVGGraphics; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; - - -var pdfjsVersion = '2.0.402'; -var pdfjsBuild = '401f3a9d'; +var pdfjsVersion = '2.0.447'; +var pdfjsBuild = 'c0b22da0'; var pdfjsSharedUtil = __w_pdfjs_require__(0); -var pdfjsDisplayGlobal = __w_pdfjs_require__(13); -var pdfjsDisplayAPI = __w_pdfjs_require__(4); -var pdfjsDisplayTextLayer = __w_pdfjs_require__(7); -var pdfjsDisplayAnnotationLayer = __w_pdfjs_require__(6); +var pdfjsDisplayAPI = __w_pdfjs_require__(9); +var pdfjsDisplayTextLayer = __w_pdfjs_require__(16); +var pdfjsDisplayAnnotationLayer = __w_pdfjs_require__(17); var pdfjsDisplayDOMUtils = __w_pdfjs_require__(1); -var pdfjsDisplaySVG = __w_pdfjs_require__(8); -let pdfjsDisplayWorkerOptions = __w_pdfjs_require__(3); +var pdfjsDisplaySVG = __w_pdfjs_require__(18); +let pdfjsDisplayWorkerOptions = __w_pdfjs_require__(4); +let pdfjsDisplayAPICompatibility = __w_pdfjs_require__(3); ; -exports.PDFJS = pdfjsDisplayGlobal.PDFJS; exports.build = pdfjsDisplayAPI.build; exports.version = pdfjsDisplayAPI.version; exports.getDocument = pdfjsDisplayAPI.getDocument; @@ -4641,23 +1786,26 @@ exports.createObjectURL = pdfjsSharedUtil.createObjectURL; exports.removeNullCharacters = pdfjsSharedUtil.removeNullCharacters; exports.shadow = pdfjsSharedUtil.shadow; exports.createBlob = pdfjsSharedUtil.createBlob; +exports.Util = pdfjsSharedUtil.Util; exports.RenderingCancelledException = pdfjsDisplayDOMUtils.RenderingCancelledException; exports.getFilenameFromUrl = pdfjsDisplayDOMUtils.getFilenameFromUrl; exports.LinkTarget = pdfjsDisplayDOMUtils.LinkTarget; exports.addLinkAttributes = pdfjsDisplayDOMUtils.addLinkAttributes; exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions; +exports.apiCompatibilityParams = pdfjsDisplayAPICompatibility.apiCompatibilityParams; /***/ }), -/* 10 */ +/* 6 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; +const globalScope = __w_pdfjs_require__(2); ; /***/ }), -/* 11 */ +/* 7 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -4677,11 +1825,11 @@ if (typeof ReadableStream !== 'undefined') { if (isReadableStreamSupported) { exports.ReadableStream = ReadableStream; } else { - exports.ReadableStream = __w_pdfjs_require__(12).ReadableStream; + exports.ReadableStream = __w_pdfjs_require__(8).ReadableStream; } /***/ }), -/* 12 */ +/* 8 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -7697,7 +4845,7 @@ if (isReadableStreamSupported) { }])); /***/ }), -/* 13 */ +/* 9 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -7706,85 +4854,1529 @@ if (isReadableStreamSupported) { Object.defineProperty(exports, "__esModule", { value: true }); -exports.PDFJS = exports.globalScope = undefined; +exports.build = exports.version = exports.setPDFNetworkStreamFactory = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.getDocument = undefined; var _util = __w_pdfjs_require__(0); var _dom_utils = __w_pdfjs_require__(1); -var _api = __w_pdfjs_require__(4); +var _font_loader = __w_pdfjs_require__(10); -var _annotation_layer = __w_pdfjs_require__(6); +var _api_compatibility = __w_pdfjs_require__(3); + +var _canvas = __w_pdfjs_require__(11); var _global_scope = __w_pdfjs_require__(2); var _global_scope2 = _interopRequireDefault(_global_scope); -var _worker_options = __w_pdfjs_require__(3); +var _worker_options = __w_pdfjs_require__(4); -var _metadata = __w_pdfjs_require__(5); +var _metadata = __w_pdfjs_require__(13); -var _text_layer = __w_pdfjs_require__(7); +var _transport_stream = __w_pdfjs_require__(14); -var _svg = __w_pdfjs_require__(8); +var _webgl = __w_pdfjs_require__(15); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -if (!_global_scope2.default.PDFJS) { - _global_scope2.default.PDFJS = {}; +var DEFAULT_RANGE_CHUNK_SIZE = 65536; +let isWorkerDisabled = false; +let workerSrc; +const pdfjsFilePath = null; +var fakeWorkerFilesLoader = null; +var useRequireEnsure = false; +; +var createPDFNetworkStream; +function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { + createPDFNetworkStream = pdfNetworkStreamFactory; } -var PDFJS = _global_scope2.default.PDFJS; -PDFJS.pdfBug = false; -PDFJS.OPS = _util.OPS; -PDFJS.UNSUPPORTED_FEATURES = _util.UNSUPPORTED_FEATURES; -PDFJS.shadow = _util.shadow; -PDFJS.createBlob = _util.createBlob; -PDFJS.createObjectURL = function PDFJS_createObjectURL(data, contentType) { - return (0, _util.createObjectURL)(data, contentType, PDFJS.disableCreateObjectURL); -}; -Object.defineProperty(PDFJS, 'isLittleEndian', { - configurable: true, - get: function PDFJS_isLittleEndian() { - return (0, _util.shadow)(PDFJS, 'isLittleEndian', (0, _util.isLittleEndian)()); +function getDocument(src) { + var task = new PDFDocumentLoadingTask(); + var source; + if (typeof src === 'string') { + source = { url: src }; + } else if ((0, _util.isArrayBuffer)(src)) { + source = { data: src }; + } else if (src instanceof PDFDataRangeTransport) { + source = { range: src }; + } else { + if (typeof src !== 'object') { + throw new Error('Invalid parameter in getDocument, ' + 'need either Uint8Array, string or a parameter object'); + } + if (!src.url && !src.data && !src.range) { + throw new Error('Invalid parameter object: need either .data, .range or .url'); + } + source = src; } -}); -PDFJS.removeNullCharacters = _util.removeNullCharacters; -PDFJS.PasswordResponses = _util.PasswordResponses; -PDFJS.PasswordException = _util.PasswordException; -PDFJS.UnknownErrorException = _util.UnknownErrorException; -PDFJS.InvalidPDFException = _util.InvalidPDFException; -PDFJS.MissingPDFException = _util.MissingPDFException; -PDFJS.UnexpectedResponseException = _util.UnexpectedResponseException; -PDFJS.Util = _util.Util; -PDFJS.PageViewport = _util.PageViewport; -PDFJS.createPromiseCapability = _util.createPromiseCapability; -PDFJS.maxImageSize = PDFJS.maxImageSize === undefined ? -1 : PDFJS.maxImageSize; -PDFJS.cMapUrl = PDFJS.cMapUrl === undefined ? null : PDFJS.cMapUrl; -PDFJS.cMapPacked = PDFJS.cMapPacked === undefined ? false : PDFJS.cMapPacked; -PDFJS.disableFontFace = PDFJS.disableFontFace === undefined ? false : PDFJS.disableFontFace; -PDFJS.disableRange = PDFJS.disableRange === undefined ? false : PDFJS.disableRange; -PDFJS.disableStream = PDFJS.disableStream === undefined ? false : PDFJS.disableStream; -PDFJS.disableAutoFetch = PDFJS.disableAutoFetch === undefined ? false : PDFJS.disableAutoFetch; -PDFJS.pdfBug = PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug; -PDFJS.disableCreateObjectURL = PDFJS.disableCreateObjectURL === undefined ? false : PDFJS.disableCreateObjectURL; -PDFJS.externalLinkTarget = PDFJS.externalLinkTarget === undefined ? _dom_utils.LinkTarget.NONE : PDFJS.externalLinkTarget; -PDFJS.externalLinkRel = PDFJS.externalLinkRel === undefined ? _dom_utils.DEFAULT_LINK_REL : PDFJS.externalLinkRel; -PDFJS.isEvalSupported = PDFJS.isEvalSupported === undefined ? true : PDFJS.isEvalSupported; -PDFJS.getDocument = _api.getDocument; -PDFJS.LoopbackPort = _api.LoopbackPort; -PDFJS.PDFDataRangeTransport = _api.PDFDataRangeTransport; -PDFJS.PDFWorker = _api.PDFWorker; -PDFJS.GlobalWorkerOptions = _worker_options.GlobalWorkerOptions; -PDFJS.getFilenameFromUrl = _dom_utils.getFilenameFromUrl; -PDFJS.AnnotationLayer = _annotation_layer.AnnotationLayer; -PDFJS.renderTextLayer = _text_layer.renderTextLayer; -PDFJS.Metadata = _metadata.Metadata; -PDFJS.SVGGraphics = _svg.SVGGraphics; -exports.globalScope = _global_scope2.default; -exports.PDFJS = PDFJS; + let params = Object.create(null); + var rangeTransport = null; + let worker = null; + let CMapReaderFactory = _dom_utils.DOMCMapReaderFactory; + for (var key in source) { + if (key === 'url' && typeof window !== 'undefined') { + params[key] = new URL(source[key], window.location).href; + continue; + } else if (key === 'range') { + rangeTransport = source[key]; + continue; + } else if (key === 'worker') { + worker = source[key]; + continue; + } else if (key === 'data' && !(source[key] instanceof Uint8Array)) { + var pdfBytes = source[key]; + if (typeof pdfBytes === 'string') { + params[key] = (0, _util.stringToBytes)(pdfBytes); + } else if (typeof pdfBytes === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) { + params[key] = new Uint8Array(pdfBytes); + } else if ((0, _util.isArrayBuffer)(pdfBytes)) { + params[key] = new Uint8Array(pdfBytes); + } else { + throw new Error('Invalid PDF binary data: either typed array, ' + 'string or array-like object is expected in the ' + 'data property.'); + } + continue; + } else if (key === 'CMapReaderFactory') { + CMapReaderFactory = source[key]; + continue; + } + params[key] = source[key]; + } + params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; + params.ignoreErrors = params.stopAtErrors !== true; + params.pdfBug = params.pdfBug === true; + const NativeImageDecoderValues = Object.values(_util.NativeImageDecoding); + if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) { + params.nativeImageDecoderSupport = _util.NativeImageDecoding.DECODE; + } + if (!Number.isInteger(params.maxImageSize)) { + params.maxImageSize = -1; + } + if (typeof params.isEvalSupported !== 'boolean') { + params.isEvalSupported = true; + } + if (typeof params.disableFontFace !== 'boolean') { + params.disableFontFace = false; + } + if (typeof params.disableRange !== 'boolean') { + params.disableRange = _api_compatibility.apiCompatibilityParams.disableRange || false; + } + if (typeof params.disableStream !== 'boolean') { + params.disableStream = _api_compatibility.apiCompatibilityParams.disableStream || false; + } + if (typeof params.disableAutoFetch !== 'boolean') { + params.disableAutoFetch = false; + } + if (typeof params.disableCreateObjectURL !== 'boolean') { + params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false; + } + (0, _util.setVerbosityLevel)(params.verbosity); + if (!worker) { + const workerParams = { + postMessageTransfers: params.postMessageTransfers, + verbosity: params.verbosity + }; + let workerPort = _worker_options.GlobalWorkerOptions.workerPort; + if (workerPort) { + workerParams.port = workerPort; + worker = PDFWorker.fromPort(workerParams); + } else { + worker = new PDFWorker(workerParams); + } + task._worker = worker; + } + var docId = task.docId; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error('Loading aborted'); + } + return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) { + if (task.destroyed) { + throw new Error('Loading aborted'); + } + let networkStream; + if (rangeTransport) { + networkStream = new _transport_stream.PDFDataTransportStream({ + length: params.length, + initialData: params.initialData, + disableRange: params.disableRange, + disableStream: params.disableStream + }, rangeTransport); + } else if (!params.data) { + networkStream = createPDFNetworkStream({ + url: params.url, + length: params.length, + httpHeaders: params.httpHeaders, + withCredentials: params.withCredentials, + rangeChunkSize: params.rangeChunkSize, + disableRange: params.disableRange, + disableStream: params.disableStream + }); + } + var messageHandler = new _util.MessageHandler(docId, workerId, worker.port); + messageHandler.postMessageTransfers = worker.postMessageTransfers; + var transport = new WorkerTransport(messageHandler, task, networkStream, params, CMapReaderFactory); + task._transport = transport; + messageHandler.send('Ready', null); + }); + }).catch(task._capability.reject); + return task; +} +function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { + if (worker.destroyed) { + return Promise.reject(new Error('Worker was destroyed')); + } + if (pdfDataRangeTransport) { + source.length = pdfDataRangeTransport.length; + source.initialData = pdfDataRangeTransport.initialData; + } + return worker.messageHandler.sendWithPromise('GetDocRequest', { + docId, + apiVersion: '2.0.447', + source: { + data: source.data, + url: source.url, + password: source.password, + disableAutoFetch: source.disableAutoFetch, + rangeChunkSize: source.rangeChunkSize, + length: source.length + }, + maxImageSize: source.maxImageSize, + disableFontFace: source.disableFontFace, + disableCreateObjectURL: source.disableCreateObjectURL, + postMessageTransfers: worker.postMessageTransfers, + docBaseUrl: source.docBaseUrl, + nativeImageDecoderSupport: source.nativeImageDecoderSupport, + ignoreErrors: source.ignoreErrors, + isEvalSupported: source.isEvalSupported + }).then(function (workerId) { + if (worker.destroyed) { + throw new Error('Worker was destroyed'); + } + return workerId; + }); +} +var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { + var nextDocumentId = 0; + function PDFDocumentLoadingTask() { + this._capability = (0, _util.createPromiseCapability)(); + this._transport = null; + this._worker = null; + this.docId = 'd' + nextDocumentId++; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + this.onUnsupportedFeature = null; + } + PDFDocumentLoadingTask.prototype = { + get promise() { + return this._capability.promise; + }, + destroy() { + this.destroyed = true; + var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); + return transportDestroyed.then(() => { + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; + } + }); + }, + then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) { + return this.promise.then.apply(this.promise, arguments); + } + }; + return PDFDocumentLoadingTask; +}(); +var PDFDataRangeTransport = function pdfDataRangeTransportClosure() { + function PDFDataRangeTransport(length, initialData) { + this.length = length; + this.initialData = initialData; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._readyCapability = (0, _util.createPromiseCapability)(); + } + PDFDataRangeTransport.prototype = { + addRangeListener: function PDFDataRangeTransport_addRangeListener(listener) { + this._rangeListeners.push(listener); + }, + addProgressListener: function PDFDataRangeTransport_addProgressListener(listener) { + this._progressListeners.push(listener); + }, + addProgressiveReadListener: function PDFDataRangeTransport_addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + }, + onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) { + var listeners = this._rangeListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](begin, chunk); + } + }, + onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) { + this._readyCapability.promise.then(() => { + var listeners = this._progressListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](loaded); + } + }); + }, + onDataProgressiveRead: function PDFDataRangeTransport_onDataProgress(chunk) { + this._readyCapability.promise.then(() => { + var listeners = this._progressiveReadListeners; + for (var i = 0, n = listeners.length; i < n; ++i) { + listeners[i](chunk); + } + }); + }, + transportReady: function PDFDataRangeTransport_transportReady() { + this._readyCapability.resolve(); + }, + requestDataRange: function PDFDataRangeTransport_requestDataRange(begin, end) { + (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange'); + }, + abort: function PDFDataRangeTransport_abort() {} + }; + return PDFDataRangeTransport; +}(); +var PDFDocumentProxy = function PDFDocumentProxyClosure() { + function PDFDocumentProxy(pdfInfo, transport, loadingTask) { + this.pdfInfo = pdfInfo; + this.transport = transport; + this.loadingTask = loadingTask; + } + PDFDocumentProxy.prototype = { + get numPages() { + return this.pdfInfo.numPages; + }, + get fingerprint() { + return this.pdfInfo.fingerprint; + }, + getPage(pageNumber) { + return this.transport.getPage(pageNumber); + }, + getPageIndex: function PDFDocumentProxy_getPageIndex(ref) { + return this.transport.getPageIndex(ref); + }, + getDestinations: function PDFDocumentProxy_getDestinations() { + return this.transport.getDestinations(); + }, + getDestination: function PDFDocumentProxy_getDestination(id) { + return this.transport.getDestination(id); + }, + getPageLabels: function PDFDocumentProxy_getPageLabels() { + return this.transport.getPageLabels(); + }, + getPageMode() { + return this.transport.getPageMode(); + }, + getAttachments: function PDFDocumentProxy_getAttachments() { + return this.transport.getAttachments(); + }, + getJavaScript() { + return this.transport.getJavaScript(); + }, + getOutline: function PDFDocumentProxy_getOutline() { + return this.transport.getOutline(); + }, + getMetadata: function PDFDocumentProxy_getMetadata() { + return this.transport.getMetadata(); + }, + getData: function PDFDocumentProxy_getData() { + return this.transport.getData(); + }, + getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() { + return this.transport.downloadInfoCapability.promise; + }, + getStats: function PDFDocumentProxy_getStats() { + return this.transport.getStats(); + }, + cleanup: function PDFDocumentProxy_cleanup() { + this.transport.startCleanup(); + }, + destroy: function PDFDocumentProxy_destroy() { + return this.loadingTask.destroy(); + }, + get loadingParams() { + return this.transport.loadingParams; + } + }; + return PDFDocumentProxy; +}(); +var PDFPageProxy = function PDFPageProxyClosure() { + function PDFPageProxy(pageIndex, pageInfo, transport, pdfBug = false) { + this.pageIndex = pageIndex; + this.pageInfo = pageInfo; + this.transport = transport; + this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this.cleanupAfterRender = false; + this.pendingCleanup = false; + this.intentStates = Object.create(null); + this.destroyed = false; + } + PDFPageProxy.prototype = { + get pageNumber() { + return this.pageIndex + 1; + }, + get rotate() { + return this.pageInfo.rotate; + }, + get ref() { + return this.pageInfo.ref; + }, + get userUnit() { + return this.pageInfo.userUnit; + }, + get view() { + return this.pageInfo.view; + }, + get pageSizeInches() { + const [x1, y1, x2, y2] = this.view, + userUnit = this.userUnit; + return { + width: (x2 - x1) / 72 * userUnit, + height: (y2 - y1) / 72 * userUnit + }; + }, + getViewport(scale, rotate = this.rotate, dontFlip = false) { + return new _util.PageViewport(this.view, scale, rotate, 0, 0, dontFlip); + }, + getAnnotations: function PDFPageProxy_getAnnotations(params) { + var intent = params && params.intent || null; + if (!this.annotationsPromise || this.annotationsIntent !== intent) { + this.annotationsPromise = this.transport.getAnnotations(this.pageIndex, intent); + this.annotationsIntent = intent; + } + return this.annotationsPromise; + }, + render: function PDFPageProxy_render(params) { + let stats = this._stats; + stats.time('Overall'); + this.pendingCleanup = false; + var renderingIntent = params.intent === 'print' ? 'print' : 'display'; + var canvasFactory = params.canvasFactory || new _dom_utils.DOMCanvasFactory(); + let webGLContext = new _webgl.WebGLContext({ enable: params.enableWebGL }); + if (!this.intentStates[renderingIntent]) { + this.intentStates[renderingIntent] = Object.create(null); + } + var intentState = this.intentStates[renderingIntent]; + if (!intentState.displayReadyCapability) { + intentState.receivingOperatorList = true; + intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + stats.time('Page Request'); + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageNumber - 1, + intent: renderingIntent, + renderInteractiveForms: params.renderInteractiveForms === true + }); + } + var complete = error => { + var i = intentState.renderTasks.indexOf(internalRenderTask); + if (i >= 0) { + intentState.renderTasks.splice(i, 1); + } + if (this.cleanupAfterRender) { + this.pendingCleanup = true; + } + this._tryCleanup(); + if (error) { + internalRenderTask.capability.reject(error); + } else { + internalRenderTask.capability.resolve(); + } + stats.timeEnd('Rendering'); + stats.timeEnd('Overall'); + }; + var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext, this._pdfBug); + internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print'; + if (!intentState.renderTasks) { + intentState.renderTasks = []; + } + intentState.renderTasks.push(internalRenderTask); + var renderTask = internalRenderTask.task; + intentState.displayReadyCapability.promise.then(transparency => { + if (this.pendingCleanup) { + complete(); + return; + } + stats.time('Rendering'); + internalRenderTask.initializeGraphics(transparency); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + }, + getOperatorList: function PDFPageProxy_getOperatorList() { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + var i = intentState.renderTasks.indexOf(opListTask); + if (i >= 0) { + intentState.renderTasks.splice(i, 1); + } + } + } + var renderingIntent = 'oplist'; + if (!this.intentStates[renderingIntent]) { + this.intentStates[renderingIntent] = Object.create(null); + } + var intentState = this.intentStates[renderingIntent]; + var opListTask; + if (!intentState.opListReadCapability) { + opListTask = {}; + opListTask.operatorListChanged = operatorListChanged; + intentState.receivingOperatorList = true; + intentState.opListReadCapability = (0, _util.createPromiseCapability)(); + intentState.renderTasks = []; + intentState.renderTasks.push(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageIndex, + intent: renderingIntent + }); + } + return intentState.opListReadCapability.promise; + }, + streamTextContent(params = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this.transport.messageHandler.sendWithStream('GetTextContent', { + pageIndex: this.pageNumber - 1, + normalizeWhitespace: params.normalizeWhitespace === true, + combineTextItems: params.disableCombineTextItems !== true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + size(textContent) { + return textContent.items.length; + } + }); + }, + getTextContent: function PDFPageProxy_getTextContent(params) { + params = params || {}; + let readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function ({ value, done }) { + if (done) { + resolve(textContent); + return; + } + _util.Util.extendObj(textContent.styles, value.styles); + _util.Util.appendToArray(textContent.items, value.items); + pump(); + }, reject); + } + let reader = readableStream.getReader(); + let textContent = { + items: [], + styles: Object.create(null) + }; + pump(); + }); + }, + _destroy: function PDFPageProxy_destroy() { + this.destroyed = true; + this.transport.pageCache[this.pageIndex] = null; + var waitOn = []; + Object.keys(this.intentStates).forEach(function (intent) { + if (intent === 'oplist') { + return; + } + var intentState = this.intentStates[intent]; + intentState.renderTasks.forEach(function (renderTask) { + var renderCompleted = renderTask.capability.promise.catch(function () {}); + waitOn.push(renderCompleted); + renderTask.cancel(); + }); + }, this); + this.objs.clear(); + this.annotationsPromise = null; + this.pendingCleanup = false; + return Promise.all(waitOn); + }, + cleanup(resetStats = false) { + this.pendingCleanup = true; + this._tryCleanup(resetStats); + }, + _tryCleanup(resetStats = false) { + if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) { + var intentState = this.intentStates[intent]; + return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList; + }, this)) { + return; + } + Object.keys(this.intentStates).forEach(function (intent) { + delete this.intentStates[intent]; + }, this); + this.objs.clear(); + this.annotationsPromise = null; + if (resetStats && this._stats instanceof _dom_utils.StatTimer) { + this._stats = new _dom_utils.StatTimer(); + } + this.pendingCleanup = false; + }, + _startRenderPage: function PDFPageProxy_startRenderPage(transparency, intent) { + var intentState = this.intentStates[intent]; + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.resolve(transparency); + } + }, + _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, intent) { + var intentState = this.intentStates[intent]; + var i, ii; + for (i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + for (i = 0; i < intentState.renderTasks.length; i++) { + intentState.renderTasks[i].operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + intentState.receivingOperatorList = false; + this._tryCleanup(); + } + }, + get stats() { + return this._stats instanceof _dom_utils.StatTimer ? this._stats : null; + } + }; + return PDFPageProxy; +}(); +class LoopbackPort { + constructor(defer) { + this._listeners = []; + this._defer = defer; + this._deferred = Promise.resolve(undefined); + } + postMessage(obj, transfers) { + function cloneValue(value) { + if (typeof value !== 'object' || value === null) { + return value; + } + if (cloned.has(value)) { + return cloned.get(value); + } + var result; + var buffer; + if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { + var transferable = transfers && transfers.includes(buffer); + if (value === buffer) { + result = value; + } else if (transferable) { + result = new value.constructor(buffer, value.byteOffset, value.byteLength); + } else { + result = new value.constructor(value); + } + cloned.set(value, result); + return result; + } + result = Array.isArray(value) ? [] : {}; + cloned.set(value, result); + for (var i in value) { + var desc, + p = value; + while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { + p = Object.getPrototypeOf(p); + } + if (typeof desc.value === 'undefined' || typeof desc.value === 'function') { + continue; + } + result[i] = cloneValue(desc.value); + } + return result; + } + if (!this._defer) { + this._listeners.forEach(function (listener) { + listener.call(this, { data: obj }); + }, this); + return; + } + var cloned = new WeakMap(); + var e = { data: cloneValue(obj) }; + this._deferred.then(() => { + this._listeners.forEach(function (listener) { + listener.call(this, e); + }, this); + }); + } + addEventListener(name, listener) { + this._listeners.push(listener); + } + removeEventListener(name, listener) { + var i = this._listeners.indexOf(listener); + this._listeners.splice(i, 1); + } + terminate() { + this._listeners = []; + } +} +var PDFWorker = function PDFWorkerClosure() { + let nextFakeWorkerId = 0; + function getWorkerSrc() { + if (_worker_options.GlobalWorkerOptions.workerSrc) { + return _worker_options.GlobalWorkerOptions.workerSrc; + } + if (typeof workerSrc !== 'undefined') { + return workerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + function getMainThreadWorkerMessageHandler() { + if (typeof window === 'undefined') { + return null; + } + return window.pdfjsWorker && window.pdfjsWorker.WorkerMessageHandler; + } + let fakeWorkerFilesLoadedCapability; + function setupFakeWorkerGlobal() { + if (fakeWorkerFilesLoadedCapability) { + return fakeWorkerFilesLoadedCapability.promise; + } + fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)(); + let mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); + if (mainWorkerMessageHandler) { + fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler); + return fakeWorkerFilesLoadedCapability.promise; + } + let loader = fakeWorkerFilesLoader || function (callback) { + _util.Util.loadScript(getWorkerSrc(), function () { + callback(window.pdfjsWorker.WorkerMessageHandler); + }); + }; + loader(fakeWorkerFilesLoadedCapability.resolve); + return fakeWorkerFilesLoadedCapability.promise; + } + function createCDNWrapper(url) { + var wrapper = 'importScripts(\'' + url + '\');'; + return URL.createObjectURL(new Blob([wrapper])); + } + let pdfWorkerPorts = new WeakMap(); + function PDFWorker({ name = null, port = null, postMessageTransfers = true, verbosity = null } = {}) { + if (port && pdfWorkerPorts.has(port)) { + throw new Error('Cannot use more than one PDFWorker per port'); + } + this.name = name; + this.destroyed = false; + this.postMessageTransfers = postMessageTransfers !== false; + this.verbosity = (0, _util.isNum)(verbosity) ? verbosity : (0, _util.getVerbosityLevel)(); + this._readyCapability = (0, _util.createPromiseCapability)(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + pdfWorkerPorts.set(port, this); + this._initializeFromPort(port); + return; + } + this._initialize(); + } + PDFWorker.prototype = { + get promise() { + return this._readyCapability.promise; + }, + get port() { + return this._port; + }, + get messageHandler() { + return this._messageHandler; + }, + _initializeFromPort: function PDFWorker_initializeFromPort(port) { + this._port = port; + this._messageHandler = new _util.MessageHandler('main', 'worker', port); + this._messageHandler.on('ready', function () {}); + this._readyCapability.resolve(); + }, + _initialize: function PDFWorker_initialize() { + if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { + var workerSrc = getWorkerSrc(); + try { + var worker = new Worker(workerSrc); + var messageHandler = new _util.MessageHandler('main', 'worker', worker); + var terminateEarly = () => { + worker.removeEventListener('error', onWorkerError); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error('Worker was destroyed')); + } else { + this._setupFakeWorker(); + } + }; + var onWorkerError = () => { + if (!this._webWorker) { + terminateEarly(); + } + }; + worker.addEventListener('error', onWorkerError); + messageHandler.on('test', data => { + worker.removeEventListener('error', onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + var supportTypedArray = data && data.supportTypedArray; + if (supportTypedArray) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + if (!data.supportTransfers) { + this.postMessageTransfers = false; + } + this._readyCapability.resolve(); + messageHandler.send('configure', { verbosity: this.verbosity }); + } else { + this._setupFakeWorker(); + messageHandler.destroy(); + worker.terminate(); + } + }); + messageHandler.on('ready', data => { + worker.removeEventListener('error', onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch (e) { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + let testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]); + try { + messageHandler.send('test', testObj, [testObj.buffer]); + } catch (ex) { + (0, _util.info)('Cannot use postMessage transfers'); + testObj[0] = 0; + messageHandler.send('test', testObj); + } + }; + sendTest(); + return; + } catch (e) { + (0, _util.info)('The worker has been disabled.'); + } + } + this._setupFakeWorker(); + }, + _setupFakeWorker: function PDFWorker_setupFakeWorker() { + if (!isWorkerDisabled) { + (0, _util.warn)('Setting up fake worker.'); + isWorkerDisabled = true; + } + setupFakeWorkerGlobal().then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error('Worker was destroyed')); + return; + } + var isTypedArraysPresent = Uint8Array !== Float32Array; + var port = new LoopbackPort(isTypedArraysPresent); + this._port = port; + var id = 'fake' + nextFakeWorkerId++; + var workerHandler = new _util.MessageHandler(id + '_worker', id, port); + WorkerMessageHandler.setup(workerHandler, port); + var messageHandler = new _util.MessageHandler(id, id + '_worker', port); + this._messageHandler = messageHandler; + this._readyCapability.resolve(); + }); + }, + destroy: function PDFWorker_destroy() { + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + pdfWorkerPorts.delete(this._port); + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + }; + PDFWorker.fromPort = function (params) { + if (pdfWorkerPorts.has(params.port)) { + return pdfWorkerPorts.get(params.port); + } + return new PDFWorker(params); + }; + PDFWorker.getWorkerSrc = function () { + return getWorkerSrc(); + }; + return PDFWorker; +}(); +var WorkerTransport = function WorkerTransportClosure() { + function WorkerTransport(messageHandler, loadingTask, networkStream, params, CMapReaderFactory) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new _font_loader.FontLoader(loadingTask.docId); + this._params = params; + this.CMapReaderFactory = new CMapReaderFactory({ + baseUrl: params.cMapUrl, + isCompressed: params.cMapPacked + }); + this.destroyed = false; + this.destroyCapability = null; + this._passwordCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.pageCache = []; + this.pagePromises = []; + this.downloadInfoCapability = (0, _util.createPromiseCapability)(); + this.setupMessageHandler(); + } + WorkerTransport.prototype = { + destroy: function WorkerTransport_destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = (0, _util.createPromiseCapability)(); + if (this._passwordCapability) { + this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback')); + } + var waitOn = []; + this.pageCache.forEach(function (page) { + if (page) { + waitOn.push(page._destroy()); + } + }); + this.pageCache = []; + this.pagePromises = []; + var terminated = this.messageHandler.sendWithPromise('Terminate', null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + this.fontLoader.clear(); + if (this._networkStream) { + this._networkStream.cancelAllRequests(); + } + if (this.messageHandler) { + this.messageHandler.destroy(); + this.messageHandler = null; + } + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + }, + setupMessageHandler: function WorkerTransport_setupMessageHandler() { + var messageHandler = this.messageHandler; + var loadingTask = this.loadingTask; + messageHandler.on('GetReader', function (data, sink) { + (0, _util.assert)(this._networkStream); + this._fullReader = this._networkStream.getFullReader(); + this._fullReader.onProgress = evt => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + sink.onPull = () => { + this._fullReader.read().then(function ({ value, done }) { + if (done) { + sink.close(); + return; + } + (0, _util.assert)((0, _util.isArrayBuffer)(value)); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + this._fullReader.cancel(reason); + }; + }, this); + messageHandler.on('ReaderHeadersReady', function (data) { + let headersCapability = (0, _util.createPromiseCapability)(); + let fullReader = this._fullReader; + fullReader.headersReady.then(() => { + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (this._lastProgress) { + let loadingTask = this.loadingTask; + if (loadingTask.onProgress) { + loadingTask.onProgress(this._lastProgress); + } + } + fullReader.onProgress = evt => { + let loadingTask = this.loadingTask; + if (loadingTask.onProgress) { + loadingTask.onProgress({ + loaded: evt.loaded, + total: evt.total + }); + } + }; + } + headersCapability.resolve({ + isStreamingSupported: fullReader.isStreamingSupported, + isRangeSupported: fullReader.isRangeSupported, + contentLength: fullReader.contentLength + }); + }, headersCapability.reject); + return headersCapability.promise; + }, this); + messageHandler.on('GetRangeReader', function (data, sink) { + (0, _util.assert)(this._networkStream); + let _rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + sink.onPull = () => { + _rangeReader.read().then(function ({ value, done }) { + if (done) { + sink.close(); + return; + } + (0, _util.assert)((0, _util.isArrayBuffer)(value)); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + _rangeReader.cancel(reason); + }; + }, this); + messageHandler.on('GetDoc', function transportDoc({ pdfInfo }) { + this.numPages = pdfInfo.numPages; + var loadingTask = this.loadingTask; + var pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask); + this.pdfDocument = pdfDocument; + loadingTask._capability.resolve(pdfDocument); + }, this); + messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) { + this._passwordCapability = (0, _util.createPromiseCapability)(); + if (loadingTask.onPassword) { + var updatePassword = password => { + this._passwordCapability.resolve({ password }); + }; + loadingTask.onPassword(updatePassword, exception.code); + } else { + this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); + } + return this._passwordCapability.promise; + }, this); + messageHandler.on('PasswordException', function transportPasswordException(exception) { + loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code)); + }, this); + messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) { + this.loadingTask._capability.reject(new _util.InvalidPDFException(exception.message)); + }, this); + messageHandler.on('MissingPDF', function transportMissingPDF(exception) { + this.loadingTask._capability.reject(new _util.MissingPDFException(exception.message)); + }, this); + messageHandler.on('UnexpectedResponse', function transportUnexpectedResponse(exception) { + this.loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status)); + }, this); + messageHandler.on('UnknownError', function transportUnknownError(exception) { + this.loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details)); + }, this); + messageHandler.on('DataLoaded', function transportPage(data) { + this.downloadInfoCapability.resolve(data); + }, this); + messageHandler.on('PDFManagerReady', function transportPage(data) {}, this); + messageHandler.on('StartRenderPage', function transportRender(data) { + if (this.destroyed) { + return; + } + var page = this.pageCache[data.pageIndex]; + page._stats.timeEnd('Page Request'); + page._startRenderPage(data.transparency, data.intent); + }, this); + messageHandler.on('RenderPageChunk', function transportRender(data) { + if (this.destroyed) { + return; + } + var page = this.pageCache[data.pageIndex]; + page._renderPageChunk(data.operatorList, data.intent); + }, this); + messageHandler.on('commonobj', function transportObj(data) { + if (this.destroyed) { + return; + } + var id = data[0]; + var type = data[1]; + if (this.commonObjs.hasData(id)) { + return; + } + switch (type) { + case 'Font': + var exportedData = data[2]; + let params = this._params; + if ('error' in exportedData) { + var exportedError = exportedData.error; + (0, _util.warn)('Error during font loading: ' + exportedError); + this.commonObjs.resolve(id, exportedError); + break; + } + var fontRegistry = null; + if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) { + fontRegistry = { + registerFont(font, url) { + _global_scope2.default['FontInspector'].fontAdded(font, url); + } + }; + } + var font = new _font_loader.FontFaceObject(exportedData, { + isEvalSupported: params.isEvalSupported, + disableFontFace: params.disableFontFace, + fontRegistry + }); + var fontReady = fontObjs => { + this.commonObjs.resolve(id, font); + }; + this.fontLoader.bind([font], fontReady); + break; + case 'FontPath': + this.commonObjs.resolve(id, data[2]); + break; + default: + throw new Error(`Got unknown common object type ${type}`); + } + }, this); + messageHandler.on('obj', function transportObj(data) { + if (this.destroyed) { + return; + } + var id = data[0]; + var pageIndex = data[1]; + var type = data[2]; + var pageProxy = this.pageCache[pageIndex]; + var imageData; + if (pageProxy.objs.hasData(id)) { + return; + } + switch (type) { + case 'JpegStream': + imageData = data[3]; + return new Promise((resolve, reject) => { + const img = new Image(); + img.onload = function () { + resolve(img); + }; + img.onerror = function () { + reject(new Error('Error during JPEG image loading')); + }; + img.src = imageData; + }).then(img => { + pageProxy.objs.resolve(id, img); + }); + case 'Image': + imageData = data[3]; + pageProxy.objs.resolve(id, imageData); + var MAX_IMAGE_SIZE_TO_STORE = 8000000; + if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { + pageProxy.cleanupAfterRender = true; + } + break; + default: + throw new Error(`Got unknown object type ${type}`); + } + }, this); + messageHandler.on('DocProgress', function transportDocProgress(data) { + if (this.destroyed) { + return; + } + var loadingTask = this.loadingTask; + if (loadingTask.onProgress) { + loadingTask.onProgress({ + loaded: data.loaded, + total: data.total + }); + } + }, this); + messageHandler.on('PageError', function transportError(data) { + if (this.destroyed) { + return; + } + var page = this.pageCache[data.pageNum - 1]; + var intentState = page.intentStates[data.intent]; + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(data.error); + } else { + throw new Error(data.error); + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (var i = 0; i < intentState.renderTasks.length; i++) { + intentState.renderTasks[i].operatorListChanged(); + } + } + }, this); + messageHandler.on('UnsupportedFeature', function (data) { + if (this.destroyed) { + return; + } + let loadingTask = this.loadingTask; + if (loadingTask.onUnsupportedFeature) { + loadingTask.onUnsupportedFeature(data.featureId); + } + }, this); + messageHandler.on('JpegDecode', function (data) { + if (this.destroyed) { + return Promise.reject(new Error('Worker was destroyed')); + } + if (typeof document === 'undefined') { + return Promise.reject(new Error('"document" is not defined.')); + } + var imageUrl = data[0]; + var components = data[1]; + if (components !== 3 && components !== 1) { + return Promise.reject(new Error('Only 3 components or 1 component can be returned')); + } + return new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { + var width = img.width; + var height = img.height; + var size = width * height; + var rgbaLength = size * 4; + var buf = new Uint8Array(size * components); + var tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = width; + tmpCanvas.height = height; + var tmpCtx = tmpCanvas.getContext('2d'); + tmpCtx.drawImage(img, 0, 0); + var data = tmpCtx.getImageData(0, 0, width, height).data; + var i, j; + if (components === 3) { + for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) { + buf[j] = data[i]; + buf[j + 1] = data[i + 1]; + buf[j + 2] = data[i + 2]; + } + } else if (components === 1) { + for (i = 0, j = 0; i < rgbaLength; i += 4, j++) { + buf[j] = data[i]; + } + } + resolve({ + data: buf, + width, + height + }); + }; + img.onerror = function () { + reject(new Error('JpegDecode failed to load image')); + }; + img.src = imageUrl; + }); + }, this); + messageHandler.on('FetchBuiltInCMap', function (data) { + if (this.destroyed) { + return Promise.reject(new Error('Worker was destroyed')); + } + return this.CMapReaderFactory.fetch({ name: data.name }); + }, this); + }, + getData: function WorkerTransport_getData() { + return this.messageHandler.sendWithPromise('GetData', null); + }, + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) { + return Promise.reject(new Error('Invalid page request')); + } + var pageIndex = pageNumber - 1; + if (pageIndex in this.pagePromises) { + return this.pagePromises[pageIndex]; + } + var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex }).then(pageInfo => { + if (this.destroyed) { + throw new Error('Transport destroyed'); + } + let page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.pageCache[pageIndex] = page; + return page; + }); + this.pagePromises[pageIndex] = promise; + return promise; + }, + getPageIndex: function WorkerTransport_getPageIndexByRef(ref) { + return this.messageHandler.sendWithPromise('GetPageIndex', { ref }).catch(function (reason) { + return Promise.reject(new Error(reason)); + }); + }, + getAnnotations: function WorkerTransport_getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise('GetAnnotations', { + pageIndex, + intent + }); + }, + getDestinations: function WorkerTransport_getDestinations() { + return this.messageHandler.sendWithPromise('GetDestinations', null); + }, + getDestination: function WorkerTransport_getDestination(id) { + return this.messageHandler.sendWithPromise('GetDestination', { id }); + }, + getPageLabels: function WorkerTransport_getPageLabels() { + return this.messageHandler.sendWithPromise('GetPageLabels', null); + }, + getPageMode() { + return this.messageHandler.sendWithPromise('GetPageMode', null); + }, + getAttachments: function WorkerTransport_getAttachments() { + return this.messageHandler.sendWithPromise('GetAttachments', null); + }, + getJavaScript: function WorkerTransport_getJavaScript() { + return this.messageHandler.sendWithPromise('GetJavaScript', null); + }, + getOutline: function WorkerTransport_getOutline() { + return this.messageHandler.sendWithPromise('GetOutline', null); + }, + getMetadata: function WorkerTransport_getMetadata() { + return this.messageHandler.sendWithPromise('GetMetadata', null).then(results => { + return { + info: results[0], + metadata: results[1] ? new _metadata.Metadata(results[1]) : null, + contentDispositionFilename: this._fullReader ? this._fullReader.filename : null + }; + }); + }, + getStats: function WorkerTransport_getStats() { + return this.messageHandler.sendWithPromise('GetStats', null); + }, + startCleanup: function WorkerTransport_startCleanup() { + this.messageHandler.sendWithPromise('Cleanup', null).then(() => { + for (var i = 0, ii = this.pageCache.length; i < ii; i++) { + var page = this.pageCache[i]; + if (page) { + page.cleanup(); + } + } + this.commonObjs.clear(); + this.fontLoader.clear(); + }); + }, + get loadingParams() { + let params = this._params; + return (0, _util.shadow)(this, 'loadingParams', { + disableRange: params.disableRange, + disableStream: params.disableStream, + disableAutoFetch: params.disableAutoFetch, + disableCreateObjectURL: params.disableCreateObjectURL + }); + } + }; + return WorkerTransport; +}(); +var PDFObjects = function PDFObjectsClosure() { + function PDFObjects() { + this.objs = Object.create(null); + } + PDFObjects.prototype = { + ensureObj: function PDFObjects_ensureObj(objId) { + if (this.objs[objId]) { + return this.objs[objId]; + } + var obj = { + capability: (0, _util.createPromiseCapability)(), + data: null, + resolved: false + }; + this.objs[objId] = obj; + return obj; + }, + get: function PDFObjects_get(objId, callback) { + if (callback) { + this.ensureObj(objId).capability.promise.then(callback); + return null; + } + var obj = this.objs[objId]; + if (!obj || !obj.resolved) { + throw new Error(`Requesting object that isn't resolved yet ${objId}`); + } + return obj.data; + }, + resolve: function PDFObjects_resolve(objId, data) { + var obj = this.ensureObj(objId); + obj.resolved = true; + obj.data = data; + obj.capability.resolve(data); + }, + isResolved: function PDFObjects_isResolved(objId) { + var objs = this.objs; + if (!objs[objId]) { + return false; + } + return objs[objId].resolved; + }, + hasData: function PDFObjects_hasData(objId) { + return this.isResolved(objId); + }, + getData: function PDFObjects_getData(objId) { + var objs = this.objs; + if (!objs[objId] || !objs[objId].resolved) { + return null; + } + return objs[objId].data; + }, + clear: function PDFObjects_clear() { + this.objs = Object.create(null); + } + }; + return PDFObjects; +}(); +var RenderTask = function RenderTaskClosure() { + function RenderTask(internalRenderTask) { + this._internalRenderTask = internalRenderTask; + this.onContinue = null; + } + RenderTask.prototype = { + get promise() { + return this._internalRenderTask.capability.promise; + }, + cancel: function RenderTask_cancel() { + this._internalRenderTask.cancel(); + }, + then: function RenderTask_then(onFulfilled, onRejected) { + return this.promise.then.apply(this.promise, arguments); + } + }; + return RenderTask; +}(); +var InternalRenderTask = function InternalRenderTaskClosure() { + let canvasInRendering = new WeakMap(); + function InternalRenderTask(callback, params, objs, commonObjs, operatorList, pageNumber, canvasFactory, webGLContext, pdfBug = false) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.operatorListIdx = null; + this.operatorList = operatorList; + this.pageNumber = pageNumber; + this.canvasFactory = canvasFactory; + this.webGLContext = webGLContext; + this._pdfBug = pdfBug; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this.useRequestAnimationFrame = false; + this.cancelled = false; + this.capability = (0, _util.createPromiseCapability)(); + this.task = new RenderTask(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; + } + InternalRenderTask.prototype = { + initializeGraphics: function InternalRenderTask_initializeGraphics(transparency) { + if (this._canvas) { + if (canvasInRendering.has(this._canvas)) { + throw new Error('Cannot use the same canvas during multiple render() operations. ' + 'Use different canvas or ensure previous operations were ' + 'cancelled or completed.'); + } + canvasInRendering.set(this._canvas, this); + } + if (this.cancelled) { + return; + } + if (this._pdfBug && _global_scope2.default.StepperManager && _global_scope2.default.StepperManager.enabled) { + this.stepper = _global_scope2.default.StepperManager.create(this.pageNumber - 1); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + var params = this.params; + this.gfx = new _canvas.CanvasGraphics(params.canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, params.imageLayer); + this.gfx.beginDrawing({ + transform: params.transform, + viewport: params.viewport, + transparency, + background: params.background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + if (this.graphicsReadyCallback) { + this.graphicsReadyCallback(); + } + }, + cancel: function InternalRenderTask_cancel() { + this.running = false; + this.cancelled = true; + if (this._canvas) { + canvasInRendering.delete(this._canvas); + } + this.callback(new _dom_utils.RenderingCancelledException('Rendering cancelled, page ' + this.pageNumber, 'canvas')); + }, + operatorListChanged: function InternalRenderTask_operatorListChanged() { + if (!this.graphicsReady) { + if (!this.graphicsReadyCallback) { + this.graphicsReadyCallback = this._continueBound; + } + return; + } + if (this.stepper) { + this.stepper.updateOperatorList(this.operatorList); + } + if (this.running) { + return; + } + this._continue(); + }, + _continue: function InternalRenderTask__continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + }, + _scheduleNext: function InternalRenderTask__scheduleNext() { + if (this.useRequestAnimationFrame && typeof window !== 'undefined') { + window.requestAnimationFrame(this._nextBound); + } else { + Promise.resolve(undefined).then(this._nextBound); + } + }, + _next: function InternalRenderTask__next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + if (this._canvas) { + canvasInRendering.delete(this._canvas); + } + this.callback(); + } + } + } + }; + return InternalRenderTask; +}(); +var version, build; +{ + exports.version = version = '2.0.447'; + exports.build = build = 'c0b22da0'; +} +exports.getDocument = getDocument; +exports.LoopbackPort = LoopbackPort; +exports.PDFDataRangeTransport = PDFDataRangeTransport; +exports.PDFWorker = PDFWorker; +exports.PDFDocumentProxy = PDFDocumentProxy; +exports.PDFPageProxy = PDFPageProxy; +exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; +exports.version = version; +exports.build = build; /***/ }), -/* 14 */ +/* 10 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -7843,31 +6435,29 @@ var IsEvalSupportedCached = { } }; var FontFaceObject = function FontFaceObjectClosure() { - function FontFaceObject(translatedData, options) { + function FontFaceObject(translatedData, { isEvalSupported = true, disableFontFace = false, fontRegistry = null }) { this.compiledGlyphs = Object.create(null); for (var i in translatedData) { this[i] = translatedData[i]; } - this.options = options; + this.isEvalSupported = isEvalSupported !== false; + this.disableFontFace = disableFontFace === true; + this.fontRegistry = fontRegistry; } FontFaceObject.prototype = { createNativeFontFace: function FontFaceObject_createNativeFontFace() { throw new Error('Not implemented: createNativeFontFace'); }, createFontFaceRule: function FontFaceObject_createFontFaceRule() { - if (!this.data) { - return null; - } - if (this.options.disableFontFace) { - this.disableFontFace = true; + if (!this.data || this.disableFontFace) { return null; } var data = (0, _util.bytesToString)(new Uint8Array(this.data)); var fontName = this.loadedName; var url = 'url(data:' + this.mimetype + ';base64,' + btoa(data) + ');'; var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}'; - if (this.options.fontRegistry) { - this.options.fontRegistry.registerFont(this, url); + if (this.fontRegistry) { + this.fontRegistry.registerFont(this, url); } return rule; }, @@ -7875,7 +6465,7 @@ var FontFaceObject = function FontFaceObjectClosure() { if (!(character in this.compiledGlyphs)) { var cmds = objs.get(this.loadedName + '_path_' + character); var current, i, len; - if (this.options.isEvalSupported && IsEvalSupportedCached.value) { + if (this.isEvalSupported && IsEvalSupportedCached.value) { var args, js = ''; for (i = 0, len = cmds.length; i < len; i++) { @@ -7909,7 +6499,7 @@ exports.FontFaceObject = FontFaceObject; exports.FontLoader = FontLoader; /***/ }), -/* 15 */ +/* 11 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -7922,7 +6512,7 @@ exports.CanvasGraphics = undefined; var _util = __w_pdfjs_require__(0); -var _pattern_helper = __w_pdfjs_require__(16); +var _pattern_helper = __w_pdfjs_require__(12); var MIN_FONT_SIZE = 16; var MAX_FONT_SIZE = 100; @@ -9650,7 +8240,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() { exports.CanvasGraphics = CanvasGraphics; /***/ }), -/* 16 */ +/* 12 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -10032,7 +8622,102 @@ exports.getShadingPatternFromIR = getShadingPatternFromIR; exports.TilingPattern = TilingPattern; /***/ }), -/* 17 */ +/* 13 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Metadata = undefined; + +var _util = __w_pdfjs_require__(0); + +var _dom_utils = __w_pdfjs_require__(1); + +class Metadata { + constructor(data) { + (0, _util.assert)(typeof data === 'string', 'Metadata: input is not a string'); + data = this._repair(data); + let parser = new _dom_utils.SimpleXMLParser(); + data = parser.parseFromString(data); + this._metadata = Object.create(null); + this._parse(data); + } + _repair(data) { + return data.replace(/>\\376\\377([^<]+)/g, function (all, codes) { + let bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { + return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); + }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { + switch (name) { + case 'amp': + return '&'; + case 'apos': + return '\''; + case 'gt': + return '>'; + case 'lt': + return '<'; + case 'quot': + return '\"'; + } + throw new Error(`_repair: ${name} isn't defined.`); + }); + let chars = ''; + for (let i = 0, ii = bytes.length; i < ii; i += 2) { + let code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); + if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { + chars += String.fromCharCode(code); + } else { + chars += '&#x' + (0x10000 + code).toString(16).substring(1) + ';'; + } + } + return '>' + chars; + }); + } + _parse(domDocument) { + let rdf = domDocument.documentElement; + if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { + rdf = rdf.firstChild; + while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') { + rdf = rdf.nextSibling; + } + } + let nodeName = rdf ? rdf.nodeName.toLowerCase() : null; + if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) { + return; + } + let children = rdf.childNodes; + for (let i = 0, ii = children.length; i < ii; i++) { + let desc = children[i]; + if (desc.nodeName.toLowerCase() !== 'rdf:description') { + continue; + } + for (let j = 0, jj = desc.childNodes.length; j < jj; j++) { + if (desc.childNodes[j].nodeName.toLowerCase() !== '#text') { + let entry = desc.childNodes[j]; + let name = entry.nodeName.toLowerCase(); + this._metadata[name] = entry.textContent.trim(); + } + } + } + } + get(name) { + return this._metadata[name] || null; + } + getAll() { + return this._metadata; + } + has(name) { + return typeof this._metadata[name] !== 'undefined'; + } +} +exports.Metadata = Metadata; + +/***/ }), +/* 14 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -10272,7 +8957,7 @@ var PDFDataTransportStream = function PDFDataTransportStreamClosure() { exports.PDFDataTransportStream = PDFDataTransportStream; /***/ }), -/* 18 */ +/* 15 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -10654,6 +9339,1292 @@ var WebGLUtils = function WebGLUtilsClosure() { }(); exports.WebGLContext = WebGLContext; +/***/ }), +/* 16 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.renderTextLayer = undefined; + +var _util = __w_pdfjs_require__(0); + +var _global_scope = __w_pdfjs_require__(2); + +var _global_scope2 = _interopRequireDefault(_global_scope); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var renderTextLayer = function renderTextLayerClosure() { + var MAX_TEXT_DIVS_TO_RENDER = 100000; + var NonWhitespaceRegexp = /\S/; + function isAllWhitespace(str) { + return !NonWhitespaceRegexp.test(str); + } + var styleBuf = ['left: ', 0, 'px; top: ', 0, 'px; font-size: ', 0, 'px; font-family: ', '', ';']; + function appendText(task, geom, styles) { + var textDiv = document.createElement('div'); + var textDivProperties = { + style: null, + angle: 0, + canvasWidth: 0, + isWhitespace: false, + originalTransform: null, + paddingBottom: 0, + paddingLeft: 0, + paddingRight: 0, + paddingTop: 0, + scale: 1 + }; + task._textDivs.push(textDiv); + if (isAllWhitespace(geom.str)) { + textDivProperties.isWhitespace = true; + task._textDivProperties.set(textDiv, textDivProperties); + return; + } + var tx = _util.Util.transform(task._viewport.transform, geom.transform); + var angle = Math.atan2(tx[1], tx[0]); + var style = styles[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); + var fontAscent = fontHeight; + if (style.ascent) { + fontAscent = style.ascent * fontAscent; + } else if (style.descent) { + fontAscent = (1 + style.descent) * fontAscent; + } + var left; + var top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + styleBuf[1] = left; + styleBuf[3] = top; + styleBuf[5] = fontHeight; + styleBuf[7] = style.fontFamily; + textDivProperties.style = styleBuf.join(''); + textDiv.setAttribute('style', textDivProperties.style); + textDiv.textContent = geom.str; + if (task._fontInspectorEnabled) { + textDiv.dataset.fontName = geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + if (geom.str.length > 1) { + if (style.vertical) { + textDivProperties.canvasWidth = geom.height * task._viewport.scale; + } else { + textDivProperties.canvasWidth = geom.width * task._viewport.scale; + } + } + task._textDivProperties.set(textDiv, textDivProperties); + if (task._textContentStream) { + task._layoutText(textDiv); + } + if (task._enhanceTextSelection) { + var angleCos = 1, + angleSin = 0; + if (angle !== 0) { + angleCos = Math.cos(angle); + angleSin = Math.sin(angle); + } + var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; + var divHeight = fontHeight; + var m, b; + if (angle !== 0) { + m = [angleCos, angleSin, -angleSin, angleCos, left, top]; + b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); + } else { + b = [left, top, left + divWidth, top + divHeight]; + } + task._bounds.push({ + left: b[0], + top: b[1], + right: b[2], + bottom: b[3], + div: textDiv, + size: [divWidth, divHeight], + m + }); + } + } + function render(task) { + if (task._canceled) { + return; + } + var textDivs = task._textDivs; + var capability = task._capability; + var textDivsLength = textDivs.length; + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + task._renderingDone = true; + capability.resolve(); + return; + } + if (!task._textContentStream) { + for (var i = 0; i < textDivsLength; i++) { + task._layoutText(textDivs[i]); + } + } + task._renderingDone = true; + capability.resolve(); + } + function expand(task) { + var bounds = task._bounds; + var viewport = task._viewport; + var expanded = expandBounds(viewport.width, viewport.height, bounds); + for (var i = 0; i < expanded.length; i++) { + var div = bounds[i].div; + var divProperties = task._textDivProperties.get(div); + if (divProperties.angle === 0) { + divProperties.paddingLeft = bounds[i].left - expanded[i].left; + divProperties.paddingTop = bounds[i].top - expanded[i].top; + divProperties.paddingRight = expanded[i].right - bounds[i].right; + divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; + task._textDivProperties.set(div, divProperties); + continue; + } + var e = expanded[i], + b = bounds[i]; + var m = b.m, + c = m[0], + s = m[1]; + var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; + var ts = new Float64Array(64); + points.forEach(function (p, i) { + var t = _util.Util.applyTransform(p, m); + ts[i + 0] = c && (e.left - t[0]) / c; + ts[i + 4] = s && (e.top - t[1]) / s; + ts[i + 8] = c && (e.right - t[0]) / c; + ts[i + 12] = s && (e.bottom - t[1]) / s; + ts[i + 16] = s && (e.left - t[0]) / -s; + ts[i + 20] = c && (e.top - t[1]) / c; + ts[i + 24] = s && (e.right - t[0]) / -s; + ts[i + 28] = c && (e.bottom - t[1]) / c; + ts[i + 32] = c && (e.left - t[0]) / -c; + ts[i + 36] = s && (e.top - t[1]) / -s; + ts[i + 40] = c && (e.right - t[0]) / -c; + ts[i + 44] = s && (e.bottom - t[1]) / -s; + ts[i + 48] = s && (e.left - t[0]) / s; + ts[i + 52] = c && (e.top - t[1]) / -c; + ts[i + 56] = s && (e.right - t[0]) / s; + ts[i + 60] = c && (e.bottom - t[1]) / -c; + }); + var findPositiveMin = function (ts, offset, count) { + var result = 0; + for (var i = 0; i < count; i++) { + var t = ts[offset++]; + if (t > 0) { + result = result ? Math.min(t, result) : t; + } + } + return result; + }; + var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); + divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; + divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; + divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; + divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; + task._textDivProperties.set(div, divProperties); + } + } + function expandBounds(width, height, boxes) { + var bounds = boxes.map(function (box, i) { + return { + x1: box.left, + y1: box.top, + x2: box.right, + y2: box.bottom, + index: i, + x1New: undefined, + x2New: undefined + }; + }); + expandBoundsLTR(width, bounds); + var expanded = new Array(boxes.length); + bounds.forEach(function (b) { + var i = b.index; + expanded[i] = { + left: b.x1New, + top: 0, + right: b.x2New, + bottom: 0 + }; + }); + boxes.map(function (box, i) { + var e = expanded[i], + b = bounds[i]; + b.x1 = box.top; + b.y1 = width - e.right; + b.x2 = box.bottom; + b.y2 = width - e.left; + b.index = i; + b.x1New = undefined; + b.x2New = undefined; + }); + expandBoundsLTR(height, bounds); + bounds.forEach(function (b) { + var i = b.index; + expanded[i].top = b.x1New; + expanded[i].bottom = b.x2New; + }); + return expanded; + } + function expandBoundsLTR(width, bounds) { + bounds.sort(function (a, b) { + return a.x1 - b.x1 || a.index - b.index; + }); + var fakeBoundary = { + x1: -Infinity, + y1: -Infinity, + x2: 0, + y2: Infinity, + index: -1, + x1New: 0, + x2New: 0 + }; + var horizon = [{ + start: -Infinity, + end: Infinity, + boundary: fakeBoundary + }]; + bounds.forEach(function (boundary) { + var i = 0; + while (i < horizon.length && horizon[i].end <= boundary.y1) { + i++; + } + var j = horizon.length - 1; + while (j >= 0 && horizon[j].start >= boundary.y2) { + j--; + } + var horizonPart, affectedBoundary; + var q, + k, + maxXNew = -Infinity; + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + var xNew; + if (affectedBoundary.x2 > boundary.x1) { + xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; + } else if (affectedBoundary.x2New === undefined) { + xNew = (affectedBoundary.x2 + boundary.x1) / 2; + } else { + xNew = affectedBoundary.x2New; + } + if (xNew > maxXNew) { + maxXNew = xNew; + } + } + boundary.x1New = maxXNew; + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + if (affectedBoundary.x2New === undefined) { + if (affectedBoundary.x2 > boundary.x1) { + if (affectedBoundary.index > boundary.index) { + affectedBoundary.x2New = affectedBoundary.x2; + } + } else { + affectedBoundary.x2New = maxXNew; + } + } else if (affectedBoundary.x2New > maxXNew) { + affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); + } + } + var changedHorizon = [], + lastBoundary = null; + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; + if (lastBoundary === useBoundary) { + changedHorizon[changedHorizon.length - 1].end = horizonPart.end; + } else { + changedHorizon.push({ + start: horizonPart.start, + end: horizonPart.end, + boundary: useBoundary + }); + lastBoundary = useBoundary; + } + } + if (horizon[i].start < boundary.y1) { + changedHorizon[0].start = boundary.y1; + changedHorizon.unshift({ + start: horizon[i].start, + end: boundary.y1, + boundary: horizon[i].boundary + }); + } + if (boundary.y2 < horizon[j].end) { + changedHorizon[changedHorizon.length - 1].end = boundary.y2; + changedHorizon.push({ + start: boundary.y2, + end: horizon[j].end, + boundary: horizon[j].boundary + }); + } + for (q = i; q <= j; q++) { + horizonPart = horizon[q]; + affectedBoundary = horizonPart.boundary; + if (affectedBoundary.x2New !== undefined) { + continue; + } + var used = false; + for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { + used = horizon[k].boundary === affectedBoundary; + } + for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { + used = horizon[k].boundary === affectedBoundary; + } + for (k = 0; !used && k < changedHorizon.length; k++) { + used = changedHorizon[k].boundary === affectedBoundary; + } + if (!used) { + affectedBoundary.x2New = maxXNew; + } + } + Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); + }); + horizon.forEach(function (horizonPart) { + var affectedBoundary = horizonPart.boundary; + if (affectedBoundary.x2New === undefined) { + affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); + } + }); + } + function TextLayerRenderTask({ textContent, textContentStream, container, viewport, textDivs, textContentItemsStr, enhanceTextSelection }) { + this._textContent = textContent; + this._textContentStream = textContentStream; + this._container = container; + this._viewport = viewport; + this._textDivs = textDivs || []; + this._textContentItemsStr = textContentItemsStr || []; + this._enhanceTextSelection = !!enhanceTextSelection; + this._fontInspectorEnabled = !!(_global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled); + this._reader = null; + this._layoutTextLastFontSize = null; + this._layoutTextLastFontFamily = null; + this._layoutTextCtx = null; + this._textDivProperties = new WeakMap(); + this._renderingDone = false; + this._canceled = false; + this._capability = (0, _util.createPromiseCapability)(); + this._renderTimer = null; + this._bounds = []; + } + TextLayerRenderTask.prototype = { + get promise() { + return this._capability.promise; + }, + cancel: function TextLayer_cancel() { + if (this._reader) { + this._reader.cancel(new _util.AbortException('text layer task cancelled')); + this._reader = null; + } + this._canceled = true; + if (this._renderTimer !== null) { + clearTimeout(this._renderTimer); + this._renderTimer = null; + } + this._capability.reject('canceled'); + }, + _processItems(items, styleCache) { + for (let i = 0, len = items.length; i < len; i++) { + this._textContentItemsStr.push(items[i].str); + appendText(this, items[i], styleCache); + } + }, + _layoutText(textDiv) { + let textLayerFrag = this._container; + let textDivProperties = this._textDivProperties.get(textDiv); + if (textDivProperties.isWhitespace) { + return; + } + let fontSize = textDiv.style.fontSize; + let fontFamily = textDiv.style.fontFamily; + if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { + this._layoutTextCtx.font = fontSize + ' ' + fontFamily; + this._lastFontSize = fontSize; + this._lastFontFamily = fontFamily; + } + let width = this._layoutTextCtx.measureText(textDiv.textContent).width; + let transform = ''; + if (textDivProperties.canvasWidth !== 0 && width > 0) { + textDivProperties.scale = textDivProperties.canvasWidth / width; + transform = 'scaleX(' + textDivProperties.scale + ')'; + } + if (textDivProperties.angle !== 0) { + transform = 'rotate(' + textDivProperties.angle + 'deg) ' + transform; + } + if (transform !== '') { + textDivProperties.originalTransform = transform; + textDiv.style.transform = transform; + } + this._textDivProperties.set(textDiv, textDivProperties); + textLayerFrag.appendChild(textDiv); + }, + _render: function TextLayer_render(timeout) { + let capability = (0, _util.createPromiseCapability)(); + let styleCache = Object.create(null); + let canvas = document.createElement('canvas'); + canvas.mozOpaque = true; + this._layoutTextCtx = canvas.getContext('2d', { alpha: false }); + if (this._textContent) { + let textItems = this._textContent.items; + let textStyles = this._textContent.styles; + this._processItems(textItems, textStyles); + capability.resolve(); + } else if (this._textContentStream) { + let pump = () => { + this._reader.read().then(({ value, done }) => { + if (done) { + capability.resolve(); + return; + } + _util.Util.extendObj(styleCache, value.styles); + this._processItems(value.items, styleCache); + pump(); + }, capability.reject); + }; + this._reader = this._textContentStream.getReader(); + pump(); + } else { + throw new Error('Neither "textContent" nor "textContentStream"' + ' parameters specified.'); + } + capability.promise.then(() => { + styleCache = null; + if (!timeout) { + render(this); + } else { + this._renderTimer = setTimeout(() => { + render(this); + this._renderTimer = null; + }, timeout); + } + }, this._capability.reject); + }, + expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { + if (!this._enhanceTextSelection || !this._renderingDone) { + return; + } + if (this._bounds !== null) { + expand(this); + this._bounds = null; + } + for (var i = 0, ii = this._textDivs.length; i < ii; i++) { + var div = this._textDivs[i]; + var divProperties = this._textDivProperties.get(div); + if (divProperties.isWhitespace) { + continue; + } + if (expandDivs) { + var transform = '', + padding = ''; + if (divProperties.scale !== 1) { + transform = 'scaleX(' + divProperties.scale + ')'; + } + if (divProperties.angle !== 0) { + transform = 'rotate(' + divProperties.angle + 'deg) ' + transform; + } + if (divProperties.paddingLeft !== 0) { + padding += ' padding-left: ' + divProperties.paddingLeft / divProperties.scale + 'px;'; + transform += ' translateX(' + -divProperties.paddingLeft / divProperties.scale + 'px)'; + } + if (divProperties.paddingTop !== 0) { + padding += ' padding-top: ' + divProperties.paddingTop + 'px;'; + transform += ' translateY(' + -divProperties.paddingTop + 'px)'; + } + if (divProperties.paddingRight !== 0) { + padding += ' padding-right: ' + divProperties.paddingRight / divProperties.scale + 'px;'; + } + if (divProperties.paddingBottom !== 0) { + padding += ' padding-bottom: ' + divProperties.paddingBottom + 'px;'; + } + if (padding !== '') { + div.setAttribute('style', divProperties.style + padding); + } + if (transform !== '') { + div.style.transform = transform; + } + } else { + div.style.padding = 0; + div.style.transform = divProperties.originalTransform || ''; + } + } + } + }; + function renderTextLayer(renderParameters) { + var task = new TextLayerRenderTask({ + textContent: renderParameters.textContent, + textContentStream: renderParameters.textContentStream, + container: renderParameters.container, + viewport: renderParameters.viewport, + textDivs: renderParameters.textDivs, + textContentItemsStr: renderParameters.textContentItemsStr, + enhanceTextSelection: renderParameters.enhanceTextSelection + }); + task._render(renderParameters.timeout); + return task; + } + return renderTextLayer; +}(); +exports.renderTextLayer = renderTextLayer; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.AnnotationLayer = undefined; + +var _dom_utils = __w_pdfjs_require__(1); + +var _util = __w_pdfjs_require__(0); + +class AnnotationElementFactory { + static create(parameters) { + let subtype = parameters.data.annotationType; + switch (subtype) { + case _util.AnnotationType.LINK: + return new LinkAnnotationElement(parameters); + case _util.AnnotationType.TEXT: + return new TextAnnotationElement(parameters); + case _util.AnnotationType.WIDGET: + let fieldType = parameters.data.fieldType; + switch (fieldType) { + case 'Tx': + return new TextWidgetAnnotationElement(parameters); + case 'Btn': + if (parameters.data.radioButton) { + return new RadioButtonWidgetAnnotationElement(parameters); + } else if (parameters.data.checkBox) { + return new CheckboxWidgetAnnotationElement(parameters); + } + return new PushButtonWidgetAnnotationElement(parameters); + case 'Ch': + return new ChoiceWidgetAnnotationElement(parameters); + } + return new WidgetAnnotationElement(parameters); + case _util.AnnotationType.POPUP: + return new PopupAnnotationElement(parameters); + case _util.AnnotationType.LINE: + return new LineAnnotationElement(parameters); + case _util.AnnotationType.SQUARE: + return new SquareAnnotationElement(parameters); + case _util.AnnotationType.CIRCLE: + return new CircleAnnotationElement(parameters); + case _util.AnnotationType.POLYLINE: + return new PolylineAnnotationElement(parameters); + case _util.AnnotationType.POLYGON: + return new PolygonAnnotationElement(parameters); + case _util.AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case _util.AnnotationType.UNDERLINE: + return new UnderlineAnnotationElement(parameters); + case _util.AnnotationType.SQUIGGLY: + return new SquigglyAnnotationElement(parameters); + case _util.AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + case _util.AnnotationType.STAMP: + return new StampAnnotationElement(parameters); + case _util.AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: + return new AnnotationElement(parameters); + } + } +} +class AnnotationElement { + constructor(parameters, isRenderable = false, ignoreBorder = false) { + this.isRenderable = isRenderable; + this.data = parameters.data; + this.layer = parameters.layer; + this.page = parameters.page; + this.viewport = parameters.viewport; + this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; + this.imageResourcesPath = parameters.imageResourcesPath; + this.renderInteractiveForms = parameters.renderInteractiveForms; + this.svgFactory = parameters.svgFactory; + if (isRenderable) { + this.container = this._createContainer(ignoreBorder); + } + } + _createContainer(ignoreBorder = false) { + let data = this.data, + page = this.page, + viewport = this.viewport; + let container = document.createElement('section'); + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + container.setAttribute('data-annotation-id', data.id); + let rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); + container.style.transform = 'matrix(' + viewport.transform.join(',') + ')'; + container.style.transformOrigin = -rect[0] + 'px ' + -rect[1] + 'px'; + if (!ignoreBorder && data.borderStyle.width > 0) { + container.style.borderWidth = data.borderStyle.width + 'px'; + if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { + width = width - 2 * data.borderStyle.width; + height = height - 2 * data.borderStyle.width; + } + let horizontalRadius = data.borderStyle.horizontalCornerRadius; + let verticalRadius = data.borderStyle.verticalCornerRadius; + if (horizontalRadius > 0 || verticalRadius > 0) { + let radius = horizontalRadius + 'px / ' + verticalRadius + 'px'; + container.style.borderRadius = radius; + } + switch (data.borderStyle.style) { + case _util.AnnotationBorderStyleType.SOLID: + container.style.borderStyle = 'solid'; + break; + case _util.AnnotationBorderStyleType.DASHED: + container.style.borderStyle = 'dashed'; + break; + case _util.AnnotationBorderStyleType.BEVELED: + (0, _util.warn)('Unimplemented border style: beveled'); + break; + case _util.AnnotationBorderStyleType.INSET: + (0, _util.warn)('Unimplemented border style: inset'); + break; + case _util.AnnotationBorderStyleType.UNDERLINE: + container.style.borderBottomStyle = 'solid'; + break; + default: + break; + } + if (data.color) { + container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); + } else { + container.style.borderWidth = 0; + } + } + container.style.left = rect[0] + 'px'; + container.style.top = rect[1] + 'px'; + container.style.width = width + 'px'; + container.style.height = height + 'px'; + return container; + } + _createPopup(container, trigger, data) { + if (!trigger) { + trigger = document.createElement('div'); + trigger.style.height = container.style.height; + trigger.style.width = container.style.width; + container.appendChild(trigger); + } + let popupElement = new PopupElement({ + container, + trigger, + color: data.color, + title: data.title, + contents: data.contents, + hideWrapper: true + }); + let popup = popupElement.render(); + popup.style.left = container.style.width; + container.appendChild(popup); + } + render() { + (0, _util.unreachable)('Abstract method `AnnotationElement.render` called'); + } +} +class LinkAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action); + super(parameters, isRenderable); + } + render() { + this.container.className = 'linkAnnotation'; + let { data, linkService } = this; + let link = document.createElement('a'); + (0, _dom_utils.addLinkAttributes)(link, { + url: data.url, + target: data.newWindow ? _dom_utils.LinkTarget.BLANK : linkService.externalLinkTarget, + rel: linkService.externalLinkRel + }); + if (!data.url) { + if (data.action) { + this._bindNamedAction(link, data.action); + } else { + this._bindLink(link, data.dest); + } + } + this.container.appendChild(link); + return this.container; + } + _bindLink(link, destination) { + link.href = this.linkService.getDestinationHash(destination); + link.onclick = () => { + if (destination) { + this.linkService.navigateTo(destination); + } + return false; + }; + if (destination) { + link.className = 'internalLink'; + } + } + _bindNamedAction(link, action) { + link.href = this.linkService.getAnchorUrl(''); + link.onclick = () => { + this.linkService.executeNamedAction(action); + return false; + }; + link.className = 'internalLink'; + } +} +class TextAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable); + } + render() { + this.container.className = 'textAnnotation'; + let image = document.createElement('img'); + image.style.height = this.container.style.height; + image.style.width = this.container.style.width; + image.src = this.imageResourcesPath + 'annotation-' + this.data.name.toLowerCase() + '.svg'; + image.alt = '[{{type}} Annotation]'; + image.dataset.l10nId = 'text_annotation_type'; + image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); + if (!this.data.hasPopup) { + this._createPopup(this.container, image, this.data); + } + this.container.appendChild(image); + return this.container; + } +} +class WidgetAnnotationElement extends AnnotationElement { + render() { + return this.container; + } +} +class TextWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + let isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + super(parameters, isRenderable); + } + render() { + const TEXT_ALIGNMENT = ['left', 'center', 'right']; + this.container.className = 'textWidgetAnnotation'; + let element = null; + if (this.renderInteractiveForms) { + if (this.data.multiLine) { + element = document.createElement('textarea'); + element.textContent = this.data.fieldValue; + } else { + element = document.createElement('input'); + element.type = 'text'; + element.setAttribute('value', this.data.fieldValue); + } + element.disabled = this.data.readOnly; + if (this.data.maxLen !== null) { + element.maxLength = this.data.maxLen; + } + if (this.data.comb) { + let fieldWidth = this.data.rect[2] - this.data.rect[0]; + let combWidth = fieldWidth / this.data.maxLen; + element.classList.add('comb'); + element.style.letterSpacing = 'calc(' + combWidth + 'px - 1ch)'; + } + } else { + element = document.createElement('div'); + element.textContent = this.data.fieldValue; + element.style.verticalAlign = 'middle'; + element.style.display = 'table-cell'; + let font = null; + if (this.data.fontRefName) { + font = this.page.commonObjs.getData(this.data.fontRefName); + } + this._setTextStyle(element, font); + } + if (this.data.textAlignment !== null) { + element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + this.container.appendChild(element); + return this.container; + } + _setTextStyle(element, font) { + let style = element.style; + style.fontSize = this.data.fontSize + 'px'; + style.direction = this.data.fontDirection < 0 ? 'rtl' : 'ltr'; + if (!font) { + return; + } + style.fontWeight = font.black ? font.bold ? '900' : 'bold' : font.bold ? 'bold' : 'normal'; + style.fontStyle = font.italic ? 'italic' : 'normal'; + let fontFamily = font.loadedName ? '"' + font.loadedName + '", ' : ''; + let fallbackName = font.fallbackName || 'Helvetica, sans-serif'; + style.fontFamily = fontFamily + fallbackName; + } +} +class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, parameters.renderInteractiveForms); + } + render() { + this.container.className = 'buttonWidgetAnnotation checkBox'; + let element = document.createElement('input'); + element.disabled = this.data.readOnly; + element.type = 'checkbox'; + if (this.data.fieldValue && this.data.fieldValue !== 'Off') { + element.setAttribute('checked', true); + } + this.container.appendChild(element); + return this.container; + } +} +class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, parameters.renderInteractiveForms); + } + render() { + this.container.className = 'buttonWidgetAnnotation radioButton'; + let element = document.createElement('input'); + element.disabled = this.data.readOnly; + element.type = 'radio'; + element.name = this.data.fieldName; + if (this.data.fieldValue === this.data.buttonValue) { + element.setAttribute('checked', true); + } + this.container.appendChild(element); + return this.container; + } +} +class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { + render() { + let container = super.render(); + container.className = 'buttonWidgetAnnotation pushButton'; + return container; + } +} +class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, parameters.renderInteractiveForms); + } + render() { + this.container.className = 'choiceWidgetAnnotation'; + let selectElement = document.createElement('select'); + selectElement.disabled = this.data.readOnly; + if (!this.data.combo) { + selectElement.size = this.data.options.length; + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + for (let i = 0, ii = this.data.options.length; i < ii; i++) { + let option = this.data.options[i]; + let optionElement = document.createElement('option'); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + if (this.data.fieldValue.includes(option.displayValue)) { + optionElement.setAttribute('selected', true); + } + selectElement.appendChild(optionElement); + } + this.container.appendChild(selectElement); + return this.container; + } +} +class PopupAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.title || parameters.data.contents); + super(parameters, isRenderable); + } + render() { + const IGNORE_TYPES = ['Line', 'Square', 'Circle', 'PolyLine', 'Polygon']; + this.container.className = 'popupAnnotation'; + if (IGNORE_TYPES.includes(this.data.parentType)) { + return this.container; + } + let selector = '[data-annotation-id="' + this.data.parentId + '"]'; + let parentElement = this.layer.querySelector(selector); + if (!parentElement) { + return this.container; + } + let popup = new PopupElement({ + container: this.container, + trigger: parentElement, + color: this.data.color, + title: this.data.title, + contents: this.data.contents + }); + let parentLeft = parseFloat(parentElement.style.left); + let parentWidth = parseFloat(parentElement.style.width); + this.container.style.transformOrigin = -(parentLeft + parentWidth) + 'px -' + parentElement.style.top; + this.container.style.left = parentLeft + parentWidth + 'px'; + this.container.appendChild(popup.render()); + return this.container; + } +} +class PopupElement { + constructor(parameters) { + this.container = parameters.container; + this.trigger = parameters.trigger; + this.color = parameters.color; + this.title = parameters.title; + this.contents = parameters.contents; + this.hideWrapper = parameters.hideWrapper || false; + this.pinned = false; + } + render() { + const BACKGROUND_ENLIGHT = 0.7; + let wrapper = document.createElement('div'); + wrapper.className = 'popupWrapper'; + this.hideElement = this.hideWrapper ? wrapper : this.container; + this.hideElement.setAttribute('hidden', true); + let popup = document.createElement('div'); + popup.className = 'popup'; + let color = this.color; + if (color) { + let r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; + let g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; + let b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; + popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0); + } + let contents = this._formatContents(this.contents); + let title = document.createElement('h1'); + title.textContent = this.title; + this.trigger.addEventListener('click', this._toggle.bind(this)); + this.trigger.addEventListener('mouseover', this._show.bind(this, false)); + this.trigger.addEventListener('mouseout', this._hide.bind(this, false)); + popup.addEventListener('click', this._hide.bind(this, true)); + popup.appendChild(title); + popup.appendChild(contents); + wrapper.appendChild(popup); + return wrapper; + } + _formatContents(contents) { + let p = document.createElement('p'); + let lines = contents.split(/(?:\r\n?|\n)/); + for (let i = 0, ii = lines.length; i < ii; ++i) { + let line = lines[i]; + p.appendChild(document.createTextNode(line)); + if (i < ii - 1) { + p.appendChild(document.createElement('br')); + } + } + return p; + } + _toggle() { + if (this.pinned) { + this._hide(true); + } else { + this._show(true); + } + } + _show(pin = false) { + if (pin) { + this.pinned = true; + } + if (this.hideElement.hasAttribute('hidden')) { + this.hideElement.removeAttribute('hidden'); + this.container.style.zIndex += 1; + } + } + _hide(unpin = true) { + if (unpin) { + this.pinned = false; + } + if (!this.hideElement.hasAttribute('hidden') && !this.pinned) { + this.hideElement.setAttribute('hidden', true); + this.container.style.zIndex -= 1; + } + } +} +class LineAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'lineAnnotation'; + let data = this.data; + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + let svg = this.svgFactory.create(width, height); + let line = this.svgFactory.createElement('svg:line'); + line.setAttribute('x1', data.rect[2] - data.lineCoordinates[0]); + line.setAttribute('y1', data.rect[3] - data.lineCoordinates[1]); + line.setAttribute('x2', data.rect[2] - data.lineCoordinates[2]); + line.setAttribute('y2', data.rect[3] - data.lineCoordinates[3]); + line.setAttribute('stroke-width', data.borderStyle.width); + line.setAttribute('stroke', 'transparent'); + svg.appendChild(line); + this.container.append(svg); + this._createPopup(this.container, line, data); + return this.container; + } +} +class SquareAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'squareAnnotation'; + let data = this.data; + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + let svg = this.svgFactory.create(width, height); + let borderWidth = data.borderStyle.width; + let square = this.svgFactory.createElement('svg:rect'); + square.setAttribute('x', borderWidth / 2); + square.setAttribute('y', borderWidth / 2); + square.setAttribute('width', width - borderWidth); + square.setAttribute('height', height - borderWidth); + square.setAttribute('stroke-width', borderWidth); + square.setAttribute('stroke', 'transparent'); + square.setAttribute('fill', 'none'); + svg.appendChild(square); + this.container.append(svg); + this._createPopup(this.container, square, data); + return this.container; + } +} +class CircleAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'circleAnnotation'; + let data = this.data; + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + let svg = this.svgFactory.create(width, height); + let borderWidth = data.borderStyle.width; + let circle = this.svgFactory.createElement('svg:ellipse'); + circle.setAttribute('cx', width / 2); + circle.setAttribute('cy', height / 2); + circle.setAttribute('rx', width / 2 - borderWidth / 2); + circle.setAttribute('ry', height / 2 - borderWidth / 2); + circle.setAttribute('stroke-width', borderWidth); + circle.setAttribute('stroke', 'transparent'); + circle.setAttribute('fill', 'none'); + svg.appendChild(circle); + this.container.append(svg); + this._createPopup(this.container, circle, data); + return this.container; + } +} +class PolylineAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + this.containerClassName = 'polylineAnnotation'; + this.svgElementName = 'svg:polyline'; + } + render() { + this.container.className = this.containerClassName; + let data = this.data; + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + let svg = this.svgFactory.create(width, height); + let vertices = data.vertices; + let points = []; + for (let i = 0, ii = vertices.length; i < ii; i++) { + let x = vertices[i].x - data.rect[0]; + let y = data.rect[3] - vertices[i].y; + points.push(x + ',' + y); + } + points = points.join(' '); + let borderWidth = data.borderStyle.width; + let polyline = this.svgFactory.createElement(this.svgElementName); + polyline.setAttribute('points', points); + polyline.setAttribute('stroke-width', borderWidth); + polyline.setAttribute('stroke', 'transparent'); + polyline.setAttribute('fill', 'none'); + svg.appendChild(polyline); + this.container.append(svg); + this._createPopup(this.container, polyline, data); + return this.container; + } +} +class PolygonAnnotationElement extends PolylineAnnotationElement { + constructor(parameters) { + super(parameters); + this.containerClassName = 'polygonAnnotation'; + this.svgElementName = 'svg:polygon'; + } +} +class HighlightAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'highlightAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } +} +class UnderlineAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'underlineAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } +} +class SquigglyAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'squigglyAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } +} +class StrikeOutAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'strikeoutAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } +} +class StampAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, true); + } + render() { + this.container.className = 'stampAnnotation'; + if (!this.data.hasPopup) { + this._createPopup(this.container, null, this.data); + } + return this.container; + } +} +class FileAttachmentAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, true); + let file = this.data.file; + this.filename = (0, _dom_utils.getFilenameFromUrl)(file.filename); + this.content = file.content; + this.linkService.onFileAttachmentAnnotation({ + id: (0, _util.stringToPDFString)(file.filename), + filename: file.filename, + content: file.content + }); + } + render() { + this.container.className = 'fileAttachmentAnnotation'; + let trigger = document.createElement('div'); + trigger.style.height = this.container.style.height; + trigger.style.width = this.container.style.width; + trigger.addEventListener('dblclick', this._download.bind(this)); + if (!this.data.hasPopup && (this.data.title || this.data.contents)) { + this._createPopup(this.container, trigger, this.data); + } + this.container.appendChild(trigger); + return this.container; + } + _download() { + if (!this.downloadManager) { + (0, _util.warn)('Download cannot be started due to unavailable download manager'); + return; + } + this.downloadManager.downloadData(this.content, this.filename, ''); + } +} +class AnnotationLayer { + static render(parameters) { + for (let i = 0, ii = parameters.annotations.length; i < ii; i++) { + let data = parameters.annotations[i]; + if (!data) { + continue; + } + let element = AnnotationElementFactory.create({ + data, + layer: parameters.div, + page: parameters.page, + viewport: parameters.viewport, + linkService: parameters.linkService, + downloadManager: parameters.downloadManager, + imageResourcesPath: parameters.imageResourcesPath || '', + renderInteractiveForms: parameters.renderInteractiveForms || false, + svgFactory: new _dom_utils.DOMSVGFactory() + }); + if (element.isRenderable) { + parameters.div.appendChild(element.render()); + } + } + } + static update(parameters) { + for (let i = 0, ii = parameters.annotations.length; i < ii; i++) { + let data = parameters.annotations[i]; + let element = parameters.div.querySelector('[data-annotation-id="' + data.id + '"]'); + if (element) { + element.style.transform = 'matrix(' + parameters.viewport.transform.join(',') + ')'; + } + } + parameters.div.removeAttribute('hidden'); + } +} +exports.AnnotationLayer = AnnotationLayer; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SVGGraphics = undefined; + +var _util = __w_pdfjs_require__(0); + +var _dom_utils = __w_pdfjs_require__(1); + +var _is_node = __w_pdfjs_require__(19); + +var _is_node2 = _interopRequireDefault(_is_node); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SVGGraphics = function () { + throw new Error('Not implemented: SVGGraphics'); +}; +; +exports.SVGGraphics = SVGGraphics; + /***/ }), /* 19 */ /***/ (function(module, exports, __w_pdfjs_require__) { diff --git a/browser/extensions/pdfjs/content/build/pdf.worker.js b/browser/extensions/pdfjs/content/build/pdf.worker.js index 6c901694135a..edd2c659a63d 100644 --- a/browser/extensions/pdfjs/content/build/pdf.worker.js +++ b/browser/extensions/pdfjs/content/build/pdf.worker.js @@ -28,7 +28,7 @@ else if(typeof exports === 'object') exports["pdfjs-dist/build/pdf.worker"] = factory(); else - root["pdfjs-dist/build/pdf.worker"] = root.pdfjsDistBuildPdfWorker = factory(); + root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory(); })(typeof self !== 'undefined' ? self : this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache @@ -105,11 +105,11 @@ return /******/ (function(modules) { // webpackBootstrap Object.defineProperty(exports, "__esModule", { value: true }); -exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.createBlob = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.PageViewport = exports.NotImplementedException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.MessageHandler = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined; +exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.createBlob = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.PageViewport = exports.NotImplementedException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.MessageHandler = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined; __w_pdfjs_require__(21); -var _streams_polyfill = __w_pdfjs_require__(22); +var _streams_polyfill = __w_pdfjs_require__(23); var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; const NativeImageDecoding = { @@ -627,6 +627,29 @@ function isEvalSupported() { return false; } } +function getInheritableProperty({ dict, key, getArray = false, stopWhenFound = true }) { + const LOOP_LIMIT = 100; + let loopCount = 0; + let values; + while (dict) { + const value = getArray ? dict.getArray(key) : dict.get(key); + if (value !== undefined) { + if (stopWhenFound) { + return value; + } + if (!values) { + values = []; + } + values.push(value); + } + if (++loopCount > LOOP_LIMIT) { + warn(`getInheritableProperty: maximum loop count exceeded for "${key}"`); + break; + } + dict = dict.get('Parent'); + } + return values; +} var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; var Util = function UtilClosure() { function Util() {} @@ -742,15 +765,6 @@ var Util = function UtilClosure() { obj1[key] = obj2[key]; } }; - Util.getInheritableProperty = function Util_getInheritableProperty(dict, name, getArray) { - while (dict && !dict.has(name)) { - dict = dict.get('Parent'); - } - if (!dict) { - return null; - } - return getArray ? dict.getArray(name) : dict.get(name); - }; Util.inherit = function Util_inherit(sub, base, prototype) { sub.prototype = Object.create(base.prototype); sub.prototype.constructor = sub; @@ -1349,6 +1363,7 @@ exports.createBlob = createBlob; exports.createPromiseCapability = createPromiseCapability; exports.createObjectURL = createObjectURL; exports.deprecated = deprecated; +exports.getInheritableProperty = getInheritableProperty; exports.getLookupTableFactory = getLookupTableFactory; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; @@ -3606,13 +3621,13 @@ var _util = __w_pdfjs_require__(0); var _primitives = __w_pdfjs_require__(1); -var _ccitt_stream = __w_pdfjs_require__(26); +var _ccitt_stream = __w_pdfjs_require__(27); -var _jbig2_stream = __w_pdfjs_require__(27); +var _jbig2_stream = __w_pdfjs_require__(28); var _jpeg_stream = __w_pdfjs_require__(6); -var _jpx_stream = __w_pdfjs_require__(30); +var _jpx_stream = __w_pdfjs_require__(31); const MAX_LENGTH_TO_CACHE = 1000; const MAX_ADLER32_LENGTH = 5552; @@ -4598,7 +4613,7 @@ var _stream = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(1); -var _jpg = __w_pdfjs_require__(29); +var _jpg = __w_pdfjs_require__(30); let JpegStream = function JpegStreamClosure() { function JpegStream(stream, maybeLength, dict, params) { @@ -10648,16 +10663,26 @@ var Catalog = function CatalogClosure() { return; } count = currentNode.get('Count'); - var objId = currentNode.objId; - if (objId && !pageKidsCountCache.has(objId)) { - pageKidsCountCache.put(objId, count); - } - if (currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; + if (Number.isInteger(count) && count >= 0) { + var objId = currentNode.objId; + if (objId && !pageKidsCountCache.has(objId)) { + pageKidsCountCache.put(objId, count); + } + if (currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + } } var kids = currentNode.get('Kids'); if (!Array.isArray(kids)) { + if ((0, _primitives.isName)(currentNode.get('Type'), 'Page') || !currentNode.has('Type') && currentNode.has('Contents')) { + if (currentPageIndex === pageIndex) { + capability.resolve([currentNode, null]); + return; + } + currentPageIndex++; + continue; + } capability.reject(new _util.FormatError('page dictionary kids object is not an array')); return; } @@ -10706,11 +10731,14 @@ var Catalog = function CatalogClosure() { if (!(0, _primitives.isRef)(kid)) { throw new _util.FormatError('kid must be a Ref.'); } - if (kid.num === kidRef.num) { + if ((0, _primitives.isRefsEqual)(kid, kidRef)) { found = true; break; } kidPromises.push(xref.fetchAsync(kid).then(function (kid) { + if (!(0, _primitives.isDict)(kid)) { + throw new _util.FormatError('kid node must be a Dict.'); + } if (kid.has('Count')) { var count = kid.get('Count'); total += count; @@ -15884,7 +15912,7 @@ exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFC var _util = __w_pdfjs_require__(0); -var _charsets = __w_pdfjs_require__(35); +var _charsets = __w_pdfjs_require__(36); var _encodings = __w_pdfjs_require__(4); @@ -20026,7 +20054,7 @@ var _util = __w_pdfjs_require__(0); var _primitives = __w_pdfjs_require__(1); -var _ps_parser = __w_pdfjs_require__(41); +var _ps_parser = __w_pdfjs_require__(42); let IsEvalSupportedCached = { get value() { @@ -21073,8 +21101,8 @@ exports.PostScriptCompiler = PostScriptCompiler; "use strict"; -var pdfjsVersion = '2.0.402'; -var pdfjsBuild = '401f3a9d'; +var pdfjsVersion = '2.0.447'; +var pdfjsBuild = 'c0b22da0'; var pdfjsCoreWorker = __w_pdfjs_require__(20); exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler; @@ -21092,9 +21120,9 @@ exports.WorkerMessageHandler = exports.WorkerTask = undefined; var _util = __w_pdfjs_require__(0); -var _pdf_manager = __w_pdfjs_require__(24); +var _pdf_manager = __w_pdfjs_require__(25); -var _is_node = __w_pdfjs_require__(44); +var _is_node = __w_pdfjs_require__(45); var _is_node2 = _interopRequireDefault(_is_node); @@ -21275,7 +21303,7 @@ var WorkerMessageHandler = { var cancelXHRs = null; var WorkerTasks = []; let apiVersion = docParams.apiVersion; - let workerVersion = '2.0.402'; + let workerVersion = '2.0.447'; if (apiVersion !== null && apiVersion !== workerVersion) { throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); } @@ -21462,7 +21490,7 @@ var WorkerMessageHandler = { ensureNotTerminated(); var evaluatorOptions = { forceDataSchema: data.disableCreateObjectURL, - maxImageSize: data.maxImageSize === undefined ? -1 : data.maxImageSize, + maxImageSize: data.maxImageSize, disableFontFace: data.disableFontFace, nativeImageDecoderSupport: data.nativeImageDecoderSupport, ignoreErrors: data.ignoreErrors, @@ -21665,6 +21693,7 @@ exports.WorkerMessageHandler = WorkerMessageHandler; "use strict"; +const globalScope = __w_pdfjs_require__(22); ; /***/ }), @@ -21674,6 +21703,15 @@ exports.WorkerMessageHandler = WorkerMessageHandler; "use strict"; +module.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof global !== 'undefined' && global.Math === Math ? global : typeof self !== 'undefined' && self.Math === Math ? self : {}; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + let isReadableStreamSupported = false; if (typeof ReadableStream !== 'undefined') { try { @@ -21688,11 +21726,11 @@ if (typeof ReadableStream !== 'undefined') { if (isReadableStreamSupported) { exports.ReadableStream = ReadableStream; } else { - exports.ReadableStream = __w_pdfjs_require__(23).ReadableStream; + exports.ReadableStream = __w_pdfjs_require__(24).ReadableStream; } /***/ }), -/* 23 */ +/* 24 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -24708,7 +24746,7 @@ if (isReadableStreamSupported) { }])); /***/ }), -/* 24 */ +/* 25 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -24723,7 +24761,7 @@ var _util = __w_pdfjs_require__(0); var _chunked_stream = __w_pdfjs_require__(9); -var _document = __w_pdfjs_require__(25); +var _document = __w_pdfjs_require__(26); var _stream = __w_pdfjs_require__(2); @@ -24892,7 +24930,7 @@ exports.LocalPdfManager = LocalPdfManager; exports.NetworkPdfManager = NetworkPdfManager; /***/ }), -/* 25 */ +/* 26 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -24911,7 +24949,7 @@ var _util = __w_pdfjs_require__(0); var _stream = __w_pdfjs_require__(2); -var _annotation = __w_pdfjs_require__(31); +var _annotation = __w_pdfjs_require__(32); var _crypto = __w_pdfjs_require__(14); @@ -24919,7 +24957,7 @@ var _parser = __w_pdfjs_require__(5); var _operator_list = __w_pdfjs_require__(7); -var _evaluator = __w_pdfjs_require__(32); +var _evaluator = __w_pdfjs_require__(33); var _function = __w_pdfjs_require__(18); @@ -24949,59 +24987,43 @@ var Page = function PageClosure() { }; } Page.prototype = { - getPageProp: function Page_getPageProp(key) { - return this.pageDict.get(key); - }, - getInheritedPageProp: function Page_getInheritedPageProp(key, getArray) { - var dict = this.pageDict, - valueArray = null, - loopCount = 0; - var MAX_LOOP_COUNT = 100; - getArray = getArray || false; - while (dict) { - var value = getArray ? dict.getArray(key) : dict.get(key); - if (value !== undefined) { - if (!valueArray) { - valueArray = []; - } - valueArray.push(value); - } - if (++loopCount > MAX_LOOP_COUNT) { - (0, _util.warn)('getInheritedPageProp: maximum loop count exceeded for ' + key); - return valueArray ? valueArray[0] : undefined; - } - dict = dict.get('Parent'); + _getInheritableProperty(key, getArray = false) { + let value = (0, _util.getInheritableProperty)({ + dict: this.pageDict, + key, + getArray, + stopWhenFound: false + }); + if (!Array.isArray(value)) { + return value; } - if (!valueArray) { - return undefined; + if (value.length === 1 || !(0, _primitives.isDict)(value[0])) { + return value[0]; } - if (valueArray.length === 1 || !(0, _primitives.isDict)(valueArray[0])) { - return valueArray[0]; - } - return _primitives.Dict.merge(this.xref, valueArray); + return _primitives.Dict.merge(this.xref, value); }, get content() { - return this.getPageProp('Contents'); + return this.pageDict.get('Contents'); }, get resources() { - return (0, _util.shadow)(this, 'resources', this.getInheritedPageProp('Resources') || _primitives.Dict.empty); + return (0, _util.shadow)(this, 'resources', this._getInheritableProperty('Resources') || _primitives.Dict.empty); }, get mediaBox() { - var mediaBox = this.getInheritedPageProp('MediaBox', true); + var mediaBox = this._getInheritableProperty('MediaBox', true); if (!Array.isArray(mediaBox) || mediaBox.length !== 4) { return (0, _util.shadow)(this, 'mediaBox', LETTER_SIZE_MEDIABOX); } return (0, _util.shadow)(this, 'mediaBox', mediaBox); }, get cropBox() { - var cropBox = this.getInheritedPageProp('CropBox', true); + var cropBox = this._getInheritableProperty('CropBox', true); if (!Array.isArray(cropBox) || cropBox.length !== 4) { return (0, _util.shadow)(this, 'cropBox', this.mediaBox); } return (0, _util.shadow)(this, 'cropBox', cropBox); }, get userUnit() { - var obj = this.getPageProp('UserUnit'); + var obj = this.pageDict.get('UserUnit'); if (!(0, _util.isNum)(obj) || obj <= 0) { obj = DEFAULT_USER_UNIT; } @@ -25017,7 +25039,7 @@ var Page = function PageClosure() { return (0, _util.shadow)(this, 'view', intersection || mediaBox); }, get rotate() { - var rotate = this.getInheritedPageProp('Rotate') || 0; + var rotate = this._getInheritableProperty('Rotate') || 0; if (rotate % 90 !== 0) { rotate = 0; } else if (rotate >= 360) { @@ -25149,7 +25171,7 @@ var Page = function PageClosure() { }, get annotations() { var annotations = []; - var annotationRefs = this.getInheritedPageProp('Annots') || []; + var annotationRefs = this._getInheritableProperty('Annots') || []; for (var i = 0, n = annotationRefs.length; i < n; ++i) { var annotationRef = annotationRefs[i]; var annotation = _annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory); @@ -25415,7 +25437,7 @@ exports.Page = Page; exports.PDFDocument = PDFDocument; /***/ }), -/* 26 */ +/* 27 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -25472,7 +25494,7 @@ var CCITTFaxStream = function CCITTFaxStreamClosure() { exports.CCITTFaxStream = CCITTFaxStream; /***/ }), -/* 27 */ +/* 28 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -25487,7 +25509,7 @@ var _primitives = __w_pdfjs_require__(1); var _stream = __w_pdfjs_require__(2); -var _jbig = __w_pdfjs_require__(28); +var _jbig = __w_pdfjs_require__(29); var _util = __w_pdfjs_require__(0); @@ -25543,7 +25565,7 @@ let Jbig2Stream = function Jbig2StreamClosure() { exports.Jbig2Stream = Jbig2Stream; /***/ }), -/* 28 */ +/* 29 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -27312,7 +27334,7 @@ var Jbig2Image = function Jbig2ImageClosure() { exports.Jbig2Image = Jbig2Image; /***/ }), -/* 29 */ +/* 30 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -28268,7 +28290,7 @@ var JpegImage = function JpegImageClosure() { exports.JpegImage = JpegImage; /***/ }), -/* 30 */ +/* 31 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -28343,7 +28365,7 @@ let JpxStream = function JpxStreamClosure() { exports.JpxStream = JpxStream; /***/ }), -/* 31 */ +/* 32 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -28389,7 +28411,10 @@ class AnnotationFactory { case 'Text': return new TextAnnotation(parameters); case 'Widget': - let fieldType = _util.Util.getInheritableProperty(dict, 'FT'); + let fieldType = (0, _util.getInheritableProperty)({ + dict, + key: 'FT' + }); fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; switch (fieldType) { case 'Tx': @@ -28697,13 +28722,29 @@ class WidgetAnnotation extends Annotation { let data = this.data; data.annotationType = _util.AnnotationType.WIDGET; data.fieldName = this._constructFieldName(dict); - data.fieldValue = _util.Util.getInheritableProperty(dict, 'V', true); + data.fieldValue = (0, _util.getInheritableProperty)({ + dict, + key: 'V', + getArray: true + }); data.alternativeText = (0, _util.stringToPDFString)(dict.get('TU') || ''); - data.defaultAppearance = _util.Util.getInheritableProperty(dict, 'DA') || ''; - let fieldType = _util.Util.getInheritableProperty(dict, 'FT'); + data.defaultAppearance = (0, _util.getInheritableProperty)({ + dict, + key: 'DA' + }) || ''; + let fieldType = (0, _util.getInheritableProperty)({ + dict, + key: 'FT' + }); data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; - this.fieldResources = _util.Util.getInheritableProperty(dict, 'DR') || _primitives.Dict.empty; - data.fieldFlags = _util.Util.getInheritableProperty(dict, 'Ff'); + this.fieldResources = (0, _util.getInheritableProperty)({ + dict, + key: 'DR' + }) || _primitives.Dict.empty; + data.fieldFlags = (0, _util.getInheritableProperty)({ + dict, + key: 'Ff' + }); if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { data.fieldFlags = 0; } @@ -28749,13 +28790,20 @@ class WidgetAnnotation extends Annotation { class TextWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); + const dict = params.dict; this.data.fieldValue = (0, _util.stringToPDFString)(this.data.fieldValue || ''); - let alignment = _util.Util.getInheritableProperty(params.dict, 'Q'); + let alignment = (0, _util.getInheritableProperty)({ + dict, + key: 'Q' + }); if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { alignment = null; } this.data.textAlignment = alignment; - let maximumLength = _util.Util.getInheritableProperty(params.dict, 'MaxLen'); + let maximumLength = (0, _util.getInheritableProperty)({ + dict, + key: 'MaxLen' + }); if (!Number.isInteger(maximumLength) || maximumLength < 0) { maximumLength = null; } @@ -28845,7 +28893,10 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this.data.options = []; - let options = _util.Util.getInheritableProperty(params.dict, 'Opt'); + let options = (0, _util.getInheritableProperty)({ + dict: params.dict, + key: 'Opt' + }); if (Array.isArray(options)) { let xref = params.xref; for (let i = 0, ii = options.length; i < ii; i++) { @@ -29013,7 +29064,7 @@ exports.AnnotationBorderStyle = AnnotationBorderStyle; exports.AnnotationFactory = AnnotationFactory; /***/ }), -/* 32 */ +/* 33 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -29026,13 +29077,13 @@ exports.PartialEvaluator = undefined; var _util = __w_pdfjs_require__(0); -var _cmap = __w_pdfjs_require__(33); +var _cmap = __w_pdfjs_require__(34); var _stream = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(1); -var _fonts = __w_pdfjs_require__(34); +var _fonts = __w_pdfjs_require__(35); var _encodings = __w_pdfjs_require__(4); @@ -29040,27 +29091,27 @@ var _unicode = __w_pdfjs_require__(17); var _standard_fonts = __w_pdfjs_require__(16); -var _pattern = __w_pdfjs_require__(38); +var _pattern = __w_pdfjs_require__(39); var _parser = __w_pdfjs_require__(5); -var _bidi = __w_pdfjs_require__(39); +var _bidi = __w_pdfjs_require__(40); var _colorspace = __w_pdfjs_require__(3); var _glyphlist = __w_pdfjs_require__(8); -var _metrics = __w_pdfjs_require__(40); +var _metrics = __w_pdfjs_require__(41); var _function = __w_pdfjs_require__(18); var _jpeg_stream = __w_pdfjs_require__(6); -var _murmurhash = __w_pdfjs_require__(42); +var _murmurhash = __w_pdfjs_require__(43); var _operator_list = __w_pdfjs_require__(7); -var _image = __w_pdfjs_require__(43); +var _image = __w_pdfjs_require__(44); var PartialEvaluator = function PartialEvaluatorClosure() { const DefaultPartialEvaluatorOptions = { @@ -31707,7 +31758,7 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() { exports.PartialEvaluator = PartialEvaluator; /***/ }), -/* 33 */ +/* 34 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -32422,7 +32473,7 @@ exports.IdentityCMap = IdentityCMap; exports.CMapFactory = CMapFactory; /***/ }), -/* 34 */ +/* 35 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -32445,11 +32496,11 @@ var _standard_fonts = __w_pdfjs_require__(16); var _unicode = __w_pdfjs_require__(17); -var _font_renderer = __w_pdfjs_require__(36); +var _font_renderer = __w_pdfjs_require__(37); var _stream = __w_pdfjs_require__(2); -var _type1_parser = __w_pdfjs_require__(37); +var _type1_parser = __w_pdfjs_require__(38); var PRIVATE_USE_OFFSET_START = 0xE000; var PRIVATE_USE_OFFSET_END = 0xF8FF; @@ -34969,7 +35020,7 @@ exports.ProblematicCharRanges = ProblematicCharRanges; exports.getFontType = getFontType; /***/ }), -/* 35 */ +/* 36 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -34986,7 +35037,7 @@ exports.ExpertCharset = ExpertCharset; exports.ExpertSubsetCharset = ExpertSubsetCharset; /***/ }), -/* 36 */ +/* 37 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -35726,7 +35777,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() { exports.FontRendererFactory = FontRendererFactory; /***/ }), -/* 37 */ +/* 38 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -36289,7 +36340,7 @@ var Type1Parser = function Type1ParserClosure() { exports.Type1Parser = Type1Parser; /***/ }), -/* 38 */ +/* 39 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -37079,7 +37130,7 @@ exports.Pattern = Pattern; exports.getTilingPatternIR = getTilingPatternIR; /***/ }), -/* 39 */ +/* 40 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -37324,7 +37375,7 @@ function bidi(str, startLevel, vertical) { exports.bidi = bidi; /***/ }), -/* 40 */ +/* 41 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -40278,7 +40329,7 @@ var getMetrics = (0, _util.getLookupTableFactory)(function (t) { exports.getMetrics = getMetrics; /***/ }), -/* 41 */ +/* 42 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -40482,7 +40533,7 @@ exports.PostScriptLexer = PostScriptLexer; exports.PostScriptParser = PostScriptParser; /***/ }), -/* 42 */ +/* 43 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -40600,7 +40651,7 @@ var MurmurHash3_64 = function MurmurHash3_64Closure(seed) { exports.MurmurHash3_64 = MurmurHash3_64; /***/ }), -/* 43 */ +/* 44 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; @@ -41124,7 +41175,7 @@ var PDFImage = function PDFImageClosure() { exports.PDFImage = PDFImage; /***/ }), -/* 44 */ +/* 45 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; diff --git a/browser/extensions/pdfjs/content/web/viewer.html b/browser/extensions/pdfjs/content/web/viewer.html index 57f6e1fa3a3b..b12a5b970ca2 100644 --- a/browser/extensions/pdfjs/content/web/viewer.html +++ b/browser/extensions/pdfjs/content/web/viewer.html @@ -329,6 +329,13 @@ See https://github.com/adobe-type-tools/cmap-resources
Page Count:

-

+
+ Page Size: +

+ -
+ - +

+
diff --git a/browser/extensions/pdfjs/content/web/viewer.js b/browser/extensions/pdfjs/content/web/viewer.js index dc6a73685031..9e0cf928ecf9 100644 --- a/browser/extensions/pdfjs/content/web/viewer.js +++ b/browser/extensions/pdfjs/content/web/viewer.js @@ -82,7 +82,7 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 9); +/******/ return __webpack_require__(__webpack_require__.s = 10); /******/ }) /************************************************************************/ /******/ ([ @@ -95,7 +95,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.waitOnEventOrTimeout = exports.WaitOnType = exports.localized = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.mozL10n = exports.TextLayerMode = exports.RendererType = exports.PresentationModeState = exports.cloneObj = exports.isFileSchema = exports.isValidRotation = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined; +exports.waitOnEventOrTimeout = exports.WaitOnType = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.TextLayerMode = exports.RendererType = exports.PresentationModeState = exports.cloneObj = exports.isFileSchema = exports.isValidRotation = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined; var _pdfjsLib = __webpack_require__(1); @@ -142,10 +142,6 @@ let NullL10n = { return Promise.resolve(); } }; -_pdfjsLib.PDFJS.useOnlyCssZoom = _pdfjsLib.PDFJS.useOnlyCssZoom === undefined ? false : _pdfjsLib.PDFJS.useOnlyCssZoom; -_pdfjsLib.PDFJS.maxCanvasPixels = _pdfjsLib.PDFJS.maxCanvasPixels === undefined ? 16777216 : _pdfjsLib.PDFJS.maxCanvasPixels; -_pdfjsLib.PDFJS.disableHistory = _pdfjsLib.PDFJS.disableHistory === undefined ? false : _pdfjsLib.PDFJS.disableHistory; -; function getOutputScale(ctx) { let devicePixelRatio = window.devicePixelRatio || 1; let backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; @@ -441,8 +437,6 @@ function waitOnEventOrTimeout({ target, name, delay = 0 }) { let animationStarted = new Promise(function (resolve) { window.requestAnimationFrame(resolve); }); -let mozL10n; -let localized = Promise.resolve(); class EventBus { constructor() { this._listeners = Object.create(null); @@ -548,7 +542,6 @@ exports.cloneObj = cloneObj; exports.PresentationModeState = PresentationModeState; exports.RendererType = RendererType; exports.TextLayerMode = TextLayerMode; -exports.mozL10n = mozL10n; exports.NullL10n = NullL10n; exports.EventBus = EventBus; exports.ProgressBar = ProgressBar; @@ -564,7 +557,6 @@ exports.watchScroll = watchScroll; exports.binarySearchFirstItem = binarySearchFirstItem; exports.normalizeWheelEventDelta = normalizeWheelEventDelta; exports.animationStarted = animationStarted; -exports.localized = localized; exports.WaitOnType = WaitOnType; exports.waitOnEventOrTimeout = waitOnEventOrTimeout; @@ -834,64 +826,58 @@ var _pdf_cursor_tools = __webpack_require__(6); var _pdf_rendering_queue = __webpack_require__(3); -var _pdf_sidebar = __webpack_require__(11); +var _pdf_sidebar = __webpack_require__(12); + +var _app_options = __webpack_require__(7); var _dom_events = __webpack_require__(2); -var _overlay_manager = __webpack_require__(12); +var _overlay_manager = __webpack_require__(13); -var _password_prompt = __webpack_require__(13); +var _password_prompt = __webpack_require__(14); -var _pdf_attachment_viewer = __webpack_require__(14); +var _pdf_attachment_viewer = __webpack_require__(15); -var _pdf_document_properties = __webpack_require__(15); +var _pdf_document_properties = __webpack_require__(16); -var _pdf_find_bar = __webpack_require__(16); +var _pdf_find_bar = __webpack_require__(17); -var _pdf_find_controller = __webpack_require__(7); +var _pdf_find_controller = __webpack_require__(9); -var _pdf_history = __webpack_require__(17); +var _pdf_history = __webpack_require__(18); var _pdf_link_service = __webpack_require__(5); -var _pdf_outline_viewer = __webpack_require__(18); +var _pdf_outline_viewer = __webpack_require__(19); -var _pdf_presentation_mode = __webpack_require__(19); +var _pdf_presentation_mode = __webpack_require__(20); -var _pdf_sidebar_resizer = __webpack_require__(20); +var _pdf_sidebar_resizer = __webpack_require__(21); -var _pdf_thumbnail_viewer = __webpack_require__(21); +var _pdf_thumbnail_viewer = __webpack_require__(22); -var _pdf_viewer = __webpack_require__(23); +var _pdf_viewer = __webpack_require__(24); -var _secondary_toolbar = __webpack_require__(28); +var _secondary_toolbar = __webpack_require__(29); -var _toolbar = __webpack_require__(29); +var _toolbar = __webpack_require__(30); -var _viewer_compatibility = __webpack_require__(8); - -var _view_history = __webpack_require__(30); +var _view_history = __webpack_require__(31); const DEFAULT_SCALE_DELTA = 1.1; const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; -function configure(PDFJS) { - PDFJS.imageResourcesPath = './images/'; - _pdfjsLib.GlobalWorkerOptions.workerSrc = '../build/pdf.worker.js'; - PDFJS.cMapUrl = '../web/cmaps/'; - PDFJS.cMapPacked = true; -} const DefaultExternalServices = { updateFindControlState(data) {}, initPassiveLoading(callbacks) {}, fallback(data, callback) {}, reportTelemetry(data) {}, - createDownloadManager() { + createDownloadManager(options) { throw new Error('Not implemented: createDownloadManager'); }, createPreferences() { throw new Error('Not implemented: createPreferences'); }, - createL10n() { + createL10n(options) { throw new Error('Not implemented: createL10n'); }, supportsIntegratedFind: false, @@ -932,19 +918,6 @@ let PDFViewerApplication = { l10n: null, isInitialViewSet: false, downloadComplete: false, - viewerPrefs: { - enableWebGL: false, - sidebarViewOnLoad: _pdf_sidebar.SidebarView.NONE, - pdfBugEnabled: false, - showPreviousViewOnLoad: true, - defaultZoomValue: '', - disablePageMode: false, - disablePageLabels: false, - renderer: 'canvas', - textLayerMode: _ui_utils.TextLayerMode.ENABLE, - renderInteractiveForms: false, - enablePrintAutoRotate: false - }, isViewerEmbedded: window.parent !== window, url: '', baseUrl: '', @@ -953,7 +926,6 @@ let PDFViewerApplication = { contentDispositionFilename: null, initialize(appConfig) { this.preferences = this.externalServices.createPreferences(); - configure(_pdfjsLib.PDFJS); this.appConfig = appConfig; return this._readPreferences().then(() => { return this._parseHashParameters(); @@ -968,102 +940,104 @@ let PDFViewerApplication = { this.l10n.translate(appContainer).then(() => { this.eventBus.dispatch('localized'); }); - if (this.isViewerEmbedded && _pdfjsLib.PDFJS.externalLinkTarget === _pdfjsLib.LinkTarget.NONE) { - _pdfjsLib.PDFJS.externalLinkTarget = _pdfjsLib.LinkTarget.TOP; + if (this.isViewerEmbedded && _app_options.AppOptions.get('externalLinkTarget') === _pdfjsLib.LinkTarget.NONE) { + _app_options.AppOptions.set('externalLinkTarget', _pdfjsLib.LinkTarget.TOP); } this.initialized = true; }); }, _readPreferences() { - let { preferences, viewerPrefs } = this; + let { preferences } = this; return Promise.all([preferences.get('enableWebGL').then(function resolved(value) { - viewerPrefs['enableWebGL'] = value; + _app_options.AppOptions.set('enableWebGL', value); }), preferences.get('sidebarViewOnLoad').then(function resolved(value) { - viewerPrefs['sidebarViewOnLoad'] = value; + _app_options.AppOptions.set('sidebarViewOnLoad', value); + }), preferences.get('cursorToolOnLoad').then(function resolved(value) { + _app_options.AppOptions.set('cursorToolOnLoad', value); }), preferences.get('pdfBugEnabled').then(function resolved(value) { - viewerPrefs['pdfBugEnabled'] = value; + _app_options.AppOptions.set('pdfBugEnabled', value); }), preferences.get('showPreviousViewOnLoad').then(function resolved(value) { - viewerPrefs['showPreviousViewOnLoad'] = value; + _app_options.AppOptions.set('showPreviousViewOnLoad', value); }), preferences.get('defaultZoomValue').then(function resolved(value) { - viewerPrefs['defaultZoomValue'] = value; + _app_options.AppOptions.set('defaultZoomValue', value); }), preferences.get('textLayerMode').then(function resolved(value) { - if (viewerPrefs['textLayerMode'] === _ui_utils.TextLayerMode.DISABLE) { + if (_app_options.AppOptions.get('textLayerMode') === _ui_utils.TextLayerMode.DISABLE) { return; } - viewerPrefs['textLayerMode'] = value; + _app_options.AppOptions.set('textLayerMode', value); }), preferences.get('disableRange').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableRange === true) { + if (_app_options.AppOptions.get('disableRange') === true) { return; } - _pdfjsLib.PDFJS.disableRange = value; + _app_options.AppOptions.set('disableRange', value); }), preferences.get('disableStream').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableStream === true) { + if (_app_options.AppOptions.get('disableStream') === true) { return; } - _pdfjsLib.PDFJS.disableStream = value; + _app_options.AppOptions.set('disableStream', value); }), preferences.get('disableAutoFetch').then(function resolved(value) { - _pdfjsLib.PDFJS.disableAutoFetch = value; + _app_options.AppOptions.set('disableAutoFetch', value); }), preferences.get('disableFontFace').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableFontFace === true) { + if (_app_options.AppOptions.get('disableFontFace') === true) { return; } - _pdfjsLib.PDFJS.disableFontFace = value; + _app_options.AppOptions.set('disableFontFace', value); }), preferences.get('useOnlyCssZoom').then(function resolved(value) { - _pdfjsLib.PDFJS.useOnlyCssZoom = value; + _app_options.AppOptions.set('useOnlyCssZoom', value); }), preferences.get('externalLinkTarget').then(function resolved(value) { - if (_pdfjsLib.PDFJS.externalLinkTarget !== _pdfjsLib.LinkTarget.NONE) { + if (_app_options.AppOptions.get('externalLinkTarget') !== _pdfjsLib.LinkTarget.NONE) { return; } - _pdfjsLib.PDFJS.externalLinkTarget = value; + _app_options.AppOptions.set('externalLinkTarget', value); }), preferences.get('renderer').then(function resolved(value) { - viewerPrefs['renderer'] = value; + _app_options.AppOptions.set('renderer', value); }), preferences.get('renderInteractiveForms').then(function resolved(value) { - viewerPrefs['renderInteractiveForms'] = value; + _app_options.AppOptions.set('renderInteractiveForms', value); }), preferences.get('disablePageMode').then(function resolved(value) { - viewerPrefs['disablePageMode'] = value; + _app_options.AppOptions.set('disablePageMode', value); }), preferences.get('disablePageLabels').then(function resolved(value) { - viewerPrefs['disablePageLabels'] = value; + _app_options.AppOptions.set('disablePageLabels', value); }), preferences.get('enablePrintAutoRotate').then(function resolved(value) { - viewerPrefs['enablePrintAutoRotate'] = value; + _app_options.AppOptions.set('enablePrintAutoRotate', value); })]).catch(function (reason) {}); }, _parseHashParameters() { - let { appConfig, viewerPrefs } = this; + let { appConfig } = this; let waitOn = []; - if (viewerPrefs['pdfBugEnabled']) { + if (_app_options.AppOptions.get('pdfBugEnabled')) { let hash = document.location.hash.substring(1); let hashParams = (0, _ui_utils.parseQueryString)(hash); if ('disableworker' in hashParams && hashParams['disableworker'] === 'true') { waitOn.push(loadFakeWorker()); } if ('disablerange' in hashParams) { - _pdfjsLib.PDFJS.disableRange = hashParams['disablerange'] === 'true'; + _app_options.AppOptions.set('disableRange', hashParams['disablerange'] === 'true'); } if ('disablestream' in hashParams) { - _pdfjsLib.PDFJS.disableStream = hashParams['disablestream'] === 'true'; + _app_options.AppOptions.set('disableStream', hashParams['disablestream'] === 'true'); } if ('disableautofetch' in hashParams) { - _pdfjsLib.PDFJS.disableAutoFetch = hashParams['disableautofetch'] === 'true'; + _app_options.AppOptions.set('disableAutoFetch', hashParams['disableautofetch'] === 'true'); } if ('disablefontface' in hashParams) { - _pdfjsLib.PDFJS.disableFontFace = hashParams['disablefontface'] === 'true'; + _app_options.AppOptions.set('disableFontFace', hashParams['disablefontface'] === 'true'); } if ('disablehistory' in hashParams) { - _pdfjsLib.PDFJS.disableHistory = hashParams['disablehistory'] === 'true'; + _app_options.AppOptions.set('disableHistory', hashParams['disablehistory'] === 'true'); } if ('webgl' in hashParams) { - viewerPrefs['enableWebGL'] = hashParams['webgl'] === 'true'; + _app_options.AppOptions.set('enableWebGL', hashParams['webgl'] === 'true'); } if ('useonlycsszoom' in hashParams) { - _pdfjsLib.PDFJS.useOnlyCssZoom = hashParams['useonlycsszoom'] === 'true'; + _app_options.AppOptions.set('useOnlyCssZoom', hashParams['useonlycsszoom'] === 'true'); } if ('verbosity' in hashParams) { - _pdfjsLib.PDFJS.verbosity = hashParams['verbosity'] | 0; + _app_options.AppOptions.set('verbosity', hashParams['verbosity'] | 0); } if ('textlayer' in hashParams) { switch (hashParams['textlayer']) { case 'off': - viewerPrefs['textLayerMode'] = _ui_utils.TextLayerMode.DISABLE; + _app_options.AppOptions.set('textLayerMode', _ui_utils.TextLayerMode.DISABLE); break; case 'visible': case 'shadow': @@ -1074,7 +1048,7 @@ let PDFViewerApplication = { } } if ('pdfbug' in hashParams) { - _pdfjsLib.PDFJS.pdfBug = true; + _app_options.AppOptions.set('pdfBug', true); let enabled = hashParams['pdfbug'].split(','); waitOn.push(loadAndEnablePDFBug(enabled)); } @@ -1082,13 +1056,13 @@ let PDFViewerApplication = { return Promise.all(waitOn); }, _initializeL10n() { - this.l10n = this.externalServices.createL10n({ locale: _pdfjsLib.PDFJS.locale }); + this.l10n = this.externalServices.createL10n({ locale: _app_options.AppOptions.get('locale') }); return this.l10n.getDirection().then(dir => { document.getElementsByTagName('html')[0].dir = dir; }); }, _initializeViewerComponents() { - let { appConfig, viewerPrefs } = this; + let { appConfig } = this; return new Promise((resolve, reject) => { this.overlayManager = new _overlay_manager.OverlayManager(); let eventBus = appConfig.eventBus || (0, _dom_events.getGlobalEventBus)(); @@ -1098,11 +1072,11 @@ let PDFViewerApplication = { this.pdfRenderingQueue = pdfRenderingQueue; let pdfLinkService = new _pdf_link_service.PDFLinkService({ eventBus, - externalLinkTarget: _pdfjsLib.PDFJS.externalLinkTarget, - externalLinkRel: _pdfjsLib.PDFJS.externalLinkRel + externalLinkTarget: _app_options.AppOptions.get('externalLinkTarget'), + externalLinkRel: _app_options.AppOptions.get('externalLinkRel') }); this.pdfLinkService = pdfLinkService; - let downloadManager = this.externalServices.createDownloadManager(); + let downloadManager = this.externalServices.createDownloadManager({ disableCreateObjectURL: _app_options.AppOptions.get('disableCreateObjectURL') }); this.downloadManager = downloadManager; let container = appConfig.mainContainer; let viewer = appConfig.viewerContainer; @@ -1113,15 +1087,15 @@ let PDFViewerApplication = { renderingQueue: pdfRenderingQueue, linkService: pdfLinkService, downloadManager, - renderer: viewerPrefs['renderer'], - enableWebGL: viewerPrefs['enableWebGL'], + renderer: _app_options.AppOptions.get('renderer'), + enableWebGL: _app_options.AppOptions.get('enableWebGL'), l10n: this.l10n, - textLayerMode: viewerPrefs['textLayerMode'], - imageResourcesPath: _pdfjsLib.PDFJS.imageResourcesPath, - renderInteractiveForms: viewerPrefs['renderInteractiveForms'], - enablePrintAutoRotate: viewerPrefs['enablePrintAutoRotate'], - useOnlyCssZoom: _pdfjsLib.PDFJS.useOnlyCssZoom, - maxCanvasPixels: _pdfjsLib.PDFJS.maxCanvasPixels + textLayerMode: _app_options.AppOptions.get('textLayerMode'), + imageResourcesPath: _app_options.AppOptions.get('imageResourcesPath'), + renderInteractiveForms: _app_options.AppOptions.get('renderInteractiveForms'), + enablePrintAutoRotate: _app_options.AppOptions.get('enablePrintAutoRotate'), + useOnlyCssZoom: _app_options.AppOptions.get('useOnlyCssZoom'), + maxCanvasPixels: _app_options.AppOptions.get('maxCanvasPixels') }); pdfRenderingQueue.setViewer(this.pdfViewer); pdfLinkService.setViewer(this.pdfViewer); @@ -1160,11 +1134,11 @@ let PDFViewerApplication = { findBarConfig.findController = this.findController; findBarConfig.eventBus = eventBus; this.findBar = new _pdf_find_bar.PDFFindBar(findBarConfig, this.l10n); - this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, this.l10n); + this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n); this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({ container, eventBus, - preferences: this.preferences + cursorToolOnLoad: _app_options.AppOptions.get('cursorToolOnLoad') }); this.toolbar = new _toolbar.Toolbar(appConfig.toolbar, container, eventBus, this.l10n); this.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); @@ -1238,7 +1212,7 @@ let PDFViewerApplication = { get supportsFullscreen() { let support; support = document.fullscreenEnabled === true || document.mozFullScreenEnabled === true; - if (support && _viewer_compatibility.viewerCompatibilityParams['disableFullscreen'] === true) { + if (support && _app_options.AppOptions.get('disableFullscreen') === true) { support = false; } return (0, _pdfjsLib.shadow)(this, 'supportsFullscreen', support); @@ -1353,6 +1327,10 @@ let PDFViewerApplication = { return this.open(file, args); }); } + const workerParameters = _app_options.AppOptions.getAll('worker'); + for (let key in workerParameters) { + _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key]; + } let parameters = Object.create(null); if (typeof file === 'string') { this.setTitleUsingUrl(file); @@ -1364,7 +1342,10 @@ let PDFViewerApplication = { parameters.url = file.url; } parameters.docBaseUrl = this.baseUrl; - parameters.verbosity = _pdfjsLib.PDFJS.verbosity; + const apiParameters = _app_options.AppOptions.getAll('api'); + for (let key in apiParameters) { + parameters[key] = apiParameters[key]; + } if (args) { for (let prop in args) { if (prop === 'length') { @@ -1475,7 +1456,8 @@ let PDFViewerApplication = { let percent = Math.round(level * 100); if (percent > this.loadingBar.percent || isNaN(percent)) { this.loadingBar.percent = percent; - if (_pdfjsLib.PDFJS.disableAutoFetch && percent) { + const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams['disableAutoFetch'] : _app_options.AppOptions.get('disableAutoFetch'); + if (disableAutoFetch && percent) { if (this.disableAutoFetchLoadingBarTimeout) { clearTimeout(this.disableAutoFetchLoadingBarTimeout); this.disableAutoFetchLoadingBarTimeout = null; @@ -1515,8 +1497,8 @@ let PDFViewerApplication = { pdfThumbnailViewer.setDocument(pdfDocument); firstPagePromise.then(pdfPage => { this.loadingBar.setWidth(this.appConfig.viewerContainer); - if (!_pdfjsLib.PDFJS.disableHistory && !this.isViewerEmbedded) { - let resetHistory = !this.viewerPrefs['showPreviousViewOnLoad']; + if (!_app_options.AppOptions.get('disableHistory') && !this.isViewerEmbedded) { + let resetHistory = !_app_options.AppOptions.get('showPreviousViewOnLoad'); this.pdfHistory.initialize(id, resetHistory); if (this.pdfHistory.initialBookmark) { this.initialBookmark = this.pdfHistory.initialBookmark; @@ -1537,15 +1519,15 @@ let PDFViewerApplication = { sidebarView: _pdf_sidebar.SidebarView.NONE }).catch(() => {}); Promise.all([storePromise, pageModePromise]).then(([values = {}, pageMode]) => { - let hash = this.viewerPrefs['defaultZoomValue'] ? 'zoom=' + this.viewerPrefs['defaultZoomValue'] : null; + let hash = _app_options.AppOptions.get('defaultZoomValue') ? 'zoom=' + _app_options.AppOptions.get('defaultZoomValue') : null; let rotation = null; - let sidebarView = this.viewerPrefs['sidebarViewOnLoad']; - if (values.exists && this.viewerPrefs['showPreviousViewOnLoad']) { - hash = 'page=' + values.page + '&zoom=' + (this.viewerPrefs['defaultZoomValue'] || values.zoom) + ',' + values.scrollLeft + ',' + values.scrollTop; + let sidebarView = _app_options.AppOptions.get('sidebarViewOnLoad'); + if (values.exists && _app_options.AppOptions.get('showPreviousViewOnLoad')) { + hash = 'page=' + values.page + '&zoom=' + (_app_options.AppOptions.get('defaultZoomValue') || values.zoom) + ',' + values.scrollLeft + ',' + values.scrollTop; rotation = parseInt(values.rotation, 10); sidebarView = sidebarView || values.sidebarView | 0; } - if (pageMode && !this.viewerPrefs['disablePageMode']) { + if (pageMode && !_app_options.AppOptions.get('disablePageMode')) { sidebarView = sidebarView || apiPageModeToSidebarView(pageMode); } return { @@ -1579,7 +1561,7 @@ let PDFViewerApplication = { }); }); pdfDocument.getPageLabels().then(labels => { - if (!labels || this.viewerPrefs['disablePageLabels']) { + if (!labels || _app_options.AppOptions.get('disablePageLabels')) { return; } let i = 0, @@ -1639,7 +1621,7 @@ let PDFViewerApplication = { this.documentInfo = info; this.metadata = metadata; this.contentDispositionFilename = contentDispositionFilename; - console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdfjsLib.version || '-') + (this.viewerPrefs['enableWebGL'] ? ' [WebGL]' : '') + ')'); + console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdfjsLib.version || '-') + (_app_options.AppOptions.get('enableWebGL') ? ' [WebGL]' : '') + ')'); let pdfTitle; if (metadata && metadata.has('dc:title')) { let title = metadata.get('dc:title'); @@ -1875,6 +1857,9 @@ let validateFileURL; ; function loadFakeWorker() { return new Promise(function (resolve, reject) { + if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) { + _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get('workerSrc'); + } let script = document.createElement('script'); script.src = _pdfjsLib.PDFWorker.getWorkerSrc(); script.onload = function () { @@ -1909,7 +1894,7 @@ function webViewerInitialized() { appConfig.toolbar.openFile.setAttribute('hidden', 'true'); appConfig.secondaryToolbar.openFileButton.setAttribute('hidden', 'true'); if (!PDFViewerApplication.supportsDocumentFonts) { - _pdfjsLib.PDFJS.disableFontFace = true; + _app_options.AppOptions.set('disableFontFace', true); PDFViewerApplication.l10n.get('web_fonts_disabled', null, 'Web fonts are disabled: unable to use embedded PDF fonts.').then(msg => { console.warn(msg); }); @@ -2691,6 +2676,9 @@ class PDFLinkService { }); } cachePageRef(pageNum, pageRef) { + if (!pageRef) { + return; + } let refStr = pageRef.num + ' ' + pageRef.gen + ' R'; this._pagesRefCache[refStr] = pageNum; } @@ -2790,7 +2778,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.PDFCursorTools = exports.CursorTool = undefined; -var _grab_to_pan = __webpack_require__(10); +var _grab_to_pan = __webpack_require__(11); const CursorTool = { SELECT: 0, @@ -2798,16 +2786,16 @@ const CursorTool = { ZOOM: 2 }; class PDFCursorTools { - constructor({ container, eventBus, preferences }) { + constructor({ container, eventBus, cursorToolOnLoad = CursorTool.SELECT }) { this.container = container; this.eventBus = eventBus; this.active = CursorTool.SELECT; this.activeBeforePresentationMode = null; this.handTool = new _grab_to_pan.GrabToPan({ element: this.container }); this._addEventListeners(); - preferences.get('cursorToolOnLoad').then(value => { - this.switchTool(value); - }).catch(() => {}); + Promise.resolve().then(() => { + this.switchTool(cursorToolOnLoad); + }); } get activeTool() { return this.active; @@ -2882,6 +2870,219 @@ exports.PDFCursorTools = PDFCursorTools; "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.OptionKind = exports.AppOptions = undefined; + +var _pdfjsLib = __webpack_require__(1); + +var _viewer_compatibility = __webpack_require__(8); + +const OptionKind = { + VIEWER: 'viewer', + API: 'api', + WORKER: 'worker' +}; +const defaultOptions = { + cursorToolOnLoad: { + value: 0, + kind: OptionKind.VIEWER + }, + defaultUrl: { + value: 'compressed.tracemonkey-pldi-09.pdf', + kind: OptionKind.VIEWER + }, + defaultZoomValue: { + value: '', + kind: OptionKind.VIEWER + }, + disableFullscreen: { + value: _viewer_compatibility.viewerCompatibilityParams.disableFullscreen || false, + kind: OptionKind.VIEWER + }, + disableHistory: { + value: false, + kind: OptionKind.VIEWER + }, + disablePageLabels: { + value: false, + kind: OptionKind.VIEWER + }, + disablePageMode: { + value: false, + kind: OptionKind.VIEWER + }, + enablePrintAutoRotate: { + value: false, + kind: OptionKind.VIEWER + }, + enableWebGL: { + value: false, + kind: OptionKind.VIEWER + }, + externalLinkRel: { + value: 'noopener noreferrer nofollow', + kind: OptionKind.VIEWER + }, + externalLinkTarget: { + value: 0, + kind: OptionKind.VIEWER + }, + imageResourcesPath: { + value: './images/', + kind: OptionKind.VIEWER + }, + locale: { + value: typeof navigator !== 'undefined' ? navigator.language : 'en-US', + kind: OptionKind.VIEWER + }, + maxCanvasPixels: { + value: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216, + kind: OptionKind.VIEWER + }, + pdfBugEnabled: { + value: false, + kind: OptionKind.VIEWER + }, + renderer: { + value: 'canvas', + kind: OptionKind.VIEWER + }, + renderInteractiveForms: { + value: false, + kind: OptionKind.VIEWER + }, + showPreviousViewOnLoad: { + value: true, + kind: OptionKind.VIEWER + }, + sidebarViewOnLoad: { + value: 0, + kind: OptionKind.VIEWER + }, + textLayerMode: { + value: 1, + kind: OptionKind.VIEWER + }, + useOnlyCssZoom: { + value: false, + kind: OptionKind.VIEWER + }, + cMapPacked: { + value: true, + kind: OptionKind.API + }, + cMapUrl: { + value: '../web/cmaps/', + kind: OptionKind.API + }, + disableAutoFetch: { + value: false, + kind: OptionKind.API + }, + disableCreateObjectURL: { + value: _pdfjsLib.apiCompatibilityParams.disableCreateObjectURL || false, + kind: OptionKind.API + }, + disableFontFace: { + value: false, + kind: OptionKind.API + }, + disableRange: { + value: _pdfjsLib.apiCompatibilityParams.disableRange || false, + kind: OptionKind.API + }, + disableStream: { + value: _pdfjsLib.apiCompatibilityParams.disableStream || false, + kind: OptionKind.API + }, + isEvalSupported: { + value: true, + kind: OptionKind.API + }, + maxImageSize: { + value: -1, + kind: OptionKind.API + }, + pdfBug: { + value: false, + kind: OptionKind.API + }, + postMessageTransfers: { + value: true, + kind: OptionKind.API + }, + verbosity: { + value: 1, + kind: OptionKind.API + }, + workerPort: { + value: null, + kind: OptionKind.WORKER + }, + workerSrc: { + value: '../build/pdf.worker.js', + kind: OptionKind.WORKER + } +}; +const userOptions = Object.create(null); +class AppOptions { + constructor() { + throw new Error('Cannot initialize AppOptions.'); + } + static get(name) { + let defaultOption = defaultOptions[name], + userOption = userOptions[name]; + if (userOption !== undefined) { + return userOption; + } + return defaultOption !== undefined ? defaultOption.value : undefined; + } + static getAll(kind = null) { + let options = Object.create(null); + for (let name in defaultOptions) { + let defaultOption = defaultOptions[name], + userOption = userOptions[name]; + if (kind && defaultOption.kind !== kind) { + continue; + } + options[name] = userOption !== undefined ? userOption : defaultOption.value; + } + return options; + } + static set(name, value) { + userOptions[name] = value; + } + static remove(name) { + delete userOptions[name]; + } +} +exports.AppOptions = AppOptions; +exports.OptionKind = OptionKind; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +let compatibilityParams = Object.create(null); +; +const viewerCompatibilityParams = Object.freeze(compatibilityParams); +exports.viewerCompatibilityParams = viewerCompatibilityParams; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + Object.defineProperty(exports, "__esModule", { value: true }); @@ -3240,36 +3441,21 @@ exports.FindState = FindState; exports.PDFFindController = PDFFindController; /***/ }), -/* 8 */ +/* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); -let compatibilityParams = Object.create(null); ; -const viewerCompatibilityParams = Object.freeze(compatibilityParams); -exports.viewerCompatibilityParams = viewerCompatibilityParams; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -let DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf'; -; -let pdfjsWebApp; +let pdfjsWebApp, pdfjsWebAppOptions; { pdfjsWebApp = __webpack_require__(4); + pdfjsWebAppOptions = __webpack_require__(7); } { - __webpack_require__(31); - __webpack_require__(34); + __webpack_require__(32); + __webpack_require__(35); } ; ; @@ -3372,7 +3558,9 @@ function getViewerConfiguration() { 'creator': document.getElementById('creatorField'), 'producer': document.getElementById('producerField'), 'version': document.getElementById('versionField'), - 'pageCount': document.getElementById('pageCountField') + 'pageCount': document.getElementById('pageCountField'), + 'pageSizeInch': document.getElementById('pageSizeFieldInch'), + 'pageSizeMM': document.getElementById('pageSizeFieldMM') } }, errorWrapper: { @@ -3385,13 +3573,13 @@ function getViewerConfiguration() { }, printContainer: document.getElementById('printContainer'), openFileInputName: 'fileInput', - debuggerScriptPath: './debugger.js', - defaultUrl: DEFAULT_URL + debuggerScriptPath: './debugger.js' }; } function webViewerLoad() { let config = getViewerConfiguration(); window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication; + window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions; pdfjsWebApp.PDFViewerApplication.run(config); } if (document.readyState === 'interactive' || document.readyState === 'complete') { @@ -3401,7 +3589,7 @@ if (document.readyState === 'interactive' || document.readyState === 'complete') } /***/ }), -/* 10 */ +/* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3542,7 +3730,7 @@ function isLeftMouseReleased(event) { exports.GrabToPan = GrabToPan; /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3843,7 +4031,7 @@ exports.SidebarView = SidebarView; exports.PDFSidebar = PDFSidebar; /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3943,7 +4131,7 @@ class OverlayManager { exports.OverlayManager = OverlayManager; /***/ }), -/* 13 */ +/* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4013,7 +4201,7 @@ class PasswordPrompt { exports.PasswordPrompt = PasswordPrompt; /***/ }), -/* 14 */ +/* 15 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4049,8 +4237,8 @@ class PDFAttachmentViewer { }); } _bindPdfLink(button, content, filename) { - if (_pdfjsLib.PDFJS.disableCreateObjectURL) { - throw new Error('bindPdfLink: ' + 'Unsupported "PDFJS.disableCreateObjectURL" value.'); + if (this.downloadManager.disableCreateObjectURL) { + throw new Error('bindPdfLink: Unsupported "disableCreateObjectURL" value.'); } let blobUrl; button.onclick = function () { @@ -4090,7 +4278,7 @@ class PDFAttachmentViewer { div.className = 'attachmentsItem'; let button = document.createElement('button'); button.textContent = filename; - if (/\.pdf$/i.test(filename) && !_pdfjsLib.PDFJS.disableCreateObjectURL) { + if (/\.pdf$/i.test(filename) && !this.downloadManager.disableCreateObjectURL) { this._bindPdfLink(button, item.content, filename); } else { this._bindLink(button, item.content, filename); @@ -4126,7 +4314,7 @@ class PDFAttachmentViewer { exports.PDFAttachmentViewer = PDFAttachmentViewer; /***/ }), -/* 15 */ +/* 16 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4143,7 +4331,7 @@ var _pdfjsLib = __webpack_require__(1); const DEFAULT_FIELD_CONTENT = '-'; class PDFDocumentProperties { - constructor({ overlayName, fields, container, closeButton }, overlayManager, l10n = _ui_utils.NullL10n) { + constructor({ overlayName, fields, container, closeButton }, overlayManager, eventBus, l10n = _ui_utils.NullL10n) { this.overlayName = overlayName; this.fields = fields; this.container = container; @@ -4154,6 +4342,11 @@ class PDFDocumentProperties { closeButton.addEventListener('click', this.close.bind(this)); } this.overlayManager.register(this.overlayName, this.container, this.close.bind(this)); + if (eventBus) { + eventBus.on('pagechanging', evt => { + this._currentPageNumber = evt.pageNumber; + }); + } } open() { let freezeFieldData = data => { @@ -4165,13 +4358,16 @@ class PDFDocumentProperties { }); }; Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]).then(() => { - if (this.fieldData) { + const currentPageNumber = this._currentPageNumber; + if (this.fieldData && currentPageNumber === this.fieldData['_currentPageNumber']) { this._updateUI(); return; } this.pdfDocument.getMetadata().then(({ info, metadata, contentDispositionFilename }) => { - return Promise.all([info, metadata, contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(this.maybeFileSize), this._parseDate(info.CreationDate), this._parseDate(info.ModDate)]); - }).then(([info, metadata, fileName, fileSize, creationDate, modDate]) => { + return Promise.all([info, metadata, contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(this.maybeFileSize), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => { + return this._parsePageSize(pdfPage.pageSizeInches); + })]); + }).then(([info, metadata, fileName, fileSize, creationDate, modDate, pageSizes]) => { freezeFieldData({ 'fileName': fileName, 'fileSize': fileSize, @@ -4184,13 +4380,20 @@ class PDFDocumentProperties { 'creator': info.Creator, 'producer': info.Producer, 'version': info.PDFFormatVersion, - 'pageCount': this.pdfDocument.numPages + 'pageCount': this.pdfDocument.numPages, + 'pageSizeInch': pageSizes.inch, + 'pageSizeMM': pageSizes.mm, + '_currentPageNumber': currentPageNumber }); this._updateUI(); return this.pdfDocument.getDownloadInfo(); }).then(({ length }) => { + this.maybeFileSize = length; return this._parseFileSize(length); }).then(fileSize => { + if (fileSize === this.fieldData['fileSize']) { + return; + } let data = (0, _ui_utils.cloneObj)(this.fieldData); data['fileSize'] = fileSize; freezeFieldData(data); @@ -4214,7 +4417,7 @@ class PDFDocumentProperties { this._dataAvailableCapability.resolve(); } setFileSize(fileSize) { - if (typeof fileSize === 'number' && fileSize > 0) { + if (Number.isInteger(fileSize) && fileSize > 0) { this.maybeFileSize = fileSize; } } @@ -4224,6 +4427,7 @@ class PDFDocumentProperties { this.maybeFileSize = 0; delete this.fieldData; this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._currentPageNumber = 1; } _updateUI(reset = false) { if (reset || !this.fieldData) { @@ -4255,6 +4459,27 @@ class PDFDocumentProperties { size_b: fileSize.toLocaleString() }, '{{size_mb}} MB ({{size_b}} bytes)'); } + _parsePageSize(pageSizeInches) { + if (!pageSizeInches) { + return Promise.resolve({ + inch: undefined, + mm: undefined + }); + } + const { width, height } = pageSizeInches; + return Promise.all([this.l10n.get('document_properties_page_size_in_2', { + width: (Math.round(width * 100) / 100).toLocaleString(), + height: (Math.round(height * 100) / 100).toLocaleString() + }, '{{width}} × {{height}} in'), this.l10n.get('document_properties_page_size_mm_2', { + width: (Math.round(width * 25.4 * 10) / 10).toLocaleString(), + height: (Math.round(height * 25.4 * 10) / 10).toLocaleString() + }, '{{width}} × {{height}} mm')]).then(sizes => { + return { + inch: sizes[0], + mm: sizes[1] + }; + }); + } _parseDate(inputDate) { if (!inputDate) { return; @@ -4291,7 +4516,7 @@ class PDFDocumentProperties { exports.PDFDocumentProperties = PDFDocumentProperties; /***/ }), -/* 16 */ +/* 17 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4302,7 +4527,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.PDFFindBar = undefined; -var _pdf_find_controller = __webpack_require__(7); +var _pdf_find_controller = __webpack_require__(9); var _ui_utils = __webpack_require__(0); @@ -4459,7 +4684,7 @@ class PDFFindBar { exports.PDFFindBar = PDFFindBar; /***/ }), -/* 17 */ +/* 18 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4836,7 +5061,7 @@ exports.isDestHashesEqual = isDestHashesEqual; exports.isDestArraysEqual = isDestArraysEqual; /***/ }), -/* 18 */ +/* 19 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4879,10 +5104,10 @@ class PDFOutlineViewer { }); return; } - element.href = this.linkService.getDestinationHash(dest); + element.href = linkService.getDestinationHash(dest); element.onclick = () => { if (dest) { - this.linkService.navigateTo(dest); + linkService.navigateTo(dest); } return false; }; @@ -4977,7 +5202,7 @@ class PDFOutlineViewer { exports.PDFOutlineViewer = PDFOutlineViewer; /***/ }), -/* 19 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5294,7 +5519,7 @@ class PDFPresentationMode { exports.PDFPresentationMode = PDFPresentationMode; /***/ }), -/* 20 */ +/* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5414,7 +5639,7 @@ class PDFSidebarResizer { exports.PDFSidebarResizer = PDFSidebarResizer; /***/ }), -/* 21 */ +/* 22 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5427,7 +5652,7 @@ exports.PDFThumbnailViewer = undefined; var _ui_utils = __webpack_require__(0); -var _pdf_thumbnail_view = __webpack_require__(22); +var _pdf_thumbnail_view = __webpack_require__(23); const THUMBNAIL_SCROLL_MARGIN = -19; const THUMBNAIL_SELECTED_CLASS = 'selected'; @@ -5603,7 +5828,7 @@ class PDFThumbnailViewer { exports.PDFThumbnailViewer = PDFThumbnailViewer; /***/ }), -/* 22 */ +/* 23 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5911,7 +6136,7 @@ class PDFThumbnailView { exports.PDFThumbnailView = PDFThumbnailView; /***/ }), -/* 23 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5924,7 +6149,7 @@ exports.PDFViewer = undefined; var _ui_utils = __webpack_require__(0); -var _base_viewer = __webpack_require__(24); +var _base_viewer = __webpack_require__(25); var _pdfjsLib = __webpack_require__(1); @@ -5987,7 +6212,7 @@ class PDFViewer extends _base_viewer.BaseViewer { exports.PDFViewer = PDFViewer; /***/ }), -/* 24 */ +/* 25 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5998,21 +6223,21 @@ Object.defineProperty(exports, "__esModule", { }); exports.BaseViewer = undefined; -var _pdfjsLib = __webpack_require__(1); - var _ui_utils = __webpack_require__(0); var _pdf_rendering_queue = __webpack_require__(3); -var _annotation_layer_builder = __webpack_require__(25); +var _annotation_layer_builder = __webpack_require__(26); + +var _pdfjsLib = __webpack_require__(1); var _dom_events = __webpack_require__(2); -var _pdf_page_view = __webpack_require__(26); +var _pdf_page_view = __webpack_require__(27); var _pdf_link_service = __webpack_require__(5); -var _text_layer_builder = __webpack_require__(27); +var _text_layer_builder = __webpack_require__(28); const DEFAULT_CACHE_SIZE = 10; function PDFPageViewBuffer(size) { @@ -6259,7 +6484,7 @@ class BaseViewer { this._pages.push(pageView); } onePageRenderedCapability.promise.then(() => { - if (_pdfjsLib.PDFJS.disableAutoFetch) { + if (pdfDocument.loadingParams['disableAutoFetch']) { pagesCapability.resolve(); return; } @@ -6674,7 +6899,7 @@ class BaseViewer { exports.BaseViewer = BaseViewer; /***/ }), -/* 25 */ +/* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6759,7 +6984,7 @@ exports.AnnotationLayerBuilder = AnnotationLayerBuilder; exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory; /***/ }), -/* 26 */ +/* 27 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7216,7 +7441,7 @@ class PDFPageView { exports.PDFPageView = PDFPageView; /***/ }), -/* 27 */ +/* 28 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7485,7 +7710,7 @@ exports.TextLayerBuilder = TextLayerBuilder; exports.DefaultTextLayerFactory = DefaultTextLayerFactory; /***/ }), -/* 28 */ +/* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7665,7 +7890,7 @@ class SecondaryToolbar { exports.SecondaryToolbar = SecondaryToolbar; /***/ }), -/* 29 */ +/* 30 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7850,7 +8075,7 @@ class Toolbar { exports.Toolbar = Toolbar; /***/ }), -/* 30 */ +/* 31 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7933,7 +8158,7 @@ class ViewHistory { exports.ViewHistory = ViewHistory; /***/ }), -/* 31 */ +/* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7944,11 +8169,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.FirefoxCom = exports.DownloadManager = undefined; -__webpack_require__(32); +__webpack_require__(33); var _pdfjsLib = __webpack_require__(1); -var _preferences = __webpack_require__(33); +var _preferences = __webpack_require__(34); var _app = __webpack_require__(4); @@ -7993,6 +8218,9 @@ let FirefoxCom = function FirefoxComClosure() { }; }(); class DownloadManager { + constructor(options) { + this.disableCreateObjectURL = false; + } downloadUrl(url, filename) { FirefoxCom.request('download', { originalUrl: url, @@ -8000,7 +8228,7 @@ class DownloadManager { }); } downloadData(data, filename, contentType) { - let blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, false); + let blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType); FirefoxCom.request('download', { blobUrl, originalUrl: blobUrl, @@ -8135,8 +8363,8 @@ _app.PDFViewerApplication.externalServices = { reportTelemetry(data) { FirefoxCom.request('reportTelemetry', JSON.stringify(data)); }, - createDownloadManager() { - return new DownloadManager(); + createDownloadManager(options) { + return new DownloadManager(options); }, createPreferences() { return new FirefoxPreferences(); @@ -8174,7 +8402,7 @@ exports.DownloadManager = DownloadManager; exports.FirefoxCom = FirefoxCom; /***/ }), -/* 32 */ +/* 33 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8272,7 +8500,7 @@ exports.FirefoxCom = FirefoxCom; })(undefined); /***/ }), -/* 33 */ +/* 34 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8395,7 +8623,7 @@ class BasePreferences { exports.BasePreferences = BasePreferences; /***/ }), -/* 34 */ +/* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict";