diff --git a/bower.json b/bower.json index 22b688fd3..5417585e6 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.4.183", + "version": "1.4.185", "main": [ "build/pdf.js", "build/pdf.worker.js" diff --git a/build/pdf.combined.js b/build/pdf.combined.js index 103ecb587..ce35c79f7 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdfCombined = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.183'; -var pdfjsBuild = 'ff3ce97'; +var pdfjsVersion = '1.4.185'; +var pdfjsBuild = 'a250c15'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -18148,9 +18148,6 @@ var Jbig2Image = coreJbig2.Jbig2Image; var JpegImage = coreJpg.JpegImage; var JpxImage = coreJpx.JpxImage; -var coreColorSpace; // see _setCoreColorSpace below -var ColorSpace; // = coreColorSpace.ColorSpace; - var Stream = (function StreamClosure() { function Stream(arrayBuffer, start, length, dict) { this.bytes = (arrayBuffer instanceof Uint8Array ? @@ -19067,25 +19064,6 @@ var JpegStream = (function JpegStreamClosure() { JpegStream.prototype.getIR = function JpegStream_getIR(forceDataSchema) { return createObjectURL(this.bytes, 'image/jpeg', forceDataSchema); }; - /** - * Checks if the image can be decoded and displayed by the browser without any - * further processing such as color space conversions. - */ - JpegStream.prototype.isNativelySupported = - function JpegStream_isNativelySupported(xref, res) { - var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); - return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && - cs.isDefaultDecode(this.dict.get('Decode', 'D')); - }; - /** - * Checks if the image can be decoded by the browser. - */ - JpegStream.prototype.isNativelyDecodable = - function JpegStream_isNativelyDecodable(xref, res) { - var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); - return (cs.numComps === 1 || cs.numComps === 3) && - cs.isDefaultDecode(this.dict.get('Decode', 'D')); - }; return JpegStream; })(); @@ -20605,13 +20583,6 @@ var NullStream = (function NullStreamClosure() { return NullStream; })(); -// TODO refactor to remove dependency on colorspace.js -function _setCoreColorSpace(coreColorSpace_) { - coreColorSpace = coreColorSpace_; - ColorSpace = coreColorSpace_.ColorSpace; -} -exports._setCoreColorSpace = _setCoreColorSpace; - exports.Ascii85Stream = Ascii85Stream; exports.AsciiHexStream = AsciiHexStream; exports.CCITTFaxStream = CCITTFaxStream; @@ -40558,10 +40529,9 @@ exports.PDFPageProxy = PDFPageProxy; (function (root, factory) { { factory((root.pdfjsCoreColorSpace = {}), root.pdfjsSharedUtil, - root.pdfjsCorePrimitives, root.pdfjsCoreFunction, root.pdfjsCoreStream); + root.pdfjsCorePrimitives, root.pdfjsCoreFunction); } -}(this, function (exports, sharedUtil, corePrimitives, coreFunction, - coreStream) { +}(this, function (exports, sharedUtil, corePrimitives, coreFunction) { var error = sharedUtil.error; var info = sharedUtil.info; @@ -41832,9 +41802,6 @@ function _setCoreImage(coreImage_) { exports._setCoreImage = _setCoreImage; exports.ColorSpace = ColorSpace; - -// TODO refactor to remove dependency on colorspace.js -coreStream._setCoreColorSpace(exports); })); @@ -41857,29 +41824,17 @@ var Name = corePrimitives.Name; var isStream = corePrimitives.isStream; var ColorSpace = coreColorSpace.ColorSpace; var DecodeStream = coreStream.DecodeStream; -var Stream = coreStream.Stream; var JpegStream = coreStream.JpegStream; var JpxImage = coreJpx.JpxImage; var PDFImage = (function PDFImageClosure() { /** - * Decode the image in the main thread if it supported. Resovles the promise + * Decodes the image using native decoder if possible. Resolves the promise * when the image data is ready. */ - function handleImageData(handler, xref, res, image, forceDataSchema) { - if (image instanceof JpegStream && image.isNativelyDecodable(xref, res)) { - // For natively supported jpegs send them to the main thread for decoding. - var dict = image.dict; - var colorSpace = dict.get('ColorSpace', 'CS'); - colorSpace = ColorSpace.parse(colorSpace, xref, res); - var numComps = colorSpace.numComps; - var decodePromise = handler.sendWithPromise('JpegDecode', - [image.getIR(forceDataSchema), - numComps]); - return decodePromise.then(function (message) { - var data = message.data; - return new Stream(data, 0, data.length, image.dict); - }); + function handleImageData(image, nativeDecoder) { + if (nativeDecoder && nativeDecoder.canDecode(image)) { + return nativeDecoder.decode(image); } else { return Promise.resolve(image); } @@ -42001,9 +41956,8 @@ var PDFImage = (function PDFImageClosure() { */ PDFImage.buildImage = function PDFImage_buildImage(handler, xref, res, image, inline, - forceDataSchema) { - var imagePromise = handleImageData(handler, xref, res, image, - forceDataSchema); + nativeDecoder) { + var imagePromise = handleImageData(image, nativeDecoder); var smaskPromise; var maskPromise; @@ -42011,15 +41965,13 @@ var PDFImage = (function PDFImageClosure() { var mask = image.dict.get('Mask'); if (smask) { - smaskPromise = handleImageData(handler, xref, res, smask, - forceDataSchema); + smaskPromise = handleImageData(smask, nativeDecoder); maskPromise = Promise.resolve(null); } else { smaskPromise = Promise.resolve(null); if (mask) { if (isStream(mask)) { - maskPromise = handleImageData(handler, xref, res, mask, - forceDataSchema); + maskPromise = handleImageData(mask, nativeDecoder); } else if (isArray(mask)) { maskPromise = Promise.resolve(mask); } else { @@ -44964,6 +44916,7 @@ var isRef = corePrimitives.isRef; var isStream = corePrimitives.isStream; var DecodeStream = coreStream.DecodeStream; var JpegStream = coreStream.JpegStream; +var Stream = coreStream.Stream; var Lexer = coreParser.Lexer; var Parser = coreParser.Parser; var isEOF = coreParser.isEOF; @@ -45006,6 +44959,51 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { cMapOptions: { url: null, packed: false } }; + function NativeImageDecoder(xref, resources, handler, forceDataSchema) { + this.xref = xref; + this.resources = resources; + this.handler = handler; + this.forceDataSchema = forceDataSchema; + } + NativeImageDecoder.prototype = { + canDecode: function (image) { + return image instanceof JpegStream && + NativeImageDecoder.isDecodable(image, this.xref, this.resources); + }, + decode: function (image) { + // For natively supported JPEGs send them to the main thread for decoding. + var dict = image.dict; + var colorSpace = dict.get('ColorSpace', 'CS'); + colorSpace = ColorSpace.parse(colorSpace, this.xref, this.resources); + var numComps = colorSpace.numComps; + var decodePromise = this.handler.sendWithPromise('JpegDecode', + [image.getIR(this.forceDataSchema), numComps]); + return decodePromise.then(function (message) { + var data = message.data; + return new Stream(data, 0, data.length, image.dict); + }); + } + }; + /** + * Checks if the image can be decoded and displayed by the browser without any + * further processing such as color space conversions. + */ + NativeImageDecoder.isSupported = + function NativeImageDecoder_isSupported(image, xref, res) { + var cs = ColorSpace.parse(image.dict.get('ColorSpace', 'CS'), xref, res); + return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && + cs.isDefaultDecode(image.dict.get('Decode', 'D')); + }; + /** + * Checks if the image can be decoded by the browser. + */ + NativeImageDecoder.isDecodable = + function NativeImageDecoder_isDecodable(image, xref, res) { + var cs = ColorSpace.parse(image.dict.get('ColorSpace', 'CS'), xref, res); + return (cs.numComps === 1 || cs.numComps === 3) && + cs.isDefaultDecode(image.dict.get('Decode', 'D')); + }; + function PartialEvaluator(pdfManager, xref, handler, pageIndex, uniquePrefix, idCounters, fontCache, options) { this.pdfManager = pdfManager; @@ -45235,7 +45233,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { args = [objId, w, h]; if (!softMask && !mask && image instanceof JpegStream && - image.isNativelySupported(this.xref, resources)) { + NativeImageDecoder.isSupported(image, this.xref, resources)) { // These JPEGs don't need any more processing so we can just send it. operatorList.addOp(OPS.paintJpegXObject, args); this.handler.send('obj', @@ -45244,8 +45242,16 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { return; } + // Creates native image decoder only if a JPEG image or mask is present. + var nativeImageDecoder = null; + if (image instanceof JpegStream || mask instanceof JpegStream || + softMask instanceof JpegStream) { + nativeImageDecoder = new NativeImageDecoder(self.xref, resources, + self.handler, self.options.forceDataSchema); + } + PDFImage.buildImage(self.handler, self.xref, resources, image, inline, - this.options.forceDataSchema). + nativeImageDecoder). then(function(imageObj) { var imgData = imageObj.createImageData(/* forceRGBA = */ false); self.handler.send('obj', [objId, self.pageIndex, 'Image', imgData], diff --git a/build/pdf.js b/build/pdf.js index 5c2a1f32b..ef167cc83 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdf = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.183'; -var pdfjsBuild = 'ff3ce97'; +var pdfjsVersion = '1.4.185'; +var pdfjsBuild = 'a250c15'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? diff --git a/build/pdf.worker.js b/build/pdf.worker.js index 3428c2914..daa630a62 100644 --- a/build/pdf.worker.js +++ b/build/pdf.worker.js @@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdfWorker = {})); // Use strict in our context only - users might not want it 'use strict'; -var pdfjsVersion = '1.4.183'; -var pdfjsBuild = 'ff3ce97'; +var pdfjsVersion = '1.4.185'; +var pdfjsBuild = 'a250c15'; var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? @@ -18076,9 +18076,6 @@ var Jbig2Image = coreJbig2.Jbig2Image; var JpegImage = coreJpg.JpegImage; var JpxImage = coreJpx.JpxImage; -var coreColorSpace; // see _setCoreColorSpace below -var ColorSpace; // = coreColorSpace.ColorSpace; - var Stream = (function StreamClosure() { function Stream(arrayBuffer, start, length, dict) { this.bytes = (arrayBuffer instanceof Uint8Array ? @@ -18995,25 +18992,6 @@ var JpegStream = (function JpegStreamClosure() { JpegStream.prototype.getIR = function JpegStream_getIR(forceDataSchema) { return createObjectURL(this.bytes, 'image/jpeg', forceDataSchema); }; - /** - * Checks if the image can be decoded and displayed by the browser without any - * further processing such as color space conversions. - */ - JpegStream.prototype.isNativelySupported = - function JpegStream_isNativelySupported(xref, res) { - var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); - return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && - cs.isDefaultDecode(this.dict.get('Decode', 'D')); - }; - /** - * Checks if the image can be decoded by the browser. - */ - JpegStream.prototype.isNativelyDecodable = - function JpegStream_isNativelyDecodable(xref, res) { - var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res); - return (cs.numComps === 1 || cs.numComps === 3) && - cs.isDefaultDecode(this.dict.get('Decode', 'D')); - }; return JpegStream; })(); @@ -20533,13 +20511,6 @@ var NullStream = (function NullStreamClosure() { return NullStream; })(); -// TODO refactor to remove dependency on colorspace.js -function _setCoreColorSpace(coreColorSpace_) { - coreColorSpace = coreColorSpace_; - ColorSpace = coreColorSpace_.ColorSpace; -} -exports._setCoreColorSpace = _setCoreColorSpace; - exports.Ascii85Stream = Ascii85Stream; exports.AsciiHexStream = AsciiHexStream; exports.CCITTFaxStream = CCITTFaxStream; @@ -32391,10 +32362,9 @@ exports.PostScriptCompiler = PostScriptCompiler; (function (root, factory) { { factory((root.pdfjsCoreColorSpace = {}), root.pdfjsSharedUtil, - root.pdfjsCorePrimitives, root.pdfjsCoreFunction, root.pdfjsCoreStream); + root.pdfjsCorePrimitives, root.pdfjsCoreFunction); } -}(this, function (exports, sharedUtil, corePrimitives, coreFunction, - coreStream) { +}(this, function (exports, sharedUtil, corePrimitives, coreFunction) { var error = sharedUtil.error; var info = sharedUtil.info; @@ -33665,9 +33635,6 @@ function _setCoreImage(coreImage_) { exports._setCoreImage = _setCoreImage; exports.ColorSpace = ColorSpace; - -// TODO refactor to remove dependency on colorspace.js -coreStream._setCoreColorSpace(exports); })); @@ -33690,29 +33657,17 @@ var Name = corePrimitives.Name; var isStream = corePrimitives.isStream; var ColorSpace = coreColorSpace.ColorSpace; var DecodeStream = coreStream.DecodeStream; -var Stream = coreStream.Stream; var JpegStream = coreStream.JpegStream; var JpxImage = coreJpx.JpxImage; var PDFImage = (function PDFImageClosure() { /** - * Decode the image in the main thread if it supported. Resovles the promise + * Decodes the image using native decoder if possible. Resolves the promise * when the image data is ready. */ - function handleImageData(handler, xref, res, image, forceDataSchema) { - if (image instanceof JpegStream && image.isNativelyDecodable(xref, res)) { - // For natively supported jpegs send them to the main thread for decoding. - var dict = image.dict; - var colorSpace = dict.get('ColorSpace', 'CS'); - colorSpace = ColorSpace.parse(colorSpace, xref, res); - var numComps = colorSpace.numComps; - var decodePromise = handler.sendWithPromise('JpegDecode', - [image.getIR(forceDataSchema), - numComps]); - return decodePromise.then(function (message) { - var data = message.data; - return new Stream(data, 0, data.length, image.dict); - }); + function handleImageData(image, nativeDecoder) { + if (nativeDecoder && nativeDecoder.canDecode(image)) { + return nativeDecoder.decode(image); } else { return Promise.resolve(image); } @@ -33834,9 +33789,8 @@ var PDFImage = (function PDFImageClosure() { */ PDFImage.buildImage = function PDFImage_buildImage(handler, xref, res, image, inline, - forceDataSchema) { - var imagePromise = handleImageData(handler, xref, res, image, - forceDataSchema); + nativeDecoder) { + var imagePromise = handleImageData(image, nativeDecoder); var smaskPromise; var maskPromise; @@ -33844,15 +33798,13 @@ var PDFImage = (function PDFImageClosure() { var mask = image.dict.get('Mask'); if (smask) { - smaskPromise = handleImageData(handler, xref, res, smask, - forceDataSchema); + smaskPromise = handleImageData(smask, nativeDecoder); maskPromise = Promise.resolve(null); } else { smaskPromise = Promise.resolve(null); if (mask) { if (isStream(mask)) { - maskPromise = handleImageData(handler, xref, res, mask, - forceDataSchema); + maskPromise = handleImageData(mask, nativeDecoder); } else if (isArray(mask)) { maskPromise = Promise.resolve(mask); } else { @@ -36797,6 +36749,7 @@ var isRef = corePrimitives.isRef; var isStream = corePrimitives.isStream; var DecodeStream = coreStream.DecodeStream; var JpegStream = coreStream.JpegStream; +var Stream = coreStream.Stream; var Lexer = coreParser.Lexer; var Parser = coreParser.Parser; var isEOF = coreParser.isEOF; @@ -36839,6 +36792,51 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { cMapOptions: { url: null, packed: false } }; + function NativeImageDecoder(xref, resources, handler, forceDataSchema) { + this.xref = xref; + this.resources = resources; + this.handler = handler; + this.forceDataSchema = forceDataSchema; + } + NativeImageDecoder.prototype = { + canDecode: function (image) { + return image instanceof JpegStream && + NativeImageDecoder.isDecodable(image, this.xref, this.resources); + }, + decode: function (image) { + // For natively supported JPEGs send them to the main thread for decoding. + var dict = image.dict; + var colorSpace = dict.get('ColorSpace', 'CS'); + colorSpace = ColorSpace.parse(colorSpace, this.xref, this.resources); + var numComps = colorSpace.numComps; + var decodePromise = this.handler.sendWithPromise('JpegDecode', + [image.getIR(this.forceDataSchema), numComps]); + return decodePromise.then(function (message) { + var data = message.data; + return new Stream(data, 0, data.length, image.dict); + }); + } + }; + /** + * Checks if the image can be decoded and displayed by the browser without any + * further processing such as color space conversions. + */ + NativeImageDecoder.isSupported = + function NativeImageDecoder_isSupported(image, xref, res) { + var cs = ColorSpace.parse(image.dict.get('ColorSpace', 'CS'), xref, res); + return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && + cs.isDefaultDecode(image.dict.get('Decode', 'D')); + }; + /** + * Checks if the image can be decoded by the browser. + */ + NativeImageDecoder.isDecodable = + function NativeImageDecoder_isDecodable(image, xref, res) { + var cs = ColorSpace.parse(image.dict.get('ColorSpace', 'CS'), xref, res); + return (cs.numComps === 1 || cs.numComps === 3) && + cs.isDefaultDecode(image.dict.get('Decode', 'D')); + }; + function PartialEvaluator(pdfManager, xref, handler, pageIndex, uniquePrefix, idCounters, fontCache, options) { this.pdfManager = pdfManager; @@ -37068,7 +37066,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { args = [objId, w, h]; if (!softMask && !mask && image instanceof JpegStream && - image.isNativelySupported(this.xref, resources)) { + NativeImageDecoder.isSupported(image, this.xref, resources)) { // These JPEGs don't need any more processing so we can just send it. operatorList.addOp(OPS.paintJpegXObject, args); this.handler.send('obj', @@ -37077,8 +37075,16 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { return; } + // Creates native image decoder only if a JPEG image or mask is present. + var nativeImageDecoder = null; + if (image instanceof JpegStream || mask instanceof JpegStream || + softMask instanceof JpegStream) { + nativeImageDecoder = new NativeImageDecoder(self.xref, resources, + self.handler, self.options.forceDataSchema); + } + PDFImage.buildImage(self.handler, self.xref, resources, image, inline, - this.options.forceDataSchema). + nativeImageDecoder). then(function(imageObj) { var imgData = imageObj.createImageData(/* forceRGBA = */ false); self.handler.send('obj', [objId, self.pageIndex, 'Image', imgData], diff --git a/package.json b/package.json index abdb61aa6..bf88d1e10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.4.183", + "version": "1.4.185", "main": "build/pdf.js", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [