mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Add a gulp image_decoders
command to allow packaging/distributing the image decoders (i.e. jpg.js, jpx.js, jbig2.js) separately from the main PDF.js library
Please note that the standalone `pdf.image_decoders.js` file will be including the complete `src/shared/util.js` file, despite only using parts of it.[1] This was done *purposely*, to not negatively impact the readability/maintainability of the core PDF.js code. Furthermore, to ensure that the compatibility is the same in the regular PDF.js library *and* in the the standalone image decoders, `src/shared/compatibility.js` was included as well. To (hopefully) prevent future complaints about the size of the built `pdf.image_decoders.js` file, a few existing async-related polyfills are being skipped (since all of the image decoders are completely synchronous). Obviously this required adding a couple of pre-processor statements, but given that these are all limited to "compatibility" code, I think this might be OK!? --- [1] However, please note that previous commits moved `PageViewport` and `MessageHandler` out of `src/shared/util.js` which reduced its size.
This commit is contained in:
parent
bfc88ead66
commit
303537bcb1
4 changed files with 111 additions and 4 deletions
45
src/pdf.image_decoders.js
Normal file
45
src/pdf.image_decoders.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
/* Copyright 2018 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.
|
||||
*/
|
||||
/* eslint-disable no-unused-vars */
|
||||
|
||||
import { getVerbosityLevel, setVerbosityLevel } from './shared/util';
|
||||
import { Jbig2mage } from './core/jbig2';
|
||||
import { JpegImage } from './core/jpg';
|
||||
import { JpxImage } from './core/jpx';
|
||||
|
||||
// To ensure that the standalone PDF.js image decoders have the same
|
||||
// browser/environment compatibility as the regular PDF.js library,
|
||||
// the standard set of polyfills are thus included in this build as well.
|
||||
//
|
||||
// Given that the (current) image decoders don't use all of the features
|
||||
// of the complete PDF.js library, e.g. they are completely synchronous,
|
||||
// some of the larger polyfills are thus unnecessary.
|
||||
//
|
||||
// In an attempt to reduce the size of the standalone PDF.js image decoders,
|
||||
// the following polyfills are currently being excluded:
|
||||
// - ReadableStream
|
||||
// - Promise
|
||||
// - URL
|
||||
|
||||
const pdfjsVersion = PDFJSDev.eval('BUNDLE_VERSION');
|
||||
const pdfjsBuild = PDFJSDev.eval('BUNDLE_BUILD');
|
||||
|
||||
export {
|
||||
Jbig2mage,
|
||||
JpegImage,
|
||||
JpxImage,
|
||||
getVerbosityLevel,
|
||||
setVerbosityLevel,
|
||||
};
|
|
@ -138,6 +138,11 @@ const hasDOM = typeof window === 'object' && typeof document === 'object';
|
|||
|
||||
// Support: IE, Safari<8, Chrome<32
|
||||
(function checkPromise() {
|
||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('IMAGE_DECODERS')) {
|
||||
// The current image decoders are synchronous, hence `Promise` shouldn't
|
||||
// need to be polyfilled for the IMAGE_DECODERS build target.
|
||||
return;
|
||||
}
|
||||
if (globalScope.Promise) {
|
||||
return;
|
||||
}
|
||||
|
@ -157,6 +162,11 @@ const hasDOM = typeof window === 'object' && typeof document === 'object';
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
(function checkURLConstructor() {
|
||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('IMAGE_DECODERS')) {
|
||||
// The current image decoders doesn't utilize the `URL` constructor, hence
|
||||
// it shouldn't need to be polyfilled for the IMAGE_DECODERS build target.
|
||||
return;
|
||||
}
|
||||
// feature detect for URL constructor
|
||||
var hasWorkingUrl = false;
|
||||
try {
|
||||
|
|
|
@ -31,6 +31,17 @@ if (typeof ReadableStream !== 'undefined') {
|
|||
if (isReadableStreamSupported) {
|
||||
exports.ReadableStream = ReadableStream;
|
||||
} else {
|
||||
exports.ReadableStream =
|
||||
require('../../external/streams/streams-lib').ReadableStream;
|
||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('IMAGE_DECODERS')) {
|
||||
class DummyReadableStream {
|
||||
constructor() {
|
||||
throw new Error('The current image decoders are synchronous, ' +
|
||||
'hence `ReadableStream` shouldn\'t need to be ' +
|
||||
'polyfilled for the IMAGE_DECODERS build target.');
|
||||
}
|
||||
}
|
||||
exports.ReadableStream = DummyReadableStream;
|
||||
} else {
|
||||
exports.ReadableStream =
|
||||
require('../../external/streams/streams-lib').ReadableStream;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue