diff --git a/app/src/asset/index.ts b/app/src/asset/index.ts
index 36d03224f..bf7548cdd 100644
--- a/app/src/asset/index.ts
+++ b/app/src/asset/index.ts
@@ -440,6 +440,11 @@ export class Asset extends Model {
+
+
+
+
+
`;
diff --git a/app/src/asset/pdf/app.js b/app/src/asset/pdf/app.js
index e63c45440..ed5997037 100644
--- a/app/src/asset/pdf/app.js
+++ b/app/src/asset/pdf/app.js
@@ -688,7 +688,7 @@ class PDFViewerApplication {
get loadingBar() {
// NOTE
const bar = new ProgressBar(this.appConfig.appContainer.querySelector("#loadingBar"))
- return shadow(this, 'loadingBar', bar)
+ return shadow(this, "loadingBar", bar);
}
get supportedMouseWheelZoomModifierKeys() {
@@ -894,7 +894,11 @@ class PDFViewerApplication {
}
// Set the necessary API parameters, using all the available options.
const apiParams = AppOptions.getAll(OptionKind.API);
- const params = { ...apiParams, ...args };
+ const params = {
+ canvasMaxAreaInBytes: this.externalServices.canvasMaxAreaInBytes,
+ ...apiParams,
+ ...args,
+ };
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("PRODUCTION")) {
params.docBaseUrl ||= document.URL.split("#")[0];
@@ -930,18 +934,18 @@ class PDFViewerApplication {
return undefined; // Ignore errors for previously opened PDF files.
}
- // NOTE
- let key = 'loadingError'
+ let key = "loadingError";
if (reason instanceof InvalidPDFException) {
- key = 'invalidFileError'
+ key = "invalidFileError";
} else if (reason instanceof MissingPDFException) {
- key = 'missingFileError'
+ key = "missingFileError";
} else if (reason instanceof UnexpectedResponseException) {
- key = 'unexpectedResponseError'
+ key = "unexpectedResponseError";
}
+ // NOTE
this._documentError(window.siyuan.languages[key], {message: reason?.message})
throw reason
- },
+ }
);
}
@@ -1114,20 +1118,17 @@ class PDFViewerApplication {
this.toolbar?.setPagesCount(pdfDocument.numPages, false);
this.secondaryToolbar?.setPagesCount(pdfDocument.numPages);
- let baseDocumentUrl;
- if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
- baseDocumentUrl = null;
- } else if (PDFJSDev.test("MOZCENTRAL")) {
- baseDocumentUrl = this.baseUrl;
- } else if (PDFJSDev.test("CHROME")) {
- baseDocumentUrl = location.href.split("#")[0];
- }
- if (baseDocumentUrl && isDataScheme(baseDocumentUrl)) {
+ if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("CHROME")) {
+ const baseUrl = location.href.split("#")[0];
// Ignore "data:"-URLs for performance reasons, even though it may cause
// internal links to not work perfectly in all cases (see bug 1803050).
- baseDocumentUrl = null;
+ this.pdfLinkService.setDocument(
+ pdfDocument,
+ isDataScheme(baseUrl) ? null : baseUrl
+ );
+ } else {
+ this.pdfLinkService.setDocument(pdfDocument);
}
- this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
this.pdfDocumentProperties?.setDocument(pdfDocument);
const pdfViewer = this.pdfViewer;
@@ -2121,7 +2122,7 @@ async function loadFakeWorker() {
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("PRODUCTION")) {
// NOTE
- window.pdfjsWorker = await import(`${Constants.PROTYLE_CDN}/js/pdf/pdf.worker.js?v=3.4.120`)
+ window.pdfjsWorker = await import(`${Constants.PROTYLE_CDN}/js/pdf/pdf.worker.js?v=3.5.141`)
return;
}
await loadScript(PDFWorker.workerSrc);
@@ -2202,23 +2203,19 @@ function webViewerInitialized(pdf) {
if (!pdf.supportsDocumentFonts) {
AppOptions.set("disableFontFace", true);
- // NOTE
console.warn('Web fonts are disabled: unable to use embedded PDF fonts.')
}
if (!pdf.supportsPrinting) {
- // NOTE
appConfig.toolbar?.print.classList.add("fn__hidden");
appConfig.secondaryToolbar?.printButton.classList.add("fn__hidden");
}
if (!pdf.supportsFullscreen) {
- // NOTE
appConfig.secondaryToolbar?.presentationModeButton.classList.add("fn__hidden");
}
if (pdf.supportsIntegratedFind) {
- // NOTE
appConfig.toolbar?.viewFind.classList.add("fn__hidden");
}
@@ -2488,23 +2485,21 @@ function webViewerHashchange(evt) {
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
// eslint-disable-next-line no-var
var webViewerFileInputChange = function (evt) {
- // NOTE
- // if (PDFViewerApplication.pdfViewer?.isInPresentationMode) {
- // return; // Opening a new PDF file isn't supported in Presentation Mode.
- // }
- // const file = evt.fileInput.files[0];
- //
- // PDFViewerApplication.open({
- // url: URL.createObjectURL(file),
- // originalUrl: file.name,
- // });
+ if (PDFViewerApplication.pdfViewer?.isInPresentationMode) {
+ return; // Opening a new PDF file isn't supported in Presentation Mode.
+ }
+ const file = evt.fileInput.files[0];
+
+ PDFViewerApplication.open({
+ url: URL.createObjectURL(file),
+ originalUrl: file.name,
+ });
};
// eslint-disable-next-line no-var
var webViewerOpenFile = function (evt) {
- // NOTE
- // const fileInput = PDFViewerApplication.appConfig.openFileInput;
- // fileInput.click();
+ const fileInput = PDFViewerApplication.appConfig.openFileInput;
+ fileInput.click();
};
}
@@ -2640,12 +2635,12 @@ function webViewerPageNumberChanged(evt) {
// Ensure that the page number input displays the correct value, even if the
// value entered by the user was invalid (e.g. a floating point number).
if (
- evt.value !== pdfViewer.currentPageNumber.toString() &&
- evt.value !== pdfViewer.currentPageLabel
+ evt.value !== pdfViewer.currentPageNumber.toString() &&
+ evt.value !== pdfViewer.currentPageLabel
) {
pdfInstance.toolbar?.setPageNumber(
- pdfViewer.currentPageNumber,
- pdfViewer.currentPageLabel
+ pdfViewer.currentPageNumber,
+ pdfViewer.currentPageLabel
);
}
}
@@ -3102,7 +3097,7 @@ function webViewerTouchMove(evt) {
}
}
- pdfInstance._centerAtPos(
+ PDFViewerApplication._centerAtPos(
previousScale,
(page0X + page1X) / 2,
(page0Y + page1Y) / 2
@@ -3132,8 +3127,8 @@ function webViewerClick(evt) {
return
}
- // 点击后证快捷键可正常使用,select 也可正常使用 https://github.com/siyuan-note/siyuan/issues/7869
- if (evt.target.tagName !== "SELECT") {
+ // 点击后证快捷键可正常使用,select 等也可正常使用 https://github.com/siyuan-note/siyuan/issues/7869
+ if (!["SELECT", "TEXTAREA", "INPUT"].includes(evt.target.tagName)) {
pdfInstance.pdfViewer.focus();
}
@@ -3142,9 +3137,9 @@ function webViewerClick(evt) {
}
const appConfig = pdfInstance.appConfig;
if (
- pdfInstance.pdfViewer.containsElement(evt.target) ||
- (appConfig.toolbar?.container.contains(evt.target) &&
- !appConfig.secondaryToolbar.toggleButton.contains(evt.target)) // NOTE
+ pdfInstance.pdfViewer.containsElement(evt.target) ||
+ (appConfig.toolbar?.container.contains(evt.target) &&
+ !appConfig.secondaryToolbar.toggleButton.contains(evt.target)) // NOTE
) {
pdfInstance.secondaryToolbar.close();
}
@@ -3160,6 +3155,7 @@ function webViewerKeyUp(evt) {
if (evt.key === "Control") {
pdfInstance._isCtrlKeyDown = false;
}
+ // 快捷键高亮取消
if (evt.keyCode === 68 && pdfInstance.appConfig.toolbar.rectAnno.classList.contains('toggled')) {
pdfInstance.appConfig.toolbar.rectAnno.dispatchEvent(
new MouseEvent('click'))
@@ -3260,7 +3256,7 @@ function webViewerKeyDown(evt) {
isViewerInPresentationMode ||
pdfInstance.page < pdfInstance.pagesCount
) {
- pdfInstance.page = pdfInstance.pagesCount;
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
handled = true;
ensureViewerFocused = true;
}
@@ -3519,9 +3515,9 @@ const PDFPrintServiceFactory = {
},
};
+// NOTE
export {
PDFPrintServiceFactory,
PDFViewerApplication,
- // NOTE
webViewerPageNumberChanged,
};
diff --git a/app/src/asset/pdf/app_options.js b/app/src/asset/pdf/app_options.js
index b899ae4e6..db830a195 100644
--- a/app/src/asset/pdf/app_options.js
+++ b/app/src/asset/pdf/app_options.js
@@ -279,7 +279,7 @@ const defaultOptions = {
workerSrc: {
/** @type {string} */
// NOTE
- value: `${Constants.PROTYLE_CDN}/js/pdf/pdf.worker.js?v=3.4.120`,
+ value: `${Constants.PROTYLE_CDN}/js/pdf/pdf.worker.js?v=3.5.141`,
kind: OptionKind.WORKER,
},
};
diff --git a/app/src/asset/pdf/l10n_utils.js b/app/src/asset/pdf/l10n_utils.js
index 258dac7e2..42e2d46de 100644
--- a/app/src/asset/pdf/l10n_utils.js
+++ b/app/src/asset/pdf/l10n_utils.js
@@ -117,7 +117,7 @@ function formatL10nValue(text, args) {
if (!args) {
return text;
}
- return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
+ return text.replaceAll(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
return name in args ? args[name] : "{{" + name + "}}";
});
}
diff --git a/app/src/asset/pdf/pdf_find_controller.js b/app/src/asset/pdf/pdf_find_controller.js
index b675be9cf..bb069df2e 100644
--- a/app/src/asset/pdf/pdf_find_controller.js
+++ b/app/src/asset/pdf/pdf_find_controller.js
@@ -289,21 +289,26 @@ function normalize(text) {
// "X-\n" is removed because an hyphen at the end of a line
// with not a space before is likely here to mark a break
// in a word.
- // The \n isn't in the original text so here y = i, n = 1 and o = 2.
- positions.push([i - shift + 1, 1 + shift]);
+ // If X is encoded with UTF-32 then it can have a length greater than 1.
+ // The \n isn't in the original text so here y = i, n = X.len - 2 and
+ // o = X.len - 1.
+ const len = p5.length - 2;
+ positions.push([i - shift + len, 1 + shift]);
shift += 1;
shiftOrigin += 1;
eol += 1;
- return p5.charAt(0);
+ return p5.slice(0, -2);
}
if (p6) {
// An ideographic at the end of a line doesn't imply adding an extra
// white space.
- positions.push([i - shift + 1, shift]);
+ // A CJK can be encoded in UTF-32, hence their length isn't always 1.
+ const len = p6.length - 1;
+ positions.push([i - shift + len, shift]);
shiftOrigin += 1;
eol += 1;
- return p6.charAt(0);
+ return p6.slice(0, -1);
}
if (p7) {
@@ -364,7 +369,7 @@ function getOriginalIndex(diffs, pos, len) {
* @typedef {Object} PDFFindControllerOptions
* @property {IPDFLinkService} linkService - The navigation/linking service.
* @property {EventBus} eventBus - The application event bus.
- * @property {boolean} updateMatchesCountOnProgress - True if the matches
+ * @property {boolean} [updateMatchesCountOnProgress] - True if the matches
* count must be updated on progress or only when the last page is reached.
* The default value is `true`.
*/
@@ -658,7 +663,7 @@ class PDFFindController {
#convertToRegExpString(query, hasDiacritics) {
const { matchDiacritics } = this._state;
let isUnicode = false;
- query = query.replace(
+ query = query.replaceAll(
SPECIAL_CHARS_REG_EXP,
(
match,
diff --git a/app/src/asset/pdf/pdf_link_service.js b/app/src/asset/pdf/pdf_link_service.js
index de8172e6b..f98d3708c 100644
--- a/app/src/asset/pdf/pdf_link_service.js
+++ b/app/src/asset/pdf/pdf_link_service.js
@@ -336,7 +336,7 @@ class PDFLinkService {
* @returns {string} The hyperlink to the PDF object.
*/
getAnchorUrl(anchor) {
- return (this.baseUrl || "") + anchor;
+ return this.baseUrl ? this.baseUrl + anchor : anchor;
}
/**
@@ -352,7 +352,7 @@ class PDFLinkService {
if (params.has("search")) {
this.eventBus.dispatch("findfromurlhash", {
source: this,
- query: params.get("search").replace(/"/g, ""),
+ query: params.get("search").replaceAll('"', ""),
phraseSearch: params.get("phrase") === "true",
});
}
diff --git a/app/src/asset/pdf/pdf_page_view.js b/app/src/asset/pdf/pdf_page_view.js
index 5449c40e0..31f2b18f9 100644
--- a/app/src/asset/pdf/pdf_page_view.js
+++ b/app/src/asset/pdf/pdf_page_view.js
@@ -606,14 +606,13 @@ class PDFPageView {
isScalingRestricted = true;
}
}
- const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;
+ const onlyCssZoom =
+ this.useOnlyCssZoom || (this.hasRestrictedScaling && isScalingRestricted);
+ const postponeDrawing =
+ !onlyCssZoom && drawingDelay >= 0 && drawingDelay < 1000;
if (this.canvas) {
- if (
- postponeDrawing ||
- this.useOnlyCssZoom ||
- (this.hasRestrictedScaling && isScalingRestricted)
- ) {
+ if (postponeDrawing || onlyCssZoom) {
if (
postponeDrawing &&
this.renderingState !== RenderingStates.FINISHED
@@ -758,10 +757,7 @@ class PDFPageView {
scaleX = height / width;
scaleY = width / height;
}
-
- if (absRotation !== 0) {
- target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;
- }
+ target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;
}
if (redrawAnnotationLayer && this.annotationLayer) {
@@ -1001,8 +997,14 @@ class PDFPageView {
// is complete when `!this.renderingQueue`, to prevent black flickering.
canvas.hidden = true;
let isCanvasHidden = true;
- const showCanvas = function () {
- if (isCanvasHidden) {
+ const hasHCM = !!(
+ this.pageColors?.background && this.pageColors?.foreground
+ );
+ const showCanvas = function (isLastShow) {
+ // In HCM, a final filter is applied on the canvas which means that
+ // before it's applied we've normal colors. Consequently, to avoid to have
+ // a final flash we just display it once all the drawing is done.
+ if (isCanvasHidden && (!hasHCM || isLastShow)) {
canvas.hidden = false;
isCanvasHidden = false;
}
@@ -1063,7 +1065,7 @@ class PDFPageView {
};
const renderTask = this.pdfPage.render(renderContext);
renderTask.onContinue = function (cont) {
- showCanvas();
+ showCanvas(false);
if (result.onRenderContinue) {
result.onRenderContinue(cont);
} else {
@@ -1073,7 +1075,7 @@ class PDFPageView {
renderTask.promise.then(
function () {
- showCanvas();
+ showCanvas(true);
renderCapability.resolve();
},
function (error) {
@@ -1081,7 +1083,7 @@ class PDFPageView {
// a black canvas if rendering was cancelled before the `onContinue`-
// callback had been invoked at least once.
if (!(error instanceof RenderingCancelledException)) {
- showCanvas();
+ showCanvas(true);
}
renderCapability.reject(error);
}
diff --git a/app/src/asset/pdf/pdf_sidebar_resizer.js b/app/src/asset/pdf/pdf_sidebar_resizer.js
index 4f634fb3a..e6675ff83 100644
--- a/app/src/asset/pdf/pdf_sidebar_resizer.js
+++ b/app/src/asset/pdf/pdf_sidebar_resizer.js
@@ -64,8 +64,7 @@ class PDFSidebarResizer {
_updateWidth(width = 0) {
// Prevent the sidebar from becoming too narrow, or from occupying more
// than half of the available viewer width.
- // NOTE
- const maxWidth = Math.floor(this.outerContainerWidth / 3 * 2);
+ const maxWidth = Math.floor(this.outerContainerWidth / 2);
if (width > maxWidth) {
width = maxWidth;
}
diff --git a/app/src/asset/pdf/pdf_viewer.js b/app/src/asset/pdf/pdf_viewer.js
index 6c248accc..4bcbbc938 100644
--- a/app/src/asset/pdf/pdf_viewer.js
+++ b/app/src/asset/pdf/pdf_viewer.js
@@ -455,7 +455,7 @@ class PDFViewer {
if (!this.pdfDocument) {
return;
}
- this._setScale(val, { noScroll: false });
+ this.#setScale(val, { noScroll: false });
}
/**
@@ -472,7 +472,7 @@ class PDFViewer {
if (!this.pdfDocument) {
return;
}
- this._setScale(val, { noScroll: false });
+ this.#setScale(val, { noScroll: false });
}
/**
@@ -509,7 +509,7 @@ class PDFViewer {
// Prevent errors in case the rotation changes *before* the scale has been
// set to a non-default value.
if (this._currentScaleValue) {
- this._setScale(this._currentScaleValue, { noScroll: true });
+ this.#setScale(this._currentScaleValue, { noScroll: true });
}
this.eventBus.dispatch("rotationchanging", {
@@ -1079,7 +1079,7 @@ class PDFViewer {
);
}
- _setScaleUpdatePages(
+ #setScaleUpdatePages(
newScale,
newValue,
{ noScroll = false, preset = false, drawingDelay = -1 }
@@ -1151,10 +1151,7 @@ class PDFViewer {
}
}
- /**
- * @private
- */
- get _pageWidthScaleFactor() {
+ get #pageWidthScaleFactor() {
if (
this._spreadMode !== SpreadMode.NONE &&
this._scrollMode !== ScrollMode.HORIZONTAL
@@ -1164,12 +1161,12 @@ class PDFViewer {
return 1;
}
- _setScale(value, options) {
+ #setScale(value, options) {
let scale = parseFloat(value);
if (scale > 0) {
options.preset = false;
- this._setScaleUpdatePages(scale, value, options);
+ this.#setScaleUpdatePages(scale, value, options);
} else {
const currentPage = this._pages[this._currentPageNumber - 1];
if (!currentPage) {
@@ -1198,7 +1195,7 @@ class PDFViewer {
const pageWidthScale =
(((this.container.clientWidth - hPadding) / currentPage.width) *
currentPage.scale) /
- this._pageWidthScaleFactor;
+ this.#pageWidthScaleFactor;
const pageHeightScale =
((this.container.clientHeight - vPadding) / currentPage.height) *
currentPage.scale;
@@ -1224,11 +1221,11 @@ class PDFViewer {
scale = Math.min(MAX_AUTO_SCALE, horizontalScale);
break;
default:
- console.error(`_setScale: "${value}" is an unknown zoom value.`);
+ console.error(`#setScale: "${value}" is an unknown zoom value.`);
return;
}
options.preset = true;
- this._setScaleUpdatePages(scale, value, options);
+ this.#setScaleUpdatePages(scale, value, options);
}
}
@@ -1240,7 +1237,7 @@ class PDFViewer {
if (this.isInPresentationMode) {
// Fixes the case when PDF has different page sizes.
- this._setScale(this._currentScaleValue, { noScroll: true });
+ this.#setScale(this._currentScaleValue, { noScroll: true });
}
this.#scrollIntoView(pageView);
}
@@ -1795,7 +1792,7 @@ class PDFViewer {
// Call this before re-scrolling to the current page, to ensure that any
// changes in scale don't move the current page.
if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
- this._setScale(this._currentScaleValue, { noScroll: true });
+ this.#setScale(this._currentScaleValue, { noScroll: true });
}
this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);
this.update();
@@ -1867,7 +1864,7 @@ class PDFViewer {
// Call this before re-scrolling to the current page, to ensure that any
// changes in scale don't move the current page.
if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
- this._setScale(this._currentScaleValue, { noScroll: true });
+ this.#setScale(this._currentScaleValue, { noScroll: true });
}
this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);
this.update();
@@ -1972,7 +1969,7 @@ class PDFViewer {
/**
* Go to the next page, taking scroll/spread-modes into account.
- * @returns {boolean} Whether navigation occured.
+ * @returns {boolean} Whether navigation occurred.
*/
nextPage() {
const currentPageNumber = this._currentPageNumber,
@@ -1990,7 +1987,7 @@ class PDFViewer {
/**
* Go to the previous page, taking scroll/spread-modes into account.
- * @returns {boolean} Whether navigation occured.
+ * @returns {boolean} Whether navigation occurred.
*/
previousPage() {
const currentPageNumber = this._currentPageNumber;
@@ -2006,83 +2003,58 @@ class PDFViewer {
}
/**
- * Increase the current zoom level one, or more, times.
- * @param {Object|null} [options]
+ * @typedef {Object} ChangeScaleOptions
+ * @property {number} [drawingDelay]
+ * @property {number} [scaleFactor]
+ * @property {number} [steps]
*/
- increaseScale(options = null) {
- if (
- (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) &&
- typeof options === "number"
- ) {
- console.error(
- "The `increaseScale` method-signature was updated, please use an object instead."
- );
- options = { steps: options };
- }
+ /**
+ * Increase the current zoom level one, or more, times.
+ * @param {ChangeScaleOptions} [options]
+ */
+ increaseScale({ drawingDelay, scaleFactor, steps } = {}) {
if (!this.pdfDocument) {
return;
}
-
- options ||= Object.create(null);
-
let newScale = this._currentScale;
- if (options.scaleFactor > 1) {
- newScale = Math.min(
- MAX_SCALE,
- Math.round(newScale * options.scaleFactor * 100) / 100
- );
+ if (scaleFactor > 1) {
+ newScale = Math.round(newScale * scaleFactor * 100) / 100;
} else {
- let steps = options.steps ?? 1;
+ steps ??= 1;
do {
- newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);
- newScale = Math.ceil(newScale * 10) / 10;
- newScale = Math.min(MAX_SCALE, newScale);
+ newScale =
+ Math.ceil((newScale * DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;
} while (--steps > 0 && newScale < MAX_SCALE);
}
-
- options.noScroll = false;
- this._setScale(newScale, options);
+ this.#setScale(Math.min(MAX_SCALE, newScale), {
+ noScroll: false,
+ drawingDelay,
+ });
}
/**
* Decrease the current zoom level one, or more, times.
- * @param {Object|null} [options]
+ * @param {ChangeScaleOptions} [options]
*/
- decreaseScale(options = null) {
- if (
- (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) &&
- typeof options === "number"
- ) {
- console.error(
- "The `decreaseScale` method-signature was updated, please use an object instead."
- );
- options = { steps: options };
- }
-
+ decreaseScale({ drawingDelay, scaleFactor, steps } = {}) {
if (!this.pdfDocument) {
return;
}
-
- options ||= Object.create(null);
-
let newScale = this._currentScale;
- if (options.scaleFactor > 0 && options.scaleFactor < 1) {
- newScale = Math.max(
- MIN_SCALE,
- Math.round(newScale * options.scaleFactor * 100) / 100
- );
+ if (scaleFactor > 0 && scaleFactor < 1) {
+ newScale = Math.round(newScale * scaleFactor * 100) / 100;
} else {
- let steps = options.steps ?? 1;
+ steps ??= 1;
do {
- newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);
- newScale = Math.floor(newScale * 10) / 10;
- newScale = Math.max(MIN_SCALE, newScale);
+ newScale =
+ Math.floor((newScale / DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;
} while (--steps > 0 && newScale > MIN_SCALE);
}
-
- options.noScroll = false;
- this._setScale(newScale, options);
+ this.#setScale(Math.max(MIN_SCALE, newScale), {
+ noScroll: false,
+ drawingDelay,
+ });
}
#updateContainerHeightCss(height = this.container.clientHeight) {
diff --git a/app/src/asset/pdf/pdfjs.js b/app/src/asset/pdf/pdfjs.js
index 636b9b2a9..f20f56253 100644
--- a/app/src/asset/pdf/pdfjs.js
+++ b/app/src/asset/pdf/pdfjs.js
@@ -18,5 +18,5 @@
const {addScriptSync} = require('../../protyle/util/addScript')
const {Constants} = require('../../constants')
-addScriptSync(`${Constants.PROTYLE_CDN}/js/pdf/pdf.js?v=3.4.120`, 'pdfjsScript')
+addScriptSync(`${Constants.PROTYLE_CDN}/js/pdf/pdf.js?v=3.5.141`, 'pdfjsScript')
module.exports = window["pdfjs-dist/build/pdf"];
diff --git a/app/src/asset/pdf/secondary_toolbar.js b/app/src/asset/pdf/secondary_toolbar.js
index 332952035..68b0ab4de 100644
--- a/app/src/asset/pdf/secondary_toolbar.js
+++ b/app/src/asset/pdf/secondary_toolbar.js
@@ -59,9 +59,8 @@ class SecondaryToolbar {
eventName: "presentationmode",
close: true,
},
- // NOTE
- // { element: options.printButton, eventName: "print", close: true },
- // { element: options.downloadButton, eventName: "download", close: true },
+ { element: options.printButton, eventName: "print", close: true },
+ { element: options.downloadButton, eventName: "download", close: true },
{ element: options.viewBookmarkButton, eventName: null, close: true },
{ element: options.firstPageButton, eventName: "firstpage", close: true },
{ element: options.lastPageButton, eventName: "lastpage", close: true },
@@ -205,11 +204,7 @@ class SecondaryToolbar {
for (const { element, eventName, close, eventDetails } of this.buttons) {
element.addEventListener("click", evt => {
if (eventName !== null) {
- const details = { source: this };
- for (const property in eventDetails) {
- details[property] = eventDetails[property];
- }
- this.eventBus.dispatch(eventName, details);
+ this.eventBus.dispatch(eventName, { source: this, ...eventDetails });
}
if (close) {
this.close();
diff --git a/app/src/asset/pdf/toolbar.js b/app/src/asset/pdf/toolbar.js
index 1e26185ce..2e112552c 100644
--- a/app/src/asset/pdf/toolbar.js
+++ b/app/src/asset/pdf/toolbar.js
@@ -63,38 +63,36 @@ class Toolbar {
{ element: options.next, eventName: "nextpage" },
{ element: options.zoomIn, eventName: "zoomin" },
{ element: options.zoomOut, eventName: "zoomout" },
- // NOTE
- // { element: options.print, eventName: "print" },
- // { element: options.download, eventName: "download" },
- // {
- // element: options.editorFreeTextButton,
- // eventName: "switchannotationeditormode",
- // eventDetails: {
- // get mode() {
- // const { classList } = options.editorFreeTextButton;
- // return classList.contains("toggled")
- // ? AnnotationEditorType.NONE
- // : AnnotationEditorType.FREETEXT;
- // },
- // },
- // },
- // {
- // element: options.editorInkButton,
- // eventName: "switchannotationeditormode",
- // eventDetails: {
- // get mode() {
- // const { classList } = options.editorInkButton;
- // return classList.contains("toggled")
- // ? AnnotationEditorType.NONE
- // : AnnotationEditorType.INK;
- // },
- // },
- // },
+ { element: options.print, eventName: "print" },
+ { element: options.download, eventName: "download" },
+ {
+ element: options.editorFreeTextButton,
+ eventName: "switchannotationeditormode",
+ eventDetails: {
+ get mode() {
+ const { classList } = options.editorFreeTextButton;
+ return classList.contains("toggled")
+ ? AnnotationEditorType.NONE
+ : AnnotationEditorType.FREETEXT;
+ },
+ },
+ },
+ {
+ element: options.editorInkButton,
+ eventName: "switchannotationeditormode",
+ eventDetails: {
+ get mode() {
+ const { classList } = options.editorInkButton;
+ return classList.contains("toggled")
+ ? AnnotationEditorType.NONE
+ : AnnotationEditorType.INK;
+ },
+ },
+ },
];
- // NOTE
- // if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
- // this.buttons.push({ element: options.openFile, eventName: "openfile" });
- // }
+ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
+ this.buttons.push({ element: options.openFile, eventName: "openfile" });
+ }
this.items = {
numPages: options.numPages,
pageNumber: options.pageNumber,
@@ -152,13 +150,7 @@ class Toolbar {
for (const { element, eventName, eventDetails } of this.buttons) {
element.addEventListener("click", evt => {
if (eventName !== null) {
- const details = { source: this };
- if (eventDetails) {
- for (const property in eventDetails) {
- details[property] = eventDetails[property];
- }
- }
- this.eventBus.dispatch(eventName, details);
+ this.eventBus.dispatch(eventName, { source: this, ...eventDetails });
}
});
}
diff --git a/app/src/asset/pdf/ui_utils.js b/app/src/asset/pdf/ui_utils.js
index 67e4ec83b..d2c18e7f8 100644
--- a/app/src/asset/pdf/ui_utils.js
+++ b/app/src/asset/pdf/ui_utils.js
@@ -211,7 +211,6 @@ function parseQueryString(query) {
return params;
}
-const NullCharactersRegExp = /\x00/g;
const InvisibleCharactersRegExp = /[\x01-\x1F]/g;
/**
@@ -224,9 +223,9 @@ function removeNullCharacters(str, replaceInvisible = false) {
return str;
}
if (replaceInvisible) {
- str = str.replace(InvisibleCharactersRegExp, " ");
+ str = str.replaceAll(InvisibleCharactersRegExp, " ");
}
- return str.replace(NullCharactersRegExp, "");
+ return str.replaceAll("\x00", "");
}
/**
@@ -706,7 +705,6 @@ class ProgressBar {
#visible = true;
- // NOTE
constructor(bar) {
this.#classList = bar.classList;
this.#style = bar.style;
diff --git a/app/src/asset/pdf/viewer.js b/app/src/asset/pdf/viewer.js
index 247db0143..521c4ffe6 100644
--- a/app/src/asset/pdf/viewer.js
+++ b/app/src/asset/pdf/viewer.js
@@ -14,7 +14,6 @@
*/
import { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js";
-import { AppOptions } from "./app_options.js";
import { LinkTarget } from "./pdf_link_service.js";
import { PDFViewerApplication } from "./app.js";
import { initAnno } from "../anno";
@@ -169,7 +168,7 @@ function getViewerConfiguration(element) {
? element.querySelector("#fileInput")
: null,
debuggerScriptPath: "./debugger.js",
- }
+ };
}
// NOTE
diff --git a/app/stage/protyle/js/pdf/pdf.js b/app/stage/protyle/js/pdf/pdf.js
index 212325e07..19fba37e9 100644
--- a/app/stage/protyle/js/pdf/pdf.js
+++ b/app/stage/protyle/js/pdf/pdf.js
@@ -42,7 +42,7 @@ return /******/ (() => { // webpackBootstrap
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
+exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
exports.assert = assert;
exports.bytesToString = bytesToString;
exports.createPromiseCapability = createPromiseCapability;
@@ -68,6 +68,8 @@ const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
+const MAX_IMAGE_SIZE_TO_CACHE = 10e6;
+exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE;
const LINE_FACTOR = 1.35;
exports.LINE_FACTOR = LINE_FACTOR;
const LINE_DESCENT_FACTOR = 0.35;
@@ -367,29 +369,6 @@ const OPS = {
constructPath: 91
};
exports.OPS = OPS;
-const UNSUPPORTED_FEATURES = {
- forms: "forms",
- javaScript: "javaScript",
- signatures: "signatures",
- smask: "smask",
- shadingPattern: "shadingPattern",
- errorTilingPattern: "errorTilingPattern",
- errorExtGState: "errorExtGState",
- errorXObject: "errorXObject",
- errorFontLoadType3: "errorFontLoadType3",
- errorFontState: "errorFontState",
- errorFontMissing: "errorFontMissing",
- errorFontTranslate: "errorFontTranslate",
- errorColorSpace: "errorColorSpace",
- errorOperatorList: "errorOperatorList",
- errorFontToUnicode: "errorFontToUnicode",
- errorFontLoadNative: "errorFontLoadNative",
- errorFontBuildPath: "errorFontBuildPath",
- errorFontGetPath: "errorFontGetPath",
- errorMarkedContent: "errorMarkedContent",
- errorContentSubStream: "errorContentSubStream"
-};
-exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
const PasswordResponses = {
NEED_PASSWORD: 1,
INCORRECT_PASSWORD: 2
@@ -859,7 +838,7 @@ function createPromiseCapability() {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.build = exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;
+exports.build = exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultFilterFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;
exports.getDocument = getDocument;
exports.version = void 0;
var _util = __w_pdfjs_require__(1);
@@ -876,20 +855,25 @@ var _transport_stream = __w_pdfjs_require__(18);
var _xfa_text = __w_pdfjs_require__(19);
const DEFAULT_RANGE_CHUNK_SIZE = 65536;
const RENDERING_CANCELLED_TIMEOUT = 100;
+const DELAYED_CLEANUP_TIMEOUT = 5000;
let DefaultCanvasFactory = _display_utils.DOMCanvasFactory;
exports.DefaultCanvasFactory = DefaultCanvasFactory;
let DefaultCMapReaderFactory = _display_utils.DOMCMapReaderFactory;
exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;
+let DefaultFilterFactory = _display_utils.DOMFilterFactory;
+exports.DefaultFilterFactory = DefaultFilterFactory;
let DefaultStandardFontDataFactory = _display_utils.DOMStandardFontDataFactory;
exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;
if (_is_node.isNodeJS) {
const {
NodeCanvasFactory,
NodeCMapReaderFactory,
+ NodeFilterFactory,
NodeStandardFontDataFactory
} = __w_pdfjs_require__(20);
exports.DefaultCanvasFactory = DefaultCanvasFactory = NodeCanvasFactory;
exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory = NodeCMapReaderFactory;
+ exports.DefaultFilterFactory = DefaultFilterFactory = NodeFilterFactory;
exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory = NodeStandardFontDataFactory;
}
let createPDFNetworkStream;
@@ -922,20 +906,17 @@ function getDocument(src) {
src = {
data: src
};
- } else if (src instanceof PDFDataRangeTransport) {
- (0, _display_utils.deprecated)("`PDFDataRangeTransport`-instance, " + "please use a parameter object with `range`-property instead.");
- src = {
- range: src
- };
- } else {
- if (typeof src !== "object") {
- throw new Error("Invalid parameter in getDocument, " + "need either string, URL, TypedArray, or parameter object.");
- }
+ }
+ if (typeof src !== "object") {
+ throw new Error("Invalid parameter in getDocument, need parameter object.");
}
if (!src.url && !src.data && !src.range) {
throw new Error("Invalid parameter object: need either .data, .range or .url");
}
const task = new PDFDocumentLoadingTask();
+ const {
+ docId
+ } = task;
const url = src.url ? getUrlProp(src.url) : null;
const data = src.data ? getDataProp(src.data) : null;
const httpHeaders = src.httpHeaders || null;
@@ -955,6 +936,7 @@ function getDocument(src) {
const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;
const isEvalSupported = src.isEvalSupported !== false;
const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_is_node.isNodeJS;
+ const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;
const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _is_node.isNodeJS;
const fontExtraProperties = src.fontExtraProperties === true;
const enableXfa = src.enableXfa === true;
@@ -966,17 +948,28 @@ function getDocument(src) {
const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;
const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_is_node.isNodeJS && !disableFontFace;
const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory && (0, _display_utils.isValidFetchUrl)(cMapUrl, document.baseURI) && (0, _display_utils.isValidFetchUrl)(standardFontDataUrl, document.baseURI);
+ const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({
+ ownerDocument
+ });
+ const filterFactory = src.filterFactory || new DefaultFilterFactory({
+ docId,
+ ownerDocument
+ });
const styleElement = null;
(0, _util.setVerbosityLevel)(verbosity);
- const transportFactory = useWorkerFetch ? null : {
- cMapReaderFactory: new CMapReaderFactory({
+ const transportFactory = {
+ canvasFactory,
+ filterFactory
+ };
+ if (!useWorkerFetch) {
+ transportFactory.cMapReaderFactory = new CMapReaderFactory({
baseUrl: cMapUrl,
isCompressed: cMapPacked
- }),
- standardFontDataFactory: new StandardFontDataFactory({
+ });
+ transportFactory.standardFontDataFactory = new StandardFontDataFactory({
baseUrl: standardFontDataUrl
- })
- };
+ });
+ }
if (!worker) {
const workerParams = {
verbosity,
@@ -985,10 +978,9 @@ function getDocument(src) {
worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
task._worker = worker;
}
- const docId = task.docId;
const fetchDocParams = {
docId,
- apiVersion: '3.4.120',
+ apiVersion: '3.5.141',
data,
password,
disableAutoFetch,
@@ -1002,6 +994,7 @@ function getDocument(src) {
ignoreErrors,
isEvalSupported,
isOffscreenCanvasSupported,
+ canvasMaxAreaInBytes,
fontExtraProperties,
useSystemFonts,
cMapUrl: useWorkerFetch ? cMapUrl : null,
@@ -1101,7 +1094,6 @@ function getDataProp(val) {
}
class PDFDocumentLoadingTask {
static #docId = 0;
- #onUnsupportedFeature = null;
constructor() {
this._capability = (0, _util.createPromiseCapability)();
this._transport = null;
@@ -1111,13 +1103,6 @@ class PDFDocumentLoadingTask {
this.onPassword = null;
this.onProgress = null;
}
- get onUnsupportedFeature() {
- return this.#onUnsupportedFeature;
- }
- set onUnsupportedFeature(callback) {
- (0, _display_utils.deprecated)("The PDFDocumentLoadingTask onUnsupportedFeature property will be removed in the future.");
- this.#onUnsupportedFeature = callback;
- }
get promise() {
return this._capability.promise;
}
@@ -1199,6 +1184,9 @@ class PDFDocumentProxy {
get annotationStorage() {
return this._transport.annotationStorage;
}
+ get filterFactory() {
+ return this._transport.filterFactory;
+ }
get numPages() {
return this._pdfInfo.numPages;
}
@@ -1295,17 +1283,17 @@ class PDFDocumentProxy {
}
exports.PDFDocumentProxy = PDFDocumentProxy;
class PDFPageProxy {
- constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) {
+ #delayedCleanupTimeout = null;
+ #pendingCleanup = false;
+ constructor(pageIndex, pageInfo, transport, pdfBug = false) {
this._pageIndex = pageIndex;
this._pageInfo = pageInfo;
- this._ownerDocument = ownerDocument;
this._transport = transport;
this._stats = pdfBug ? new _display_utils.StatTimer() : null;
this._pdfBug = pdfBug;
this.commonObjs = transport.commonObjs;
this.objs = new PDFObjects();
- this.cleanupAfterRender = false;
- this.pendingCleanup = false;
+ this._maybeCleanupAfterRender = false;
this._intentStates = new Map();
this.destroyed = false;
}
@@ -1361,16 +1349,19 @@ class PDFPageProxy {
intent = "display",
annotationMode = _util.AnnotationMode.ENABLE,
transform = null,
- canvasFactory = null,
background = null,
optionalContentConfigPromise = null,
annotationCanvasMap = null,
pageColors = null,
printAnnotationStorage = null
}) {
+ if (arguments[0]?.canvasFactory) {
+ throw new Error("render no longer accepts the `canvasFactory`-option, " + "please pass it to the `getDocument`-function instead.");
+ }
this._stats?.time("Overall");
const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage);
- this.pendingCleanup = false;
+ this.#pendingCleanup = false;
+ this.#abortDelayedCleanup();
if (!optionalContentConfigPromise) {
optionalContentConfigPromise = this._transport.getOptionalContentConfig();
}
@@ -1383,9 +1374,6 @@ class PDFPageProxy {
clearTimeout(intentState.streamReaderCancelTimeout);
intentState.streamReaderCancelTimeout = null;
}
- const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({
- ownerDocument: this._ownerDocument
- });
const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);
if (!intentState.displayReadyCapability) {
intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
@@ -1400,10 +1388,10 @@ class PDFPageProxy {
}
const complete = error => {
intentState.renderTasks.delete(internalRenderTask);
- if (this.cleanupAfterRender || intentPrint) {
- this.pendingCleanup = true;
+ if (this._maybeCleanupAfterRender || intentPrint) {
+ this.#pendingCleanup = true;
}
- this._tryCleanup();
+ this.#tryCleanup(!intentPrint);
if (error) {
internalRenderTask.capability.reject(error);
this._abortOperatorList({
@@ -1429,7 +1417,8 @@ class PDFPageProxy {
annotationCanvasMap,
operatorList: intentState.operatorList,
pageIndex: this._pageIndex,
- canvasFactory: canvasFactoryInstance,
+ canvasFactory: this._transport.canvasFactory,
+ filterFactory: this._transport.filterFactory,
useRequestAnimationFrame: !intentPrint,
pdfBug: this._pdfBug,
pageColors
@@ -1437,7 +1426,7 @@ class PDFPageProxy {
(intentState.renderTasks ||= new Set()).add(internalRenderTask);
const renderTask = internalRenderTask.task;
Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {
- if (this.pendingCleanup) {
+ if (this.#pendingCleanup) {
complete();
return;
}
@@ -1485,13 +1474,11 @@ class PDFPageProxy {
return intentState.opListReadCapability.promise;
}
streamTextContent({
- disableCombineTextItems = false,
includeMarkedContent = false
} = {}) {
const TEXT_CONTENT_CHUNK_SIZE = 100;
return this._transport.messageHandler.sendWithStream("GetTextContent", {
pageIndex: this._pageIndex,
- combineTextItems: disableCombineTextItems !== true,
includeMarkedContent: includeMarkedContent === true
}, {
highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
@@ -1551,15 +1538,28 @@ class PDFPageProxy {
}
}
this.objs.clear();
- this.pendingCleanup = false;
+ this.#pendingCleanup = false;
+ this.#abortDelayedCleanup();
return Promise.all(waitOn);
}
cleanup(resetStats = false) {
- this.pendingCleanup = true;
- return this._tryCleanup(resetStats);
+ this.#pendingCleanup = true;
+ const success = this.#tryCleanup(false);
+ if (resetStats && success) {
+ this._stats &&= new _display_utils.StatTimer();
+ }
+ return success;
}
- _tryCleanup(resetStats = false) {
- if (!this.pendingCleanup) {
+ #tryCleanup(delayed = false) {
+ this.#abortDelayedCleanup();
+ if (!this.#pendingCleanup) {
+ return false;
+ }
+ if (delayed) {
+ this.#delayedCleanupTimeout = setTimeout(() => {
+ this.#delayedCleanupTimeout = null;
+ this.#tryCleanup(false);
+ }, DELAYED_CLEANUP_TIMEOUT);
return false;
}
for (const {
@@ -1572,12 +1572,15 @@ class PDFPageProxy {
}
this._intentStates.clear();
this.objs.clear();
- if (resetStats && this._stats) {
- this._stats = new _display_utils.StatTimer();
- }
- this.pendingCleanup = false;
+ this.#pendingCleanup = false;
return true;
}
+ #abortDelayedCleanup() {
+ if (this.#delayedCleanupTimeout) {
+ clearTimeout(this.#delayedCleanupTimeout);
+ this.#delayedCleanupTimeout = null;
+ }
+ }
_startRenderPage(transparency, cacheKey) {
const intentState = this._intentStates.get(cacheKey);
if (!intentState) {
@@ -1597,7 +1600,7 @@ class PDFPageProxy {
internalRenderTask.operatorListChanged();
}
if (operatorListChunk.lastChunk) {
- this._tryCleanup();
+ this.#tryCleanup(true);
}
}
_pumpOperatorList({
@@ -1638,7 +1641,7 @@ class PDFPageProxy {
for (const internalRenderTask of intentState.renderTasks) {
internalRenderTask.operatorListChanged();
}
- this._tryCleanup();
+ this.#tryCleanup(true);
}
if (intentState.displayReadyCapability) {
intentState.displayReadyCapability.reject(reason);
@@ -1704,9 +1707,11 @@ exports.PDFPageProxy = PDFPageProxy;
class LoopbackPort {
#listeners = new Set();
#deferred = Promise.resolve();
- postMessage(obj, transfers) {
+ postMessage(obj, transfer) {
const event = {
- data: structuredClone(obj, transfers)
+ data: structuredClone(obj, transfer ? {
+ transfer
+ } : null)
};
this.#deferred.then(() => {
for (const listener of this.#listeners) {
@@ -1964,13 +1969,14 @@ class WorkerTransport {
this.loadingTask = loadingTask;
this.commonObjs = new PDFObjects();
this.fontLoader = new _font_loader.FontLoader({
- onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
ownerDocument: params.ownerDocument,
styleElement: params.styleElement
});
this._params = params;
- this.cMapReaderFactory = factory?.cMapReaderFactory;
- this.standardFontDataFactory = factory?.standardFontDataFactory;
+ this.canvasFactory = factory.canvasFactory;
+ this.filterFactory = factory.filterFactory;
+ this.cMapReaderFactory = factory.cMapReaderFactory;
+ this.standardFontDataFactory = factory.standardFontDataFactory;
this.destroyed = false;
this.destroyCapability = null;
this._passwordCapability = null;
@@ -2057,6 +2063,7 @@ class WorkerTransport {
this.commonObjs.clear();
this.fontLoader.clear();
this.#methodPromises.clear();
+ this.filterFactory.destroy();
if (this._networkStream) {
this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
}
@@ -2245,20 +2252,12 @@ class WorkerTransport {
this.commonObjs.resolve(id, exportedError);
break;
}
- let fontRegistry = null;
- if (params.pdfBug && globalThis.FontInspector?.enabled) {
- fontRegistry = {
- registerFont(font, url) {
- globalThis.FontInspector.fontAdded(font, url);
- }
- };
- }
+ const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;
const font = new _font_loader.FontFaceObject(exportedData, {
isEvalSupported: params.isEvalSupported,
disableFontFace: params.disableFontFace,
ignoreErrors: params.ignoreErrors,
- onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
- fontRegistry
+ inspectFont
});
this.fontLoader.bind(font).catch(reason => {
return messageHandler.sendWithPromise("FontFallback", {
@@ -2273,6 +2272,7 @@ class WorkerTransport {
break;
case "FontPath":
case "Image":
+ case "Pattern":
this.commonObjs.resolve(id, exportedData);
break;
default:
@@ -2290,7 +2290,6 @@ class WorkerTransport {
switch (type) {
case "Image":
pageProxy.objs.resolve(id, imageData);
- const MAX_IMAGE_SIZE_TO_STORE = 8000000;
if (imageData) {
let length;
if (imageData.bitmap) {
@@ -2302,8 +2301,8 @@ class WorkerTransport {
} else {
length = imageData.data?.length || 0;
}
- if (length > MAX_IMAGE_SIZE_TO_STORE) {
- pageProxy.cleanupAfterRender = true;
+ if (length > _util.MAX_IMAGE_SIZE_TO_CACHE) {
+ pageProxy._maybeCleanupAfterRender = true;
}
}
break;
@@ -2323,7 +2322,6 @@ class WorkerTransport {
total: data.total
});
});
- messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
messageHandler.on("FetchBuiltInCMap", data => {
if (this.destroyed) {
return Promise.reject(new Error("Worker was destroyed."));
@@ -2343,14 +2341,6 @@ class WorkerTransport {
return this.standardFontDataFactory.fetch(data);
});
}
- _onUnsupportedFeature({
- featureId
- }) {
- if (this.destroyed) {
- return;
- }
- this.loadingTask.onUnsupportedFeature?.(featureId);
- }
getData() {
return this.messageHandler.sendWithPromise("GetData", null);
}
@@ -2382,7 +2372,7 @@ class WorkerTransport {
if (this.destroyed) {
throw new Error("Transport destroyed");
}
- const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug);
+ const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
this.#pageCache.set(pageIndex, page);
return page;
});
@@ -2505,6 +2495,7 @@ class WorkerTransport {
this.fontLoader.clear();
}
this.#methodPromises.clear();
+ this.filterFactory.destroy(true);
}
get loadingParams() {
const {
@@ -2597,6 +2588,7 @@ class InternalRenderTask {
operatorList,
pageIndex,
canvasFactory,
+ filterFactory,
useRequestAnimationFrame = false,
pdfBug = false,
pageColors = null
@@ -2610,6 +2602,7 @@ class InternalRenderTask {
this.operatorList = operatorList;
this._pageIndex = pageIndex;
this.canvasFactory = canvasFactory;
+ this.filterFactory = filterFactory;
this._pdfBug = pdfBug;
this.pageColors = pageColors;
this.running = false;
@@ -2652,9 +2645,9 @@ class InternalRenderTask {
transform,
background
} = this.params;
- this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, {
+ this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig
- }, this.annotationCanvasMap, this.pageColors);
+ }, this.annotationCanvasMap);
this.gfx.beginDrawing({
transform,
viewport,
@@ -2668,7 +2661,7 @@ class InternalRenderTask {
cancel(error = null, extraDelay = 0) {
this.running = false;
this.cancelled = true;
- this.gfx?.endDrawing();
+ this.gfx?.endDrawing(this.pageColors);
if (this._canvas) {
InternalRenderTask.#canvasInUse.delete(this._canvas);
}
@@ -2715,7 +2708,7 @@ class InternalRenderTask {
if (this.operatorListIdx === this.operatorList.argsArray.length) {
this.running = false;
if (this.operatorList.lastChunk) {
- this.gfx.endDrawing();
+ this.gfx.endDrawing(this.pageColors);
if (this._canvas) {
InternalRenderTask.#canvasInUse.delete(this._canvas);
}
@@ -2724,9 +2717,9 @@ class InternalRenderTask {
}
}
}
-const version = '3.4.120';
+const version = '3.5.141';
exports.version = version;
-const build = 'af6414988';
+const build = 'be0f6ee08';
exports.build = build;
/***/ }),
@@ -3885,7 +3878,7 @@ exports.AnnotationEditorUIManager = AnnotationEditorUIManager;
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = exports.AnnotationPrefix = void 0;
+exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMFilterFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = exports.AnnotationPrefix = void 0;
exports.deprecated = deprecated;
exports.getColorValues = getColorValues;
exports.getCurrentTransform = getCurrentTransform;
@@ -3910,6 +3903,181 @@ class PixelsPerInch {
static PDF_TO_CSS_UNITS = this.CSS / this.PDF;
}
exports.PixelsPerInch = PixelsPerInch;
+class DOMFilterFactory extends _base_factory.BaseFilterFactory {
+ #_cache;
+ #_defs;
+ #docId;
+ #document;
+ #hcmFilter;
+ #hcmKey;
+ #hcmUrl;
+ #id = 0;
+ constructor({
+ docId,
+ ownerDocument = globalThis.document
+ } = {}) {
+ super();
+ this.#docId = docId;
+ this.#document = ownerDocument;
+ }
+ get #cache() {
+ return this.#_cache ||= new Map();
+ }
+ get #defs() {
+ if (!this.#_defs) {
+ const div = this.#document.createElement("div");
+ const {
+ style
+ } = div;
+ style.visibility = "hidden";
+ style.contain = "strict";
+ style.width = style.height = 0;
+ style.position = "absolute";
+ style.top = style.left = 0;
+ style.zIndex = -1;
+ const svg = this.#document.createElementNS(SVG_NS, "svg");
+ svg.setAttribute("width", 0);
+ svg.setAttribute("height", 0);
+ this.#_defs = this.#document.createElementNS(SVG_NS, "defs");
+ div.append(svg);
+ svg.append(this.#_defs);
+ this.#document.body.append(div);
+ }
+ return this.#_defs;
+ }
+ #appendFeFunc(feComponentTransfer, func, table) {
+ const feFunc = this.#document.createElementNS(SVG_NS, func);
+ feFunc.setAttribute("type", "discrete");
+ feFunc.setAttribute("tableValues", table);
+ feComponentTransfer.append(feFunc);
+ }
+ addFilter(maps) {
+ if (!maps) {
+ return "none";
+ }
+ let value = this.#cache.get(maps);
+ if (value) {
+ return value;
+ }
+ let tableR, tableG, tableB, key;
+ if (maps.length === 1) {
+ const mapR = maps[0];
+ const buffer = new Array(256);
+ for (let i = 0; i < 256; i++) {
+ buffer[i] = mapR[i] / 255;
+ }
+ key = tableR = tableG = tableB = buffer.join(",");
+ } else {
+ const [mapR, mapG, mapB] = maps;
+ const bufferR = new Array(256);
+ const bufferG = new Array(256);
+ const bufferB = new Array(256);
+ for (let i = 0; i < 256; i++) {
+ bufferR[i] = mapR[i] / 255;
+ bufferG[i] = mapG[i] / 255;
+ bufferB[i] = mapB[i] / 255;
+ }
+ tableR = bufferR.join(",");
+ tableG = bufferG.join(",");
+ tableB = bufferB.join(",");
+ key = `${tableR}${tableG}${tableB}`;
+ }
+ value = this.#cache.get(key);
+ if (value) {
+ this.#cache.set(maps, value);
+ return value;
+ }
+ const id = `g_${this.#docId}_transfer_map_${this.#id++}`;
+ const url = `url(#${id})`;
+ this.#cache.set(maps, url);
+ this.#cache.set(key, url);
+ const filter = this.#document.createElementNS(SVG_NS, "filter", SVG_NS);
+ filter.setAttribute("id", id);
+ filter.setAttribute("color-interpolation-filters", "sRGB");
+ const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer");
+ filter.append(feComponentTransfer);
+ this.#appendFeFunc(feComponentTransfer, "feFuncR", tableR);
+ this.#appendFeFunc(feComponentTransfer, "feFuncG", tableG);
+ this.#appendFeFunc(feComponentTransfer, "feFuncB", tableB);
+ this.#defs.append(filter);
+ return url;
+ }
+ addHCMFilter(fgColor, bgColor) {
+ const key = `${fgColor}-${bgColor}`;
+ if (this.#hcmKey === key) {
+ return this.#hcmUrl;
+ }
+ this.#hcmKey = key;
+ this.#hcmUrl = "none";
+ this.#hcmFilter?.remove();
+ if (!fgColor || !bgColor) {
+ return this.#hcmUrl;
+ }
+ this.#defs.style.color = fgColor;
+ fgColor = getComputedStyle(this.#defs).getPropertyValue("color");
+ const fgRGB = getRGB(fgColor);
+ fgColor = _util.Util.makeHexColor(...fgRGB);
+ this.#defs.style.color = bgColor;
+ bgColor = getComputedStyle(this.#defs).getPropertyValue("color");
+ const bgRGB = getRGB(bgColor);
+ bgColor = _util.Util.makeHexColor(...bgRGB);
+ this.#defs.style.color = "";
+ if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) {
+ return this.#hcmUrl;
+ }
+ const map = new Array(256);
+ for (let i = 0; i <= 255; i++) {
+ const x = i / 255;
+ map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
+ }
+ const table = map.join(",");
+ const id = `g_${this.#docId}_hcm_filter`;
+ const filter = this.#hcmFilter = this.#document.createElementNS(SVG_NS, "filter", SVG_NS);
+ filter.setAttribute("id", id);
+ filter.setAttribute("color-interpolation-filters", "sRGB");
+ let feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer");
+ filter.append(feComponentTransfer);
+ this.#appendFeFunc(feComponentTransfer, "feFuncR", table);
+ this.#appendFeFunc(feComponentTransfer, "feFuncG", table);
+ this.#appendFeFunc(feComponentTransfer, "feFuncB", table);
+ const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix");
+ feColorMatrix.setAttribute("type", "matrix");
+ feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0");
+ filter.append(feColorMatrix);
+ feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer");
+ filter.append(feComponentTransfer);
+ const getSteps = (c, n) => {
+ const start = fgRGB[c] / 255;
+ const end = bgRGB[c] / 255;
+ const arr = new Array(n + 1);
+ for (let i = 0; i <= n; i++) {
+ arr[i] = start + i / n * (end - start);
+ }
+ return arr.join(",");
+ };
+ this.#appendFeFunc(feComponentTransfer, "feFuncR", getSteps(0, 5));
+ this.#appendFeFunc(feComponentTransfer, "feFuncG", getSteps(1, 5));
+ this.#appendFeFunc(feComponentTransfer, "feFuncB", getSteps(2, 5));
+ this.#defs.append(filter);
+ this.#hcmUrl = `url(#${id})`;
+ return this.#hcmUrl;
+ }
+ destroy(keepHCM = false) {
+ if (keepHCM && this.#hcmUrl) {
+ return;
+ }
+ if (this.#_defs) {
+ this.#_defs.parentNode.parentNode.remove();
+ this.#_defs = null;
+ }
+ if (this.#_cache) {
+ this.#_cache.clear();
+ this.#_cache = null;
+ }
+ this.#id = 0;
+ }
+}
+exports.DOMFilterFactory = DOMFilterFactory;
class DOMCanvasFactory extends _base_factory.BaseCanvasFactory {
constructor({
ownerDocument = globalThis.document
@@ -4343,8 +4511,23 @@ function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true)
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
+exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseFilterFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
var _util = __w_pdfjs_require__(1);
+class BaseFilterFactory {
+ constructor() {
+ if (this.constructor === BaseFilterFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseFilterFactory.");
+ }
+ }
+ addFilter(maps) {
+ return "none";
+ }
+ addHCMFilter(fgColor, bgColor) {
+ return "none";
+ }
+ destroy(keepHCM = false) {}
+}
+exports.BaseFilterFactory = BaseFilterFactory;
class BaseCanvasFactory {
constructor() {
if (this.constructor === BaseCanvasFactory) {
@@ -4594,11 +4777,9 @@ var _util = __w_pdfjs_require__(1);
var _is_node = __w_pdfjs_require__(10);
class FontLoader {
constructor({
- onUnsupportedFeature,
ownerDocument = globalThis.document,
styleElement = null
}) {
- this._onUnsupportedFeature = onUnsupportedFeature;
this._document = ownerDocument;
this.nativeFontFaces = [];
this.styleElement = null;
@@ -4639,9 +4820,6 @@ class FontLoader {
try {
await nativeFontFace.loaded;
} catch (ex) {
- this._onUnsupportedFeature({
- featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
- });
(0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
font.disableFontFace = true;
throw ex;
@@ -4769,8 +4947,7 @@ class FontFaceObject {
isEvalSupported = true,
disableFontFace = false,
ignoreErrors = false,
- onUnsupportedFeature,
- fontRegistry = null
+ inspectFont = null
}) {
this.compiledGlyphs = Object.create(null);
for (const i in translatedData) {
@@ -4779,8 +4956,7 @@ class FontFaceObject {
this.isEvalSupported = isEvalSupported !== false;
this.disableFontFace = disableFontFace === true;
this.ignoreErrors = ignoreErrors === true;
- this._onUnsupportedFeature = onUnsupportedFeature;
- this.fontRegistry = fontRegistry;
+ this._inspectFont = inspectFont;
}
createNativeFontFace() {
if (!this.data || this.disableFontFace) {
@@ -4798,7 +4974,7 @@ class FontFaceObject {
}
nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
}
- this.fontRegistry?.registerFont(this);
+ this._inspectFont?.(this);
return nativeFontFace;
}
createFontFaceRule() {
@@ -4817,7 +4993,7 @@ class FontFaceObject {
}
rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`;
}
- this.fontRegistry?.registerFont(this, url);
+ this._inspectFont?.(this, url);
return rule;
}
getPathGenerator(objs, character) {
@@ -4831,9 +5007,6 @@ class FontFaceObject {
if (!this.ignoreErrors) {
throw ex;
}
- this._onUnsupportedFeature({
- featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
- });
(0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
return this.compiledGlyphs[character] = function (c, size) {};
}
@@ -4884,6 +5057,7 @@ var _util = __w_pdfjs_require__(1);
var _display_utils = __w_pdfjs_require__(6);
var _pattern_helper = __w_pdfjs_require__(12);
var _image_utils = __w_pdfjs_require__(13);
+var _is_node = __w_pdfjs_require__(10);
const MIN_FONT_SIZE = 16;
const MAX_FONT_SIZE = 100;
const MAX_GROUP_SIZE = 4096;
@@ -5206,7 +5380,7 @@ class CanvasExtraState {
this.strokeAlpha = 1;
this.lineWidth = 1;
this.activeSMask = null;
- this.transferMaps = null;
+ this.transferMaps = "none";
this.startNewPathAndClipBox([0, 0, width, height]);
}
clone() {
@@ -5285,7 +5459,7 @@ class CanvasExtraState {
return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
}
}
-function putBinaryImageData(ctx, imgData, transferMaps = null) {
+function putBinaryImageData(ctx, imgData) {
if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
ctx.putImageData(imgData, 0, 0);
return;
@@ -5301,35 +5475,13 @@ function putBinaryImageData(ctx, imgData, transferMaps = null) {
const src = imgData.data;
const dest = chunkImgData.data;
let i, j, thisChunkHeight, elemsInThisChunk;
- let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;
- if (transferMaps) {
- switch (transferMaps.length) {
- case 1:
- transferMapRed = transferMaps[0];
- transferMapGreen = transferMaps[0];
- transferMapBlue = transferMaps[0];
- transferMapGray = transferMaps[0];
- break;
- case 4:
- transferMapRed = transferMaps[0];
- transferMapGreen = transferMaps[1];
- transferMapBlue = transferMaps[2];
- transferMapGray = transferMaps[3];
- break;
- }
- }
if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
const srcLength = src.byteLength;
const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
const dest32DataLength = dest32.length;
const fullSrcDiff = width + 7 >> 3;
- let white = 0xffffffff;
- let black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
- if (transferMapGray) {
- if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {
- [white, black] = [black, white];
- }
- }
+ const white = 0xffffffff;
+ const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
for (i = 0; i < totalChunks; i++) {
thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
destPos = 0;
@@ -5366,48 +5518,20 @@ function putBinaryImageData(ctx, imgData, transferMaps = null) {
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
}
} else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
- const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);
j = 0;
elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
for (i = 0; i < fullChunks; i++) {
dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
srcPos += elemsInThisChunk;
- if (hasTransferMaps) {
- for (let k = 0; k < elemsInThisChunk; k += 4) {
- if (transferMapRed) {
- dest[k + 0] = transferMapRed[dest[k + 0]];
- }
- if (transferMapGreen) {
- dest[k + 1] = transferMapGreen[dest[k + 1]];
- }
- if (transferMapBlue) {
- dest[k + 2] = transferMapBlue[dest[k + 2]];
- }
- }
- }
ctx.putImageData(chunkImgData, 0, j);
j += FULL_CHUNK_HEIGHT;
}
if (i < totalChunks) {
elemsInThisChunk = width * partialChunkHeight * 4;
dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
- if (hasTransferMaps) {
- for (let k = 0; k < elemsInThisChunk; k += 4) {
- if (transferMapRed) {
- dest[k + 0] = transferMapRed[dest[k + 0]];
- }
- if (transferMapGreen) {
- dest[k + 1] = transferMapGreen[dest[k + 1]];
- }
- if (transferMapBlue) {
- dest[k + 2] = transferMapBlue[dest[k + 2]];
- }
- }
- }
ctx.putImageData(chunkImgData, 0, j);
}
} else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
- const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);
thisChunkHeight = FULL_CHUNK_HEIGHT;
elemsInThisChunk = width * thisChunkHeight;
for (i = 0; i < totalChunks; i++) {
@@ -5422,19 +5546,6 @@ function putBinaryImageData(ctx, imgData, transferMaps = null) {
dest[destPos++] = src[srcPos++];
dest[destPos++] = 255;
}
- if (hasTransferMaps) {
- for (let k = 0; k < destPos; k += 4) {
- if (transferMapRed) {
- dest[k + 0] = transferMapRed[dest[k + 0]];
- }
- if (transferMapGreen) {
- dest[k + 1] = transferMapGreen[dest[k + 1]];
- }
- if (transferMapBlue) {
- dest[k + 2] = transferMapBlue[dest[k + 2]];
- }
- }
- }
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
}
} else {
@@ -5459,18 +5570,19 @@ function putBinaryImageMask(ctx, imgData) {
const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
({
srcPos
- } = (0, _image_utils.applyMaskImageData)({
+ } = (0, _image_utils.convertBlackAndWhiteToRGBA)({
src,
srcPos,
dest,
width,
- height: thisChunkHeight
+ height: thisChunkHeight,
+ nonBlackColor: 0
}));
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
}
}
function copyCtxState(sourceCtx, destCtx) {
- const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"];
+ const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"];
for (const property of properties) {
if (sourceCtx[property] !== undefined) {
destCtx[property] = sourceCtx[property];
@@ -5481,8 +5593,8 @@ function copyCtxState(sourceCtx, destCtx) {
destCtx.lineDashOffset = sourceCtx.lineDashOffset;
}
}
-function resetCtxToDefault(ctx, foregroundColor) {
- ctx.strokeStyle = ctx.fillStyle = foregroundColor || "#000000";
+function resetCtxToDefault(ctx) {
+ ctx.strokeStyle = ctx.fillStyle = "#000000";
ctx.fillRule = "nonzero";
ctx.globalAlpha = 1;
ctx.lineWidth = 1;
@@ -5495,6 +5607,9 @@ function resetCtxToDefault(ctx, foregroundColor) {
ctx.setLineDash([]);
ctx.lineDashOffset = 0;
}
+ if (!_is_node.isNodeJS) {
+ ctx.filter = "none";
+ }
}
function composeSMaskBackdrop(bytes, r0, g0, b0) {
const length = bytes.length;
@@ -5584,10 +5699,10 @@ const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
const NORMAL_CLIP = {};
const EO_CLIP = {};
class CanvasGraphics {
- constructor(canvasCtx, commonObjs, objs, canvasFactory, {
+ constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, {
optionalContentConfig,
markedContentStack = null
- }, annotationCanvasMap, pageColors) {
+ }, annotationCanvasMap) {
this.ctx = canvasCtx;
this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
this.stateStack = [];
@@ -5598,6 +5713,7 @@ class CanvasGraphics {
this.commonObjs = commonObjs;
this.objs = objs;
this.canvasFactory = canvasFactory;
+ this.filterFactory = filterFactory;
this.groupStack = [];
this.processingType3 = null;
this.baseTransform = null;
@@ -5616,8 +5732,6 @@ class CanvasGraphics {
this.viewportScale = 1;
this.outputScaleX = 1;
this.outputScaleY = 1;
- this.backgroundColor = pageColors?.background || null;
- this.foregroundColor = pageColors?.foreground || null;
this._cachedScaleForStroking = null;
this._cachedGetSinglePixelWidth = null;
this._cachedBitmapsMap = new Map();
@@ -5636,36 +5750,10 @@ class CanvasGraphics {
}) {
const width = this.ctx.canvas.width;
const height = this.ctx.canvas.height;
- const defaultBackgroundColor = background || "#ffffff";
- this.ctx.save();
- if (this.foregroundColor && this.backgroundColor) {
- this.ctx.fillStyle = this.foregroundColor;
- const fg = this.foregroundColor = this.ctx.fillStyle;
- this.ctx.fillStyle = this.backgroundColor;
- const bg = this.backgroundColor = this.ctx.fillStyle;
- let isValidDefaultBg = true;
- let defaultBg = defaultBackgroundColor;
- this.ctx.fillStyle = defaultBackgroundColor;
- defaultBg = this.ctx.fillStyle;
- isValidDefaultBg = typeof defaultBg === "string" && /^#[0-9A-Fa-f]{6}$/.test(defaultBg);
- if (fg === "#000000" && bg === "#ffffff" || fg === bg || !isValidDefaultBg) {
- this.foregroundColor = this.backgroundColor = null;
- } else {
- const [rB, gB, bB] = (0, _display_utils.getRGB)(defaultBg);
- const newComp = x => {
- x /= 255;
- return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
- };
- const lumB = Math.round(0.2126 * newComp(rB) + 0.7152 * newComp(gB) + 0.0722 * newComp(bB));
- this.selectColor = (r, g, b) => {
- const lumC = 0.2126 * newComp(r) + 0.7152 * newComp(g) + 0.0722 * newComp(b);
- return Math.round(lumC) === lumB ? bg : fg;
- };
- }
- }
- this.ctx.fillStyle = this.backgroundColor || defaultBackgroundColor;
+ const savedFillStyle = this.ctx.fillStyle;
+ this.ctx.fillStyle = background || "#ffffff";
this.ctx.fillRect(0, 0, width, height);
- this.ctx.restore();
+ this.ctx.fillStyle = savedFillStyle;
if (transparency) {
const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height);
this.compositeCtx = this.ctx;
@@ -5675,7 +5763,7 @@ class CanvasGraphics {
this.ctx.transform(...(0, _display_utils.getCurrentTransform)(this.compositeCtx));
}
this.ctx.save();
- resetCtxToDefault(this.ctx, this.foregroundColor);
+ resetCtxToDefault(this.ctx);
if (transform) {
this.ctx.transform(...transform);
this.outputScaleX = transform[0];
@@ -5743,7 +5831,7 @@ class CanvasGraphics {
this.transparentCanvas = null;
}
}
- endDrawing() {
+ endDrawing(pageColors = null) {
this.#restoreInitialState();
this.cachedCanvases.clear();
this.cachedPatterns.clear();
@@ -5756,6 +5844,15 @@ class CanvasGraphics {
cache.clear();
}
this._cachedBitmapsMap.clear();
+ if (pageColors) {
+ const hcmFilterId = this.filterFactory.addHCMFilter(pageColors.foreground, pageColors.background);
+ if (hcmFilterId !== "none") {
+ const savedFilter = this.ctx.filter;
+ this.ctx.filter = hcmFilterId;
+ this.ctx.drawImage(this.ctx.canvas, 0, 0);
+ this.ctx.filter = savedFilter;
+ }
+ }
}
_scaleImage(img, inverseTransform) {
const width = img.width;
@@ -5770,11 +5867,11 @@ class CanvasGraphics {
let newWidth = paintWidth,
newHeight = paintHeight;
if (widthScale > 2 && paintWidth > 1) {
- newWidth = Math.ceil(paintWidth / 2);
+ newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2);
widthScale /= paintWidth / newWidth;
}
if (heightScale > 2 && paintHeight > 1) {
- newHeight = Math.ceil(paintHeight / 2);
+ newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2;
heightScale /= paintHeight / newHeight;
}
tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
@@ -5930,7 +6027,8 @@ class CanvasGraphics {
this.checkSMaskState();
break;
case "TR":
- this.current.transferMaps = value;
+ this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);
+ break;
}
}
}
@@ -6554,7 +6652,7 @@ class CanvasGraphics {
const baseTransform = this.baseTransform || (0, _display_utils.getCurrentTransform)(this.ctx);
const canvasGraphicsFactory = {
createCanvasGraphics: ctx => {
- return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, {
+ return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig: this.optionalContentConfig,
markedContentStack: this.markedContentStack
});
@@ -6574,12 +6672,12 @@ class CanvasGraphics {
this.current.patternFill = true;
}
setStrokeRGBColor(r, g, b) {
- const color = this.selectColor?.(r, g, b) || _util.Util.makeHexColor(r, g, b);
+ const color = _util.Util.makeHexColor(r, g, b);
this.ctx.strokeStyle = color;
this.current.strokeColor = color;
}
setFillRGBColor(r, g, b) {
- const color = this.selectColor?.(r, g, b) || _util.Util.makeHexColor(r, g, b);
+ const color = _util.Util.makeHexColor(r, g, b);
this.ctx.fillStyle = color;
this.current.fillColor = color;
this.current.patternFill = false;
@@ -6589,7 +6687,7 @@ class CanvasGraphics {
if (this.cachedPatterns.has(objId)) {
pattern = this.cachedPatterns.get(objId);
} else {
- pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId));
+ pattern = (0, _pattern_helper.getShadingPattern)(this.getObject(objId));
this.cachedPatterns.set(objId, pattern);
}
if (matrix) {
@@ -6758,7 +6856,7 @@ class CanvasGraphics {
}
beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
this.#restoreInitialState();
- resetCtxToDefault(this.ctx, this.foregroundColor);
+ resetCtxToDefault(this.ctx);
this.ctx.save();
this.save();
if (this.baseTransform) {
@@ -6790,9 +6888,9 @@ class CanvasGraphics {
this.annotationCanvas.savedCtx = this.ctx;
this.ctx = context;
this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);
- resetCtxToDefault(this.ctx, this.foregroundColor);
+ resetCtxToDefault(this.ctx);
} else {
- resetCtxToDefault(this.ctx, this.foregroundColor);
+ resetCtxToDefault(this.ctx);
this.ctx.rect(rect[0], rect[1], width, height);
this.ctx.clip();
this.endPath();
@@ -6919,6 +7017,30 @@ class CanvasGraphics {
}
this.paintInlineImageXObjectGroup(imgData, map);
}
+ applyTransferMapsToCanvas(ctx) {
+ if (this.current.transferMaps !== "none") {
+ ctx.filter = this.current.transferMaps;
+ ctx.drawImage(ctx.canvas, 0, 0);
+ ctx.filter = "none";
+ }
+ return ctx.canvas;
+ }
+ applyTransferMapsToBitmap(imgData) {
+ if (this.current.transferMaps === "none") {
+ return imgData.bitmap;
+ }
+ const {
+ bitmap,
+ width,
+ height
+ } = imgData;
+ const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
+ const tmpCtx = tmpCanvas.context;
+ tmpCtx.filter = this.current.transferMaps;
+ tmpCtx.drawImage(bitmap, 0, 0);
+ tmpCtx.filter = "none";
+ return tmpCanvas.canvas;
+ }
paintInlineImageXObject(imgData) {
if (!this.contentVisible) {
return;
@@ -6927,15 +7049,20 @@ class CanvasGraphics {
const height = imgData.height;
const ctx = this.ctx;
this.save();
+ if (!_is_node.isNodeJS) {
+ ctx.filter = "none";
+ }
ctx.scale(1 / width, -1 / height);
let imgToPaint;
- if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
+ if (imgData.bitmap) {
+ imgToPaint = this.applyTransferMapsToBitmap(imgData);
+ } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
imgToPaint = imgData;
} else {
const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
const tmpCtx = tmpCanvas.context;
- putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
- imgToPaint = tmpCanvas.canvas;
+ putBinaryImageData(tmpCtx, imgData);
+ imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
}
const scaled = this._scaleImage(imgToPaint, (0, _display_utils.getCurrentTransformInverse)(ctx));
ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(ctx), imgData.interpolate);
@@ -6948,16 +7075,22 @@ class CanvasGraphics {
return;
}
const ctx = this.ctx;
- const w = imgData.width;
- const h = imgData.height;
- const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
- const tmpCtx = tmpCanvas.context;
- putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
+ let imgToPaint;
+ if (imgData.bitmap) {
+ imgToPaint = imgData.bitmap;
+ } else {
+ const w = imgData.width;
+ const h = imgData.height;
+ const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
+ const tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData);
+ imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
+ }
for (const entry of map) {
ctx.save();
ctx.transform(...entry.transform);
ctx.scale(1, -1);
- drawImageAtIntegerCoords(ctx, tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
+ drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
ctx.restore();
}
this.compose();
@@ -7580,23 +7713,35 @@ exports.TilingPattern = TilingPattern;
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.applyMaskImageData = applyMaskImageData;
+exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA;
+exports.convertToRGBA = convertToRGBA;
+exports.grayToRGBA = grayToRGBA;
var _util = __w_pdfjs_require__(1);
-function applyMaskImageData({
+function convertToRGBA(params) {
+ switch (params.kind) {
+ case _util.ImageKind.GRAYSCALE_1BPP:
+ return convertBlackAndWhiteToRGBA(params);
+ case _util.ImageKind.RGB_24BPP:
+ return convertRGBToRGBA(params);
+ }
+ return null;
+}
+function convertBlackAndWhiteToRGBA({
src,
srcPos = 0,
dest,
- destPos = 0,
width,
height,
+ nonBlackColor = 0xffffffff,
inverseDecode = false
}) {
- const opaque = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
- const [zeroMapping, oneMapping] = !inverseDecode ? [opaque, 0] : [0, opaque];
+ const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
+ const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
const widthInSource = width >> 3;
const widthRemainder = width & 7;
const srcLength = src.length;
dest = new Uint32Array(dest.buffer);
+ let destPos = 0;
for (let i = 0; i < height; i++) {
for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
const elem = srcPos < srcLength ? src[srcPos] : 255;
@@ -7622,6 +7767,60 @@ function applyMaskImageData({
destPos
};
}
+function convertRGBToRGBA({
+ src,
+ srcPos = 0,
+ dest,
+ destPos = 0,
+ width,
+ height
+}) {
+ let i = 0;
+ const len32 = src.length >> 2;
+ const src32 = new Uint32Array(src.buffer, srcPos, len32);
+ if (_util.FeatureTest.isLittleEndian) {
+ for (; i < len32 - 2; i += 3, destPos += 4) {
+ const s1 = src32[i];
+ const s2 = src32[i + 1];
+ const s3 = src32[i + 2];
+ dest[destPos] = s1 | 0xff000000;
+ dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
+ dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
+ dest[destPos + 3] = s3 >>> 8 | 0xff000000;
+ }
+ for (let j = i * 4, jj = src.length; j < jj; j += 3) {
+ dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
+ }
+ } else {
+ for (; i < len32 - 2; i += 3, destPos += 4) {
+ const s1 = src32[i];
+ const s2 = src32[i + 1];
+ const s3 = src32[i + 2];
+ dest[destPos] = s1 | 0xff;
+ dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
+ dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
+ dest[destPos + 3] = s3 << 8 | 0xff;
+ }
+ for (let j = i * 4, jj = src.length; j < jj; j += 3) {
+ dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
+ }
+ }
+ return {
+ srcPos,
+ destPos
+ };
+}
+function grayToRGBA(src, dest) {
+ if (_util.FeatureTest.isLittleEndian) {
+ for (let i = 0, ii = src.length; i < ii; i++) {
+ dest[i] = src[i] * 0x10101 | 0xff000000;
+ }
+ } else {
+ for (let i = 0, ii = src.length; i < ii; i++) {
+ dest[i] = src[i] * 0x1010100 | 0x000000ff;
+ }
+ }
+}
/***/ }),
/* 14 */
@@ -8628,7 +8827,7 @@ exports.XfaText = XfaText;
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.NodeStandardFontDataFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;
+exports.NodeStandardFontDataFactory = exports.NodeFilterFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;
var _base_factory = __w_pdfjs_require__(7);
;
const fetchData = function (url) {
@@ -8643,6 +8842,8 @@ const fetchData = function (url) {
});
});
};
+class NodeFilterFactory extends _base_factory.BaseFilterFactory {}
+exports.NodeFilterFactory = NodeFilterFactory;
class NodeCanvasFactory extends _base_factory.BaseCanvasFactory {
_createCanvas(width, height) {
const Canvas = require("canvas");
@@ -9193,7 +9394,7 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
parts[i] = parts[i].slice(0, quotindex);
parts.length = i + 1;
}
- parts[i] = parts[i].replace(/\\(.)/g, "$1");
+ parts[i] = parts[i].replaceAll(/\\(.)/g, "$1");
}
value = parts.join('"');
}
@@ -9213,10 +9414,10 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
return value;
}
- return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
+ return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
if (encoding === "q" || encoding === "Q") {
- text = text.replace(/_/g, " ");
- text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
+ text = text.replaceAll("_", " ");
+ text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {
return String.fromCharCode(parseInt(hex, 16));
});
return textdecode(charset, text);
@@ -10200,6 +10401,16 @@ function renderTextLayer(params) {
(0, _display_utils.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters " + "will be removed in the future, please use `textContentSource` instead.");
params.textContentSource = params.textContent || params.textContentStream;
}
+ const {
+ container,
+ viewport
+ } = params;
+ const style = getComputedStyle(container);
+ const visibility = style.getPropertyValue("visibility");
+ const scaleFactor = parseFloat(style.getPropertyValue("--scale-factor"));
+ if (visibility === "visible" && (!scaleFactor || Math.abs(scaleFactor - viewport.scale) > 1e-15)) {
+ console.error("The `--scale-factor` CSS-variable must be set, " + "to the same value as `viewport.scale`, " + "either on the `container`-element itself or higher up in the DOM.");
+ }
const task = new TextLayerRenderTask(params);
task._render();
return task;
@@ -10936,7 +11147,6 @@ var _editor = __w_pdfjs_require__(4);
var _pdfjsFitCurve = __w_pdfjs_require__(30);
var _tools = __w_pdfjs_require__(5);
const RESIZER_SIZE = 16;
-const TIME_TO_WAIT_BEFORE_FIXING_DIMS = 100;
class InkEditor extends _editor.AnnotationEditor {
#aspectRatio = 0;
#baseHeight = 0;
@@ -11326,17 +11536,9 @@ class InkEditor extends _editor.AnnotationEditor {
this.ctx = this.canvas.getContext("2d");
}
#createObserver() {
- let timeoutId = null;
this.#observer = new ResizeObserver(entries => {
const rect = entries[0].contentRect;
if (rect.width && rect.height) {
- if (timeoutId !== null) {
- clearTimeout(timeoutId);
- }
- timeoutId = setTimeout(() => {
- this.fixDims();
- timeoutId = null;
- }, TIME_TO_WAIT_BEFORE_FIXING_DIMS);
this.setDimensions(rect.width, rect.height);
}
});
@@ -11404,6 +11606,7 @@ class InkEditor extends _editor.AnnotationEditor {
this.#setCanvasDims();
this.#redraw();
this.canvas.style.visibility = "visible";
+ this.fixDims();
}
#setScaleFactor(width, height) {
const padding = this.#getPadding();
@@ -12040,6 +12243,9 @@ class AnnotationElement {
} = this;
const container = document.createElement("section");
container.setAttribute("data-annotation-id", data.id);
+ if (data.noRotate) {
+ container.classList.add("norotate");
+ }
const {
pageWidth,
pageHeight,
@@ -12243,7 +12449,7 @@ class AnnotationElement {
}
if (!trigger) {
trigger = document.createElement("div");
- trigger.className = "popupTriggerArea";
+ trigger.classList.add("popupTriggerArea");
container.append(trigger);
}
const popupElement = new PopupElement({
@@ -12262,7 +12468,7 @@ class AnnotationElement {
}
_renderQuadrilaterals(className) {
for (const quadrilateral of this.quadrilaterals) {
- quadrilateral.className = className;
+ quadrilateral.classList.add(className);
}
return this.quadrilaterals;
}
@@ -12372,7 +12578,7 @@ class LinkAnnotationElement extends AnnotationElement {
return quadrilateral;
});
}
- this.container.className = "linkAnnotation";
+ this.container.classList.add("linkAnnotation");
if (isBound) {
this.container.append(link);
}
@@ -12552,7 +12758,7 @@ class TextAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "textAnnotation";
+ this.container.classList.add("textAnnotation");
const image = document.createElement("img");
image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
image.alt = "[{{type}} Annotation]";
@@ -12674,7 +12880,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
render() {
const storage = this.annotationStorage;
const id = this.data.id;
- this.container.className = "textWidgetAnnotation";
+ this.container.classList.add("textWidgetAnnotation");
let element = null;
if (this.renderForms) {
const storedData = storage.getValue(id, {
@@ -12968,7 +13174,7 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
value
});
}
- this.container.className = "buttonWidgetAnnotation checkBox";
+ this.container.classList.add("buttonWidgetAnnotation", "checkBox");
const element = document.createElement("input");
GetElementsByNameSet.add(element);
element.setAttribute("data-element-id", id);
@@ -13030,7 +13236,7 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
});
}
render() {
- this.container.className = "buttonWidgetAnnotation radioButton";
+ this.container.classList.add("buttonWidgetAnnotation", "radioButton");
const storage = this.annotationStorage;
const data = this.data;
const id = data.id;
@@ -13107,7 +13313,7 @@ class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
}
render() {
const container = super.render();
- container.className = "buttonWidgetAnnotation pushButton";
+ container.classList.add("buttonWidgetAnnotation", "pushButton");
if (this.data.alternativeText) {
container.title = this.data.alternativeText;
}
@@ -13128,7 +13334,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
});
}
render() {
- this.container.className = "choiceWidgetAnnotation";
+ this.container.classList.add("choiceWidgetAnnotation");
const storage = this.annotationStorage;
const id = this.data.id;
const storedData = storage.getValue(id, {
@@ -13355,7 +13561,7 @@ class PopupAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "popupAnnotation";
+ this.container.classList.add("popupAnnotation");
const parentElements = this.layer.querySelectorAll(`[data-annotation-id="${this.data.parentId}"]`);
if (parentElements.length === 0) {
return this.container;
@@ -13400,11 +13606,11 @@ class PopupElement {
render() {
const BACKGROUND_ENLIGHT = 0.7;
const wrapper = document.createElement("div");
- wrapper.className = "popupWrapper";
+ wrapper.classList.add("popupWrapper");
this.hideElement = this.hideWrapper ? wrapper : this.container;
this.hideElement.hidden = true;
const popup = document.createElement("div");
- popup.className = "popup";
+ popup.classList.add("popup");
const color = this.color;
if (color) {
const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
@@ -13419,7 +13625,7 @@ class PopupElement {
const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
if (dateObject) {
const modificationDate = document.createElement("span");
- modificationDate.className = "popupDate";
+ modificationDate.classList.add("popupDate");
modificationDate.textContent = "{{date}}, {{time}}";
modificationDate.dataset.l10nId = "annotation_date_string";
modificationDate.dataset.l10nArgs = JSON.stringify({
@@ -13434,7 +13640,7 @@ class PopupElement {
intent: "richText",
div: popup
});
- popup.lastChild.className = "richText popupContent";
+ popup.lastChild.classList.add("richText", "popupContent");
} else {
const contents = this._formatContents(this.contentsObj);
popup.append(contents);
@@ -13456,7 +13662,7 @@ class PopupElement {
dir
}) {
const p = document.createElement("p");
- p.className = "popupContent";
+ p.classList.add("popupContent");
p.dir = dir;
const lines = str.split(/(?:\r\n?|\n)/);
for (let i = 0, ii = lines.length; i < ii; ++i) {
@@ -13504,10 +13710,10 @@ class FreeTextAnnotationElement extends AnnotationElement {
this.textContent = parameters.data.textContent;
}
render() {
- this.container.className = "freeTextAnnotation";
+ this.container.classList.add("freeTextAnnotation");
if (this.textContent) {
const content = document.createElement("div");
- content.className = "annotationTextContent";
+ content.classList.add("annotationTextContent");
content.setAttribute("role", "comment");
for (const line of this.textContent) {
const lineSpan = document.createElement("span");
@@ -13531,7 +13737,7 @@ class LineAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "lineAnnotation";
+ this.container.classList.add("lineAnnotation");
const data = this.data;
const {
width,
@@ -13561,7 +13767,7 @@ class SquareAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "squareAnnotation";
+ this.container.classList.add("squareAnnotation");
const data = this.data;
const {
width,
@@ -13592,7 +13798,7 @@ class CircleAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "circleAnnotation";
+ this.container.classList.add("circleAnnotation");
const data = this.data;
const {
width,
@@ -13625,7 +13831,7 @@ class PolylineAnnotationElement extends AnnotationElement {
this.svgElementName = "svg:polyline";
}
render() {
- this.container.className = this.containerClassName;
+ this.container.classList.add(this.containerClassName);
const data = this.data;
const {
width,
@@ -13666,7 +13872,7 @@ class CaretAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "caretAnnotation";
+ this.container.classList.add("caretAnnotation");
if (!this.data.hasPopup) {
this._createPopup(null, this.data);
}
@@ -13684,7 +13890,7 @@ class InkAnnotationElement extends AnnotationElement {
this.svgElementName = "svg:polyline";
}
render() {
- this.container.className = this.containerClassName;
+ this.container.classList.add(this.containerClassName);
const data = this.data;
const {
width,
@@ -13727,7 +13933,7 @@ class HighlightAnnotationElement extends AnnotationElement {
if (this.quadrilaterals) {
return this._renderQuadrilaterals("highlightAnnotation");
}
- this.container.className = "highlightAnnotation";
+ this.container.classList.add("highlightAnnotation");
return this.container;
}
}
@@ -13747,7 +13953,7 @@ class UnderlineAnnotationElement extends AnnotationElement {
if (this.quadrilaterals) {
return this._renderQuadrilaterals("underlineAnnotation");
}
- this.container.className = "underlineAnnotation";
+ this.container.classList.add("underlineAnnotation");
return this.container;
}
}
@@ -13767,7 +13973,7 @@ class SquigglyAnnotationElement extends AnnotationElement {
if (this.quadrilaterals) {
return this._renderQuadrilaterals("squigglyAnnotation");
}
- this.container.className = "squigglyAnnotation";
+ this.container.classList.add("squigglyAnnotation");
return this.container;
}
}
@@ -13787,7 +13993,7 @@ class StrikeOutAnnotationElement extends AnnotationElement {
if (this.quadrilaterals) {
return this._renderQuadrilaterals("strikeoutAnnotation");
}
- this.container.className = "strikeoutAnnotation";
+ this.container.classList.add("strikeoutAnnotation");
return this.container;
}
}
@@ -13800,7 +14006,7 @@ class StampAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "stampAnnotation";
+ this.container.classList.add("stampAnnotation");
if (!this.data.hasPopup) {
this._createPopup(null, this.data);
}
@@ -13825,7 +14031,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
});
}
render() {
- this.container.className = "fileAttachmentAnnotation";
+ this.container.classList.add("fileAttachmentAnnotation");
let trigger;
if (this.data.hasAppearance) {
trigger = document.createElement("div");
@@ -13833,7 +14039,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
trigger = document.createElement("img");
trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(this.data.name) ? "paperclip" : "pushpin"}.svg`;
}
- trigger.className = "popupTriggerArea";
+ trigger.classList.add("popupTriggerArea");
trigger.addEventListener("dblclick", this._download.bind(this));
if (!this.data.hasPopup && (this.data.titleObj?.str || this.data.contentsObj?.str || this.data.richText)) {
this._createPopup(trigger, this.data);
@@ -13877,6 +14083,9 @@ class AnnotationLayer {
};
let zIndex = 0;
for (const data of annotations) {
+ if (data.noHTML) {
+ continue;
+ }
if (data.annotationType !== _util.AnnotationType.POPUP) {
const {
width,
@@ -15651,12 +15860,6 @@ Object.defineProperty(exports, "SVGGraphics", ({
return _svg.SVGGraphics;
}
}));
-Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({
- enumerable: true,
- get: function () {
- return _util.UNSUPPORTED_FEATURES;
- }
-}));
Object.defineProperty(exports, "UnexpectedResponseException", ({
enumerable: true,
get: function () {
@@ -15781,8 +15984,8 @@ var _annotation_layer = __w_pdfjs_require__(32);
var _worker_options = __w_pdfjs_require__(14);
var _svg = __w_pdfjs_require__(35);
var _xfa_layer = __w_pdfjs_require__(34);
-const pdfjsVersion = '3.4.120';
-const pdfjsBuild = 'af6414988';
+const pdfjsVersion = '3.5.141';
+const pdfjsBuild = 'be0f6ee08';
})();
/******/ return __webpack_exports__;
diff --git a/app/stage/protyle/js/pdf/pdf.worker.js b/app/stage/protyle/js/pdf/pdf.worker.js
index d7dc73ac1..7e88aa550 100644
--- a/app/stage/protyle/js/pdf/pdf.worker.js
+++ b/app/stage/protyle/js/pdf/pdf.worker.js
@@ -47,11 +47,11 @@ var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _primitives = __w_pdfjs_require__(4);
var _pdf_manager = __w_pdfjs_require__(6);
-var _cleanup_helper = __w_pdfjs_require__(69);
-var _writer = __w_pdfjs_require__(63);
-var _is_node = __w_pdfjs_require__(100);
-var _message_handler = __w_pdfjs_require__(101);
-var _worker_stream = __w_pdfjs_require__(102);
+var _cleanup_helper = __w_pdfjs_require__(70);
+var _writer = __w_pdfjs_require__(64);
+var _is_node = __w_pdfjs_require__(101);
+var _message_handler = __w_pdfjs_require__(102);
+var _worker_stream = __w_pdfjs_require__(103);
class WorkerTask {
constructor(name) {
this.name = name;
@@ -101,7 +101,7 @@ class WorkerMessageHandler {
docId,
apiVersion
} = docParams;
- const workerVersion = '3.4.120';
+ const workerVersion = '3.5.141';
if (apiVersion !== workerVersion) {
throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
}
@@ -112,8 +112,8 @@ class WorkerMessageHandler {
if (enumerableProperties.length) {
throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
}
- if (typeof ReadableStream === "undefined") {
- const partialMsg = "The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. `ReadableStream`); ";
+ if (typeof Path2D === "undefined" || typeof ReadableStream === "undefined") {
+ const partialMsg = "The browser/environment lacks native support for critical " + "functionality used by the PDF.js library " + "(e.g. `Path2D` and/or `ReadableStream`); ";
if (_is_node.isNodeJS) {
throw new Error(partialMsg + "please use a `legacy`-build instead.");
}
@@ -496,6 +496,7 @@ class WorkerMessageHandler {
}
});
}
+ const lastXRefStreamPos = xref.lastXRefStreamPos;
newXrefInfo = {
rootRef: xref.trailer.getRaw("Root") || null,
encryptRef: xref.trailer.getRaw("Encrypt") || null,
@@ -503,7 +504,7 @@ class WorkerMessageHandler {
infoRef: xref.trailer.getRaw("Info") || null,
info: infoObj,
fileIds: xref.trailer.get("ID") || null,
- startXRef,
+ startXRef: lastXRefStreamPos === null ? startXRef : lastXRefStreamPos,
filename
};
}
@@ -555,7 +556,10 @@ class WorkerMessageHandler {
});
});
handler.on("GetTextContent", function (data, sink) {
- const pageIndex = data.pageIndex;
+ const {
+ pageIndex,
+ includeMarkedContent
+ } = data;
pdfManager.getPage(pageIndex).then(function (page) {
const task = new WorkerTask("GetTextContent: page " + pageIndex);
startWorkerTask(task);
@@ -564,8 +568,7 @@ class WorkerMessageHandler {
handler,
task,
sink,
- includeMarkedContent: data.includeMarkedContent,
- combineTextItems: data.combineTextItems
+ includeMarkedContent
}).then(function () {
finishWorkerTask(task);
if (start) {
@@ -644,7 +647,7 @@ if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "unde
Object.defineProperty(exports, "__esModule", ({
value: true
}));
-exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
+exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
exports.assert = assert;
exports.bytesToString = bytesToString;
exports.createPromiseCapability = createPromiseCapability;
@@ -670,6 +673,8 @@ const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
+const MAX_IMAGE_SIZE_TO_CACHE = 10e6;
+exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE;
const LINE_FACTOR = 1.35;
exports.LINE_FACTOR = LINE_FACTOR;
const LINE_DESCENT_FACTOR = 0.35;
@@ -969,29 +974,6 @@ const OPS = {
constructPath: 91
};
exports.OPS = OPS;
-const UNSUPPORTED_FEATURES = {
- forms: "forms",
- javaScript: "javaScript",
- signatures: "signatures",
- smask: "smask",
- shadingPattern: "shadingPattern",
- errorTilingPattern: "errorTilingPattern",
- errorExtGState: "errorExtGState",
- errorXObject: "errorXObject",
- errorFontLoadType3: "errorFontLoadType3",
- errorFontState: "errorFontState",
- errorFontMissing: "errorFontMissing",
- errorFontTranslate: "errorFontTranslate",
- errorColorSpace: "errorColorSpace",
- errorOperatorList: "errorOperatorList",
- errorFontToUnicode: "errorFontToUnicode",
- errorFontLoadNative: "errorFontLoadNative",
- errorFontBuildPath: "errorFontBuildPath",
- errorFontGetPath: "errorFontGetPath",
- errorMarkedContent: "errorMarkedContent",
- errorContentSubStream: "errorContentSubStream"
-};
-exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
const PasswordResponses = {
NEED_PASSWORD: 1,
INCORRECT_PASSWORD: 2
@@ -1664,7 +1646,7 @@ function escapePDFName(str) {
return buffer.join("");
}
function escapeString(str) {
- return str.replace(/([()\\\n\r])/g, match => {
+ return str.replaceAll(/([()\\\n\r])/g, match => {
if (match === "\n") {
return "\\n";
} else if (match === "\r") {
@@ -1699,7 +1681,7 @@ function _collectJS(entry, xref, list, parents) {
} else if (typeof js === "string") {
code = js;
}
- code = code && (0, _util.stringToPDFString)(code).replace(/\u0000/g, "");
+ code = code && (0, _util.stringToPDFString)(code).replaceAll("\x00", "");
if (code) {
list.push(code);
}
@@ -1798,20 +1780,17 @@ function validateCSSFont(cssFontInfo) {
fontWeight,
italicAngle
} = cssFontInfo;
- if (/^".*"$/.test(fontFamily)) {
- if (/[^\\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) {
- (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`);
- return false;
- }
- } else if (/^'.*'$/.test(fontFamily)) {
- if (/[^\\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) {
- (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`);
+ const m = /^("|').*("|')$/.exec(fontFamily);
+ if (m && m[1] === m[2]) {
+ const re = new RegExp(`[^\\\\]${m[1]}`);
+ if (re.test(fontFamily.slice(1, -1))) {
+ (0, _util.warn)(`XFA - FontFamily contains unescaped ${m[1]}: ${fontFamily}.`);
return false;
}
} else {
for (const ident of fontFamily.split(/[ \t]+/)) {
if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\\]+$/.test(ident)) {
- (0, _util.warn)(`XFA - FontFamily contains some invalid : ${fontFamily}.`);
+ (0, _util.warn)(`XFA - FontFamily contains invalid : ${fontFamily}.`);
return false;
}
}
@@ -1824,7 +1803,7 @@ function validateCSSFont(cssFontInfo) {
}
function recoverJsURL(str) {
const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"];
- const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
+ const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").replaceAll(".", "\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
const jsUrl = regex.exec(str);
if (jsUrl && jsUrl[2]) {
const url = jsUrl[2];
@@ -2299,6 +2278,7 @@ class BasePdfManager {
this._docId = args.docId;
this._password = args.password;
this.enableXfa = args.enableXfa;
+ args.evaluatorOptions.isOffscreenCanvasSupported = args.evaluatorOptions.isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported;
this.evaluatorOptions = args.evaluatorOptions;
}
get docId() {
@@ -2959,22 +2939,22 @@ var _annotation = __w_pdfjs_require__(10);
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _primitives = __w_pdfjs_require__(4);
-var _xfa_fonts = __w_pdfjs_require__(49);
+var _xfa_fonts = __w_pdfjs_require__(50);
var _base_stream = __w_pdfjs_require__(5);
-var _crypto = __w_pdfjs_require__(65);
-var _catalog = __w_pdfjs_require__(67);
-var _cleanup_helper = __w_pdfjs_require__(69);
-var _dataset_reader = __w_pdfjs_require__(98);
+var _crypto = __w_pdfjs_require__(66);
+var _catalog = __w_pdfjs_require__(68);
+var _cleanup_helper = __w_pdfjs_require__(70);
+var _dataset_reader = __w_pdfjs_require__(99);
var _parser = __w_pdfjs_require__(15);
var _stream = __w_pdfjs_require__(8);
-var _object_loader = __w_pdfjs_require__(73);
-var _operator_list = __w_pdfjs_require__(60);
+var _object_loader = __w_pdfjs_require__(74);
+var _operator_list = __w_pdfjs_require__(62);
var _evaluator = __w_pdfjs_require__(13);
var _decode_stream = __w_pdfjs_require__(17);
-var _struct_tree = __w_pdfjs_require__(72);
-var _writer = __w_pdfjs_require__(63);
-var _factory = __w_pdfjs_require__(74);
-var _xref = __w_pdfjs_require__(99);
+var _struct_tree = __w_pdfjs_require__(73);
+var _writer = __w_pdfjs_require__(64);
+var _factory = __w_pdfjs_require__(75);
+var _xref = __w_pdfjs_require__(100);
const DEFAULT_USER_UNIT = 1.0;
const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
class Page {
@@ -3094,23 +3074,20 @@ class Page {
}
return (0, _util.shadow)(this, "rotate", rotate);
}
- _onSubStreamError(handler, reason, objId) {
+ _onSubStreamError(reason, objId) {
if (this.evaluatorOptions.ignoreErrors) {
- handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorContentSubStream
- });
(0, _util.warn)(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`);
return;
}
throw reason;
}
- getContentStream(handler) {
+ getContentStream() {
return this.pdfManager.ensure(this, "content").then(content => {
if (content instanceof _base_stream.BaseStream) {
return content;
}
if (Array.isArray(content)) {
- return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this, handler));
+ return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this));
}
return new _stream.NullStream();
});
@@ -3206,7 +3183,7 @@ class Page {
cacheKey,
annotationStorage = null
}) {
- const contentStreamPromise = this.getContentStream(handler);
+ const contentStreamPromise = this.getContentStream();
const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]);
const partialEvaluator = new _evaluator.PartialEvaluator({
xref: this.xref,
@@ -3301,10 +3278,9 @@ class Page {
handler,
task,
includeMarkedContent,
- sink,
- combineTextItems
+ sink
}) {
- const contentStreamPromise = this.getContentStream(handler);
+ const contentStreamPromise = this.getContentStream();
const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]);
const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
return dataPromises.then(([contentStream]) => {
@@ -3324,7 +3300,6 @@ class Page {
task,
resources: this.resources,
includeMarkedContent,
- combineTextItems,
sink,
viewBox: this.view
});
@@ -3777,7 +3752,7 @@ class PDFDocument {
continue;
}
let fontFamily = descriptor.get("FontFamily");
- fontFamily = fontFamily.replace(/[ ]+(\d)/g, "$1");
+ fontFamily = fontFamily.replaceAll(/[ ]+(\d)/g, "$1");
const fontWeight = descriptor.get("FontWeight");
const italicAngle = -descriptor.get("ItalicAngle");
const cssFontInfo = {
@@ -4229,16 +4204,16 @@ var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
var _default_appearance = __w_pdfjs_require__(11);
var _primitives = __w_pdfjs_require__(4);
-var _writer = __w_pdfjs_require__(63);
+var _writer = __w_pdfjs_require__(64);
var _base_stream = __w_pdfjs_require__(5);
-var _bidi = __w_pdfjs_require__(58);
-var _catalog = __w_pdfjs_require__(67);
+var _bidi = __w_pdfjs_require__(59);
+var _catalog = __w_pdfjs_require__(68);
var _colorspace = __w_pdfjs_require__(12);
-var _file_spec = __w_pdfjs_require__(70);
-var _object_loader = __w_pdfjs_require__(73);
-var _operator_list = __w_pdfjs_require__(60);
+var _file_spec = __w_pdfjs_require__(71);
+var _object_loader = __w_pdfjs_require__(74);
+var _operator_list = __w_pdfjs_require__(62);
var _stream = __w_pdfjs_require__(8);
-var _factory = __w_pdfjs_require__(74);
+var _factory = __w_pdfjs_require__(75);
class AnnotationFactory {
static create(xref, ref, pdfManager, idFactory, collectFields) {
return Promise.all([pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("baseUrl"), pdfManager.ensureCatalog("attachments"), pdfManager.ensureDoc("xfaDatasets"), collectFields ? this._getPageIndex(xref, ref, pdfManager) : -1]).then(([acroForm, baseUrl, attachments, xfaDatasets, pageIndex]) => pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, attachments, xfaDatasets, collectFields, pageIndex]));
@@ -4265,7 +4240,7 @@ class AnnotationFactory {
collectFields,
needAppearances: !collectFields && acroFormDict.get("NeedAppearances") === true,
pageIndex,
- isOffscreenCanvasSupported: _util.FeatureTest.isOffscreenCanvasSupported && pdfManager.evaluatorOptions.isOffscreenCanvasSupported
+ isOffscreenCanvasSupported: pdfManager.evaluatorOptions.isOffscreenCanvasSupported
};
switch (subtype) {
case "Link":
@@ -4390,8 +4365,10 @@ class AnnotationFactory {
return null;
}
const xref = evaluator.xref;
+ const {
+ isOffscreenCanvasSupported
+ } = evaluator.options;
const promises = [];
- const isOffscreenCanvasSupported = _util.FeatureTest.isOffscreenCanvasSupported && evaluator.options.isOffscreenCanvasSupported;
for (const annotation of annotations) {
switch (annotation.annotationType) {
case _util.AnnotationEditorType.FREETEXT:
@@ -4505,6 +4482,8 @@ class Annotation {
if (this.appearance) {
this._streams.push(this.appearance);
}
+ const isLocked = !!(this.flags & _util.AnnotationFlag.LOCKED);
+ const isContentLocked = !!(this.flags & _util.AnnotationFlag.LOCKEDCONTENTS);
this.data = {
annotationFlags: this.flags,
borderStyle: this.borderStyle,
@@ -4518,7 +4497,9 @@ class Annotation {
modificationDate: this.modificationDate,
rect: this.rectangle,
subtype: params.subtype,
- hasOwnCanvas: false
+ hasOwnCanvas: false,
+ noRotate: !!(this.flags & _util.AnnotationFlag.NOROTATE),
+ noHTML: isLocked && isContentLocked
};
if (params.collectFields) {
const kids = dict.get("Kids");
@@ -4820,7 +4801,6 @@ class Annotation {
task,
resources,
includeMarkedContent: true,
- combineTextItems: true,
sink,
viewBox
});
@@ -5268,7 +5248,7 @@ class WidgetAnnotation extends Annotation {
return str;
}
async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) {
- if (renderForms && !(this instanceof SignatureWidgetAnnotation)) {
+ if (renderForms && !(this instanceof SignatureWidgetAnnotation) && !this.data.noHTML) {
return {
opList: new _operator_list.OperatorList(),
separateForm: true,
@@ -6382,6 +6362,7 @@ class SignatureWidgetAnnotation extends WidgetAnnotation {
constructor(params) {
super(params);
this.data.fieldValue = null;
+ this.data.hasOwnCanvas = this.data.noRotate;
}
getFieldObject() {
return {
@@ -6396,6 +6377,8 @@ class TextAnnotation extends MarkupAnnotation {
constructor(params) {
const DEFAULT_ICON_SIZE = 22;
super(params);
+ this.data.noRotate = true;
+ this.data.hasOwnCanvas = this.data.noRotate;
const {
dict
} = params;
@@ -6490,6 +6473,7 @@ exports.PopupAnnotation = PopupAnnotation;
class FreeTextAnnotation extends MarkupAnnotation {
constructor(params) {
super(params);
+ this.data.hasOwnCanvas = this.data.noRotate;
const {
xref
} = params;
@@ -6642,6 +6626,7 @@ class LineAnnotation extends MarkupAnnotation {
xref
} = params;
this.data.annotationType = _util.AnnotationType.LINE;
+ this.data.hasOwnCanvas = this.data.noRotate;
const lineCoordinates = dict.getArray("L");
this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates);
this.setLineEndings(dict.getArray("LE"));
@@ -6681,6 +6666,7 @@ class SquareAnnotation extends MarkupAnnotation {
xref
} = params;
this.data.annotationType = _util.AnnotationType.SQUARE;
+ this.data.hasOwnCanvas = this.data.noRotate;
if (!this.appearance) {
const strokeColor = this.color ? getPdfColorArray(this.color) : [0, 0, 0];
const strokeAlpha = dict.get("CA");
@@ -6768,6 +6754,7 @@ class PolylineAnnotation extends MarkupAnnotation {
xref
} = params;
this.data.annotationType = _util.AnnotationType.POLYLINE;
+ this.data.hasOwnCanvas = this.data.noRotate;
this.data.vertices = [];
if (!(this instanceof PolygonAnnotation)) {
this.setLineEndings(dict.getArray("LE"));
@@ -6830,6 +6817,7 @@ class CaretAnnotation extends MarkupAnnotation {
class InkAnnotation extends MarkupAnnotation {
constructor(params) {
super(params);
+ this.data.hasOwnCanvas = this.data.noRotate;
const {
dict,
xref
@@ -7103,6 +7091,7 @@ class StampAnnotation extends MarkupAnnotation {
constructor(params) {
super(params);
this.data.annotationType = _util.AnnotationType.STAMP;
+ this.data.hasOwnCanvas = this.data.noRotate;
}
}
class FileAttachmentAnnotation extends MarkupAnnotation {
@@ -7114,6 +7103,7 @@ class FileAttachmentAnnotation extends MarkupAnnotation {
} = params;
const file = new _file_spec.FileSpec(dict.get("FS"), xref);
this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
+ this.data.hasOwnCanvas = this.data.noRotate;
this.data.file = file.serializable;
const name = dict.get("Name");
this.data.name = name instanceof _primitives.Name ? (0, _util.stringToPDFString)(name.name) : "PushPin";
@@ -8301,34 +8291,36 @@ exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0;
var _util = __w_pdfjs_require__(2);
var _cmap = __w_pdfjs_require__(14);
var _primitives = __w_pdfjs_require__(4);
-var _fonts = __w_pdfjs_require__(32);
-var _encodings = __w_pdfjs_require__(35);
-var _standard_fonts = __w_pdfjs_require__(39);
-var _pattern = __w_pdfjs_require__(48);
-var _xfa_fonts = __w_pdfjs_require__(49);
-var _to_unicode_map = __w_pdfjs_require__(40);
-var _function = __w_pdfjs_require__(55);
+var _fonts = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(36);
+var _standard_fonts = __w_pdfjs_require__(40);
+var _pattern = __w_pdfjs_require__(49);
+var _xfa_fonts = __w_pdfjs_require__(50);
+var _to_unicode_map = __w_pdfjs_require__(41);
+var _function = __w_pdfjs_require__(56);
var _parser = __w_pdfjs_require__(15);
-var _image_utils = __w_pdfjs_require__(57);
+var _image_utils = __w_pdfjs_require__(58);
var _stream = __w_pdfjs_require__(8);
var _base_stream = __w_pdfjs_require__(5);
-var _bidi = __w_pdfjs_require__(58);
+var _bidi = __w_pdfjs_require__(59);
var _colorspace = __w_pdfjs_require__(12);
var _decode_stream = __w_pdfjs_require__(17);
-var _fonts_utils = __w_pdfjs_require__(36);
-var _glyphlist = __w_pdfjs_require__(37);
+var _fonts_utils = __w_pdfjs_require__(37);
+var _glyphlist = __w_pdfjs_require__(38);
var _core_utils = __w_pdfjs_require__(3);
-var _metrics = __w_pdfjs_require__(43);
-var _unicode = __w_pdfjs_require__(38);
-var _murmurhash = __w_pdfjs_require__(59);
-var _operator_list = __w_pdfjs_require__(60);
-var _image = __w_pdfjs_require__(61);
+var _metrics = __w_pdfjs_require__(44);
+var _unicode = __w_pdfjs_require__(39);
+var _image_resizer = __w_pdfjs_require__(60);
+var _murmurhash = __w_pdfjs_require__(61);
+var _operator_list = __w_pdfjs_require__(62);
+var _image = __w_pdfjs_require__(63);
const DefaultPartialEvaluatorOptions = Object.freeze({
maxImageSize: -1,
disableFontFace: false,
ignoreErrors: false,
isEvalSupported: true,
- isOffscreenCanvasSupported: true,
+ isOffscreenCanvasSupported: false,
+ canvasMaxAreaInBytes: -1,
fontExtraProperties: false,
useSystemFonts: true,
cMapUrl: null,
@@ -8448,6 +8440,7 @@ class PartialEvaluator {
this.options = options || DefaultPartialEvaluatorOptions;
this.parsingType3Font = false;
this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);
+ _image_resizer.ImageResizer.setMaxArea(this.options.canvasMaxAreaInBytes);
}
get _pdfFunctionFactory() {
const pdfFunctionFactory = new _function.PDFFunctionFactory({
@@ -8747,7 +8740,7 @@ class PartialEvaluator {
}
return;
}
- imgData = _image.PDFImage.createMask({
+ imgData = await _image.PDFImage.createMask({
imgArray,
width: w,
height: h,
@@ -8799,7 +8792,8 @@ class PartialEvaluator {
pdfFunctionFactory: this._pdfFunctionFactory,
localColorSpaceCache
});
- imgData = imageObj.createImageData(true);
+ imgData = await imageObj.createImageData(true, false);
+ operatorList.isOffscreenCanvasSupported = this.options.isOffscreenCanvasSupported;
operatorList.addImageOps(_util.OPS.paintInlineImageXObject, [imgData], optionalContent);
return;
}
@@ -8822,10 +8816,16 @@ class PartialEvaluator {
isInline,
pdfFunctionFactory: this._pdfFunctionFactory,
localColorSpaceCache
- }).then(imageObj => {
- imgData = imageObj.createImageData(false);
+ }).then(async imageObj => {
+ imgData = await imageObj.createImageData(false, this.options.isOffscreenCanvasSupported);
if (cacheKey && imageRef && cacheGlobally) {
- this.globalImageCache.addByteSize(imageRef, imgData.data.length);
+ let length = 0;
+ if (imgData.bitmap) {
+ length = imgData.width * imgData.height * 4;
+ } else {
+ length = imgData.data.length;
+ }
+ this.globalImageCache.addByteSize(imageRef, length);
}
return this._sendImgData(objId, imgData, cacheGlobally);
}).catch(reason => {
@@ -8941,9 +8941,6 @@ class PartialEvaluator {
return;
}
if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern
- });
(0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`);
return;
}
@@ -8960,9 +8957,6 @@ class PartialEvaluator {
operatorList.addDependencies(translated.type3Dependencies);
return translated;
}).catch(reason => {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3
- });
return new TranslatedFont({
loadedName: "g_font_error",
font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),
@@ -8993,9 +8987,6 @@ class PartialEvaluator {
}
const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator.");
if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontState
- });
(0, _util.warn)(`ensureStateFont: "${reason}".`);
return;
}
@@ -9118,9 +9109,6 @@ class PartialEvaluator {
(0, _util.warn)(`${partialMsg}.`);
return errorFont();
}
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing
- });
(0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);
if (fallbackFontDict) {
fontRef = fallbackFontDict;
@@ -9199,9 +9187,6 @@ class PartialEvaluator {
evaluatorOptions: this.options
}));
}).catch(reason => {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate
- });
(0, _util.warn)(`loadFont - translateFont failed: "${reason}".`);
fontCapability.resolve(new TranslatedFont({
loadedName: font.loadedName,
@@ -9281,9 +9266,6 @@ class PartialEvaluator {
return null;
}
if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace
- });
(0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
return null;
}
@@ -9298,11 +9280,18 @@ class PartialEvaluator {
}) {
let id = localShadingPatternCache.get(shading);
if (!id) {
- var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache);
+ var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this._pdfFunctionFactory, localColorSpaceCache);
const patternIR = shadingFill.getIR();
id = `pattern_${this.idFactory.createObjId()}`;
+ if (this.parsingType3Font) {
+ id = `${this.idFactory.getDocId()}_type3_${id}`;
+ }
localShadingPatternCache.set(shading, id);
- this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]);
+ if (this.parsingType3Font) {
+ this.handler.send("commonobj", [id, "Pattern", patternIR]);
+ } else {
+ this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]);
+ }
}
return id;
}
@@ -9552,9 +9541,6 @@ class PartialEvaluator {
return;
}
if (self.options.ignoreErrors) {
- self.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorXObject
- });
(0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`);
return;
}
@@ -9792,9 +9778,6 @@ class PartialEvaluator {
return;
}
if (self.options.ignoreErrors) {
- self.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorExtGState
- });
(0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`);
return;
}
@@ -9828,9 +9811,6 @@ class PartialEvaluator {
return;
}
if (self.options.ignoreErrors) {
- self.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent
- });
(0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`);
return;
}
@@ -9868,9 +9848,6 @@ class PartialEvaluator {
return;
}
if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
- });
(0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
closePendingRestoreOPS();
return;
@@ -9883,7 +9860,6 @@ class PartialEvaluator {
task,
resources,
stateManager = null,
- combineTextItems = false,
includeMarkedContent = false,
sink,
seenStyles = new Set(),
@@ -9933,11 +9909,12 @@ class PartialEvaluator {
twoLastChars[0] = twoLastChars[1] = " ";
twoLastCharsPos = 0;
}
- const TRACKING_SPACE_FACTOR = 0.1;
+ const TRACKING_SPACE_FACTOR = 0.102;
const NOT_A_SPACE_FACTOR = 0.03;
const NEGATIVE_SPACE_FACTOR = -0.2;
- const SPACE_IN_FLOW_MIN_FACTOR = 0.1;
+ const SPACE_IN_FLOW_MIN_FACTOR = 0.102;
const SPACE_IN_FLOW_MAX_FACTOR = 0.6;
+ const VERTICAL_SHIFT_RATIO = 0.25;
const self = this;
const xref = this.xref;
const showSpacedTextBuffer = [];
@@ -9988,11 +9965,14 @@ class PartialEvaluator {
const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);
const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);
textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;
- textContentItem.trackingSpaceMin = textState.fontSize * TRACKING_SPACE_FACTOR;
- textContentItem.notASpace = textState.fontSize * NOT_A_SPACE_FACTOR;
- textContentItem.negativeSpaceMax = textState.fontSize * NEGATIVE_SPACE_FACTOR;
- textContentItem.spaceInFlowMin = textState.fontSize * SPACE_IN_FLOW_MIN_FACTOR;
- textContentItem.spaceInFlowMax = textState.fontSize * SPACE_IN_FLOW_MAX_FACTOR;
+ const {
+ fontSize
+ } = textState;
+ textContentItem.trackingSpaceMin = fontSize * TRACKING_SPACE_FACTOR;
+ textContentItem.notASpace = fontSize * NOT_A_SPACE_FACTOR;
+ textContentItem.negativeSpaceMax = fontSize * NEGATIVE_SPACE_FACTOR;
+ textContentItem.spaceInFlowMin = fontSize * SPACE_IN_FLOW_MIN_FACTOR;
+ textContentItem.spaceInFlowMax = fontSize * SPACE_IN_FLOW_MAX_FACTOR;
textContentItem.hasEOL = false;
textContentItem.initialized = true;
return textContentItem;
@@ -10056,7 +10036,7 @@ class PartialEvaluator {
if (shiftedX < 0 || shiftedX > viewBox[2] || shiftedY < 0 || shiftedY > viewBox[3]) {
return false;
}
- if (!combineTextItems || !textState.font || !textContentItem.prevTransform) {
+ if (!textState.font || !textContentItem.prevTransform) {
return true;
}
let lastPosX = textContentItem.prevTransform[4];
@@ -10126,6 +10106,9 @@ class PartialEvaluator {
textContentItem.height += advanceY;
}
}
+ if (Math.abs(advanceX) > textContentItem.width * VERTICAL_SHIFT_RATIO) {
+ flushTextContentItem();
+ }
return true;
}
const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale;
@@ -10165,6 +10148,9 @@ class PartialEvaluator {
textContentItem.width += advanceX;
}
}
+ if (Math.abs(advanceY) > textContentItem.height * VERTICAL_SHIFT_RATIO) {
+ flushTextContentItem();
+ }
return true;
}
function buildTextContentItem({
@@ -10517,7 +10503,6 @@ class PartialEvaluator {
task,
resources: xobj.dict.get("Resources") || resources,
stateManager: xObjStateManager,
- combineTextItems,
includeMarkedContent,
sink: sinkWrapper,
seenStyles,
@@ -10794,6 +10779,15 @@ class PartialEvaluator {
code = unicode;
}
break;
+ default:
+ switch (glyphName) {
+ case "f_h":
+ case "f_t":
+ case "T_h":
+ toUnicode[charcode] = glyphName.replaceAll("_", "");
+ continue;
+ }
+ break;
}
if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {
if (baseEncodingName && code === +charcode) {
@@ -10830,14 +10824,19 @@ class PartialEvaluator {
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
useCMap: null
});
- const toUnicode = [];
+ const toUnicode = [],
+ buf = [];
properties.cMap.forEach(function (charcode, cid) {
if (cid > 0xffff) {
throw new _util.FormatError("Max size of CID is 65,535");
}
const ucs2 = ucs2CMap.lookup(cid);
if (ucs2) {
- toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));
+ buf.length = 0;
+ for (let i = 0, ii = ucs2.length; i < ii; i += 2) {
+ buf.push((ucs2.charCodeAt(i) << 8) + ucs2.charCodeAt(i + 1));
+ }
+ toUnicode[charcode] = String.fromCharCode(...buf);
}
});
return new _to_unicode_map.ToUnicodeMap(toUnicode);
@@ -10893,9 +10892,6 @@ class PartialEvaluator {
return null;
}
if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode
- });
(0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
return null;
}
@@ -11190,7 +11186,7 @@ class PartialEvaluator {
if (!(baseFontName instanceof _primitives.Name)) {
throw new _util.FormatError("Base font is not specified");
}
- baseFontName = baseFontName.name.replace(/[,_]/g, "-");
+ baseFontName = baseFontName.name.replaceAll(/[,_]/g, "-");
const metrics = this.getBaseFontMetrics(baseFontName);
const fontNameWoStyle = baseFontName.split("-")[0];
const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic);
@@ -11353,9 +11349,6 @@ class PartialEvaluator {
handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]);
} catch (reason) {
if (evaluatorOptions.ignoreErrors) {
- handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontBuildPath
- });
(0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`);
return;
}
@@ -12840,11 +12833,11 @@ var _ccitt_stream = __w_pdfjs_require__(19);
var _flate_stream = __w_pdfjs_require__(21);
var _jbig2_stream = __w_pdfjs_require__(22);
var _jpeg_stream = __w_pdfjs_require__(25);
-var _jpx_stream = __w_pdfjs_require__(27);
-var _lzw_stream = __w_pdfjs_require__(29);
+var _jpx_stream = __w_pdfjs_require__(28);
+var _lzw_stream = __w_pdfjs_require__(30);
var _stream = __w_pdfjs_require__(8);
-var _predictor_stream = __w_pdfjs_require__(30);
-var _run_length_stream = __w_pdfjs_require__(31);
+var _predictor_stream = __w_pdfjs_require__(31);
+var _run_length_stream = __w_pdfjs_require__(32);
const MAX_LENGTH_TO_CACHE = 1000;
function getInlineImageCacheKey(bytes) {
const strBuf = [],
@@ -17199,7 +17192,7 @@ class JpegStream extends _decode_stream.DecodeStream {
colorTransform: undefined
};
const decodeArr = this.dict.getArray("D", "Decode");
- if (this.forceRGB && Array.isArray(decodeArr)) {
+ if ((this.forceRGBA || this.forceRGB) && Array.isArray(decodeArr)) {
const bitsPerComponent = this.dict.get("BPC", "BitsPerComponent") || 8;
const decodeArrLength = decodeArr.length;
const transform = new Int32Array(decodeArrLength);
@@ -17227,6 +17220,7 @@ class JpegStream extends _decode_stream.DecodeStream {
const data = jpegImage.getData({
width: this.drawWidth,
height: this.drawHeight,
+ forceRGBA: this.forceRGBA,
forceRGB: this.forceRGB,
isSourcePDF: true
});
@@ -17248,6 +17242,7 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.JpegImage = void 0;
var _util = __w_pdfjs_require__(2);
+var _image_utils = __w_pdfjs_require__(27);
var _core_utils = __w_pdfjs_require__(3);
class JpegError extends _util.BaseException {
constructor(msg) {
@@ -18191,6 +18186,18 @@ class JpegImage {
}
return data;
}
+ _convertYccToRgba(data, out) {
+ for (let i = 0, j = 0, length = data.length; i < length; i += 3, j += 4) {
+ const Y = data[i];
+ const Cb = data[i + 1];
+ const Cr = data[i + 2];
+ out[j] = Y - 179.456 + 1.402 * Cr;
+ out[j + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
+ out[j + 2] = Y - 226.816 + 1.772 * Cb;
+ out[j + 3] = 255;
+ }
+ return out;
+ }
_convertYcckToRgb(data) {
let Y, Cb, Cr, k;
let offset = 0;
@@ -18205,6 +18212,19 @@ class JpegImage {
}
return data.subarray(0, offset);
}
+ _convertYcckToRgba(data) {
+ for (let i = 0, length = data.length; i < length; i += 4) {
+ const Y = data[i];
+ const Cb = data[i + 1];
+ const Cr = data[i + 2];
+ const k = data[i + 3];
+ data[i] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
+ data[i + 1] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
+ data[i + 2] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
+ data[i + 3] = 255;
+ }
+ return data;
+ }
_convertYcckToCmyk(data) {
let Y, Cb, Cr;
for (let i = 0, length = data.length; i < length; i += 4) {
@@ -18231,9 +18251,23 @@ class JpegImage {
}
return data.subarray(0, offset);
}
+ _convertCmykToRgba(data) {
+ for (let i = 0, length = data.length; i < length; i += 4) {
+ const c = data[i];
+ const m = data[i + 1];
+ const y = data[i + 2];
+ const k = data[i + 3];
+ data[i] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
+ data[i + 1] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168);
+ data[i + 2] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
+ data[i + 3] = 255;
+ }
+ return data;
+ }
getData({
width,
height,
+ forceRGBA = false,
forceRGB = false,
isSourcePDF = false
}) {
@@ -18241,23 +18275,37 @@ class JpegImage {
throw new JpegError("Unsupported color mode");
}
const data = this._getLinearizedBlockData(width, height, isSourcePDF);
- if (this.numComponents === 1 && forceRGB) {
- const rgbData = new Uint8ClampedArray(data.length * 3);
+ if (this.numComponents === 1 && (forceRGBA || forceRGB)) {
+ const len = data.length * (forceRGBA ? 4 : 3);
+ const rgbaData = new Uint8ClampedArray(len);
let offset = 0;
- for (const grayColor of data) {
- rgbData[offset++] = grayColor;
- rgbData[offset++] = grayColor;
- rgbData[offset++] = grayColor;
+ if (forceRGBA) {
+ (0, _image_utils.grayToRGBA)(data, new Uint32Array(rgbaData.buffer));
+ } else {
+ for (const grayColor of data) {
+ rgbaData[offset++] = grayColor;
+ rgbaData[offset++] = grayColor;
+ rgbaData[offset++] = grayColor;
+ }
}
- return rgbData;
+ return rgbaData;
} else if (this.numComponents === 3 && this._isColorConversionNeeded) {
+ if (forceRGBA) {
+ const rgbaData = new Uint8ClampedArray(data.length / 3 * 4);
+ return this._convertYccToRgba(data, rgbaData);
+ }
return this._convertYccToRgb(data);
} else if (this.numComponents === 4) {
if (this._isColorConversionNeeded) {
+ if (forceRGBA) {
+ return this._convertYcckToRgba(data);
+ }
if (forceRGB) {
return this._convertYcckToRgb(data);
}
return this._convertYcckToCmyk(data);
+ } else if (forceRGBA) {
+ return this._convertCmykToRgba(data);
} else if (forceRGB) {
return this._convertCmykToRgb(data);
}
@@ -18273,12 +18321,130 @@ exports.JpegImage = JpegImage;
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA;
+exports.convertToRGBA = convertToRGBA;
+exports.grayToRGBA = grayToRGBA;
+var _util = __w_pdfjs_require__(2);
+function convertToRGBA(params) {
+ switch (params.kind) {
+ case _util.ImageKind.GRAYSCALE_1BPP:
+ return convertBlackAndWhiteToRGBA(params);
+ case _util.ImageKind.RGB_24BPP:
+ return convertRGBToRGBA(params);
+ }
+ return null;
+}
+function convertBlackAndWhiteToRGBA({
+ src,
+ srcPos = 0,
+ dest,
+ width,
+ height,
+ nonBlackColor = 0xffffffff,
+ inverseDecode = false
+}) {
+ const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
+ const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
+ const widthInSource = width >> 3;
+ const widthRemainder = width & 7;
+ const srcLength = src.length;
+ dest = new Uint32Array(dest.buffer);
+ let destPos = 0;
+ for (let i = 0; i < height; i++) {
+ for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
+ const elem = srcPos < srcLength ? src[srcPos] : 255;
+ dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
+ }
+ if (widthRemainder === 0) {
+ continue;
+ }
+ const elem = srcPos < srcLength ? src[srcPos++] : 255;
+ for (let j = 0; j < widthRemainder; j++) {
+ dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
+ }
+ }
+ return {
+ srcPos,
+ destPos
+ };
+}
+function convertRGBToRGBA({
+ src,
+ srcPos = 0,
+ dest,
+ destPos = 0,
+ width,
+ height
+}) {
+ let i = 0;
+ const len32 = src.length >> 2;
+ const src32 = new Uint32Array(src.buffer, srcPos, len32);
+ if (_util.FeatureTest.isLittleEndian) {
+ for (; i < len32 - 2; i += 3, destPos += 4) {
+ const s1 = src32[i];
+ const s2 = src32[i + 1];
+ const s3 = src32[i + 2];
+ dest[destPos] = s1 | 0xff000000;
+ dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
+ dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
+ dest[destPos + 3] = s3 >>> 8 | 0xff000000;
+ }
+ for (let j = i * 4, jj = src.length; j < jj; j += 3) {
+ dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
+ }
+ } else {
+ for (; i < len32 - 2; i += 3, destPos += 4) {
+ const s1 = src32[i];
+ const s2 = src32[i + 1];
+ const s3 = src32[i + 2];
+ dest[destPos] = s1 | 0xff;
+ dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
+ dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
+ dest[destPos + 3] = s3 << 8 | 0xff;
+ }
+ for (let j = i * 4, jj = src.length; j < jj; j += 3) {
+ dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
+ }
+ }
+ return {
+ srcPos,
+ destPos
+ };
+}
+function grayToRGBA(src, dest) {
+ if (_util.FeatureTest.isLittleEndian) {
+ for (let i = 0, ii = src.length; i < ii; i++) {
+ dest[i] = src[i] * 0x10101 | 0xff000000;
+ }
+ } else {
+ for (let i = 0, ii = src.length; i < ii; i++) {
+ dest[i] = src[i] * 0x1010100 | 0x000000ff;
+ }
+ }
+}
+
+/***/ }),
+/* 28 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.JpxStream = void 0;
var _decode_stream = __w_pdfjs_require__(17);
-var _jpx = __w_pdfjs_require__(28);
+var _jpx = __w_pdfjs_require__(29);
var _util = __w_pdfjs_require__(2);
class JpxStream extends _decode_stream.DecodeStream {
constructor(stream, maybeLength, params) {
@@ -18333,7 +18499,7 @@ class JpxStream extends _decode_stream.DecodeStream {
exports.JpxStream = JpxStream;
/***/ }),
-/* 28 */
+/* 29 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -20261,7 +20427,7 @@ class ReversibleTransform extends Transform {
}
/***/ }),
-/* 29 */
+/* 30 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -20388,7 +20554,7 @@ class LZWStream extends _decode_stream.DecodeStream {
exports.LZWStream = LZWStream;
/***/ }),
-/* 30 */
+/* 31 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -20589,7 +20755,7 @@ class PredictorStream extends _decode_stream.DecodeStream {
exports.PredictorStream = PredictorStream;
/***/ }),
-/* 31 */
+/* 32 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -20636,7 +20802,7 @@ class RunLengthStream extends _decode_stream.DecodeStream {
exports.RunLengthStream = RunLengthStream;
/***/ }),
-/* 32 */
+/* 33 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -20646,22 +20812,22 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.Font = exports.ErrorFont = void 0;
var _util = __w_pdfjs_require__(2);
-var _cff_parser = __w_pdfjs_require__(33);
-var _fonts_utils = __w_pdfjs_require__(36);
-var _unicode = __w_pdfjs_require__(38);
-var _glyphlist = __w_pdfjs_require__(37);
-var _encodings = __w_pdfjs_require__(35);
-var _standard_fonts = __w_pdfjs_require__(39);
-var _to_unicode_map = __w_pdfjs_require__(40);
-var _cff_font = __w_pdfjs_require__(41);
-var _font_renderer = __w_pdfjs_require__(42);
-var _metrics = __w_pdfjs_require__(43);
-var _glyf = __w_pdfjs_require__(44);
+var _cff_parser = __w_pdfjs_require__(34);
+var _fonts_utils = __w_pdfjs_require__(37);
+var _unicode = __w_pdfjs_require__(39);
+var _glyphlist = __w_pdfjs_require__(38);
+var _encodings = __w_pdfjs_require__(36);
+var _standard_fonts = __w_pdfjs_require__(40);
+var _to_unicode_map = __w_pdfjs_require__(41);
+var _cff_font = __w_pdfjs_require__(42);
+var _font_renderer = __w_pdfjs_require__(43);
+var _metrics = __w_pdfjs_require__(44);
+var _glyf = __w_pdfjs_require__(45);
var _cmap = __w_pdfjs_require__(14);
-var _opentype_file_builder = __w_pdfjs_require__(45);
+var _opentype_file_builder = __w_pdfjs_require__(46);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
-var _type1_font = __w_pdfjs_require__(46);
+var _type1_font = __w_pdfjs_require__(47);
const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
const PDF_GLYPH_SPACE_UNITS = 1000;
const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "isInvalidPDFjsFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"];
@@ -21191,7 +21357,7 @@ function createPostTable(properties) {
return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00";
}
function createPostscriptName(name) {
- return name.replace(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63);
+ return name.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63);
}
function createNameTable(name, proto) {
if (!proto) {
@@ -21241,7 +21407,7 @@ class Font {
this._glyphCache = Object.create(null);
let isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif);
if (!isSerifFont && !properties.isSimulatedFlags) {
- const baseName = name.replace(/[,_]/g, "-").split("-")[0],
+ const baseName = name.replaceAll(/[,_]/g, "-").split("-")[0],
serifFonts = (0, _standard_fonts.getSerifFonts)();
for (const namePart of baseName.split("+")) {
if (serifFonts[namePart]) {
@@ -21563,7 +21729,7 @@ class Font {
const [nameTable] = readNameTable(potentialTables.name);
for (let j = 0, jj = nameTable.length; j < jj; j++) {
for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
- const nameEntry = nameTable[j][k] && nameTable[j][k].replace(/\s/g, "");
+ const nameEntry = nameTable[j][k] && nameTable[j][k].replaceAll(/\s/g, "");
if (!nameEntry) {
continue;
}
@@ -23060,7 +23226,7 @@ class ErrorFont {
exports.ErrorFont = ErrorFont;
/***/ }),
-/* 33 */
+/* 34 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -23070,8 +23236,8 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0;
var _util = __w_pdfjs_require__(2);
-var _charsets = __w_pdfjs_require__(34);
-var _encodings = __w_pdfjs_require__(35);
+var _charsets = __w_pdfjs_require__(35);
+var _encodings = __w_pdfjs_require__(36);
const MAX_SUBR_NESTING = 10;
const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
exports.CFFStandardStrings = CFFStandardStrings;
@@ -24552,7 +24718,7 @@ class CFFCompiler {
exports.CFFCompiler = CFFCompiler;
/***/ }),
-/* 34 */
+/* 35 */
/***/ ((__unused_webpack_module, exports) => {
@@ -24569,7 +24735,7 @@ const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperi
exports.ExpertSubsetCharset = ExpertSubsetCharset;
/***/ }),
-/* 35 */
+/* 36 */
/***/ ((__unused_webpack_module, exports) => {
@@ -24614,7 +24780,7 @@ function getEncoding(encodingName) {
}
/***/ }),
-/* 36 */
+/* 37 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -24626,9 +24792,9 @@ exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontF
exports.normalizeFontName = normalizeFontName;
exports.recoverGlyphName = recoverGlyphName;
exports.type1FontGlyphMapping = type1FontGlyphMapping;
-var _encodings = __w_pdfjs_require__(35);
-var _glyphlist = __w_pdfjs_require__(37);
-var _unicode = __w_pdfjs_require__(38);
+var _encodings = __w_pdfjs_require__(36);
+var _glyphlist = __w_pdfjs_require__(38);
+var _unicode = __w_pdfjs_require__(39);
var _util = __w_pdfjs_require__(2);
const SEAC_ANALYSIS_ENABLED = true;
exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
@@ -24725,11 +24891,11 @@ function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
return charCodeToGlyphId;
}
function normalizeFontName(name) {
- return name.replace(/[,_]/g, "-").replace(/\s/g, "");
+ return name.replaceAll(/[,_]/g, "-").replaceAll(/\s/g, "");
}
/***/ }),
-/* 37 */
+/* 38 */
/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {
__w_pdfjs_require__.r(__webpack_exports__);
@@ -33808,7 +33974,7 @@ const getDingbatsGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.
/***/ }),
-/* 38 */
+/* 39 */
/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {
__w_pdfjs_require__.r(__webpack_exports__);
@@ -37191,7 +37357,7 @@ function clearUnicodeCaches() {
/***/ }),
-/* 39 */
+/* 40 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -37203,7 +37369,7 @@ exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandar
exports.getStandardFontName = getStandardFontName;
exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0;
var _core_utils = __w_pdfjs_require__(3);
-var _fonts_utils = __w_pdfjs_require__(36);
+var _fonts_utils = __w_pdfjs_require__(37);
const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
t["Times-Roman"] = "Times-Roman";
t.Helvetica = "Helvetica";
@@ -38052,7 +38218,7 @@ function getStandardFontName(name) {
}
/***/ }),
-/* 40 */
+/* 41 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -38131,7 +38297,7 @@ class IdentityToUnicodeMap {
exports.IdentityToUnicodeMap = IdentityToUnicodeMap;
/***/ }),
-/* 41 */
+/* 42 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -38140,8 +38306,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.CFFFont = void 0;
-var _cff_parser = __w_pdfjs_require__(33);
-var _fonts_utils = __w_pdfjs_require__(36);
+var _cff_parser = __w_pdfjs_require__(34);
+var _fonts_utils = __w_pdfjs_require__(37);
var _util = __w_pdfjs_require__(2);
class CFFFont {
constructor(file, properties) {
@@ -38243,7 +38409,7 @@ class CFFFont {
exports.CFFFont = CFFFont;
/***/ }),
-/* 42 */
+/* 43 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -38253,9 +38419,9 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.FontRendererFactory = void 0;
var _util = __w_pdfjs_require__(2);
-var _cff_parser = __w_pdfjs_require__(33);
-var _glyphlist = __w_pdfjs_require__(37);
-var _encodings = __w_pdfjs_require__(35);
+var _cff_parser = __w_pdfjs_require__(34);
+var _glyphlist = __w_pdfjs_require__(38);
+var _encodings = __w_pdfjs_require__(36);
var _stream = __w_pdfjs_require__(8);
function getUint32(data, offset) {
return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
@@ -39060,7 +39226,7 @@ class FontRendererFactory {
exports.FontRendererFactory = FontRendererFactory;
/***/ }),
-/* 43 */
+/* 44 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -42098,7 +42264,7 @@ const getFontBasicMetrics = (0, _core_utils.getLookupTableFactory)(function (t)
exports.getFontBasicMetrics = getFontBasicMetrics;
/***/ }),
-/* 44 */
+/* 45 */
/***/ ((__unused_webpack_module, exports) => {
@@ -42643,7 +42809,7 @@ class CompositeGlyph {
}
/***/ }),
-/* 45 */
+/* 46 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -42759,7 +42925,7 @@ class OpenTypeFileBuilder {
exports.OpenTypeFileBuilder = OpenTypeFileBuilder;
/***/ }),
-/* 46 */
+/* 47 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -42768,12 +42934,12 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.Type1Font = void 0;
-var _cff_parser = __w_pdfjs_require__(33);
+var _cff_parser = __w_pdfjs_require__(34);
var _util = __w_pdfjs_require__(2);
-var _fonts_utils = __w_pdfjs_require__(36);
+var _fonts_utils = __w_pdfjs_require__(37);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
-var _type1_parser = __w_pdfjs_require__(47);
+var _type1_parser = __w_pdfjs_require__(48);
function findBlock(streamBytes, signature, startIndex) {
const streamBytesLength = streamBytes.length;
const signatureLength = signature.length;
@@ -43045,7 +43211,7 @@ class Type1Font {
exports.Type1Font = Type1Font;
/***/ }),
-/* 47 */
+/* 48 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -43054,7 +43220,7 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.Type1Parser = void 0;
-var _encodings = __w_pdfjs_require__(35);
+var _encodings = __w_pdfjs_require__(36);
var _core_utils = __w_pdfjs_require__(3);
var _stream = __w_pdfjs_require__(8);
var _util = __w_pdfjs_require__(2);
@@ -43242,7 +43408,7 @@ class Type1CharString {
subrNumber = this.stack.pop();
const numArgs = this.stack.pop();
if (subrNumber === 0 && numArgs === 3) {
- const flexArgs = this.stack.splice(this.stack.length - 17, 17);
+ const flexArgs = this.stack.splice(-17, 17);
this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);
error = this.executeCommand(13, COMMAND_MAP.flex, true);
this.flexing = false;
@@ -43620,7 +43786,7 @@ class Type1Parser {
exports.Type1Parser = Type1Parser;
/***/ }),
-/* 48 */
+/* 49 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -43647,7 +43813,7 @@ class Pattern {
constructor() {
(0, _util.unreachable)("Cannot initialize Pattern.");
}
- static parseShading(shading, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) {
+ static parseShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache) {
const dict = shading instanceof _base_stream.BaseStream ? shading.dict : shading;
const type = dict.get("ShadingType");
try {
@@ -43667,9 +43833,6 @@ class Pattern {
if (ex instanceof _core_utils.MissingDataException) {
throw ex;
}
- handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.shadingPattern
- });
(0, _util.warn)(ex);
return new DummyShading();
}
@@ -44407,7 +44570,7 @@ function getTilingPatternIR(operatorList, dict, color) {
}
/***/ }),
-/* 49 */
+/* 50 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -44417,14 +44580,14 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.getXfaFontDict = getXfaFontDict;
exports.getXfaFontName = getXfaFontName;
-var _calibri_factors = __w_pdfjs_require__(50);
+var _calibri_factors = __w_pdfjs_require__(51);
var _primitives = __w_pdfjs_require__(4);
-var _helvetica_factors = __w_pdfjs_require__(51);
-var _liberationsans_widths = __w_pdfjs_require__(52);
-var _myriadpro_factors = __w_pdfjs_require__(53);
-var _segoeui_factors = __w_pdfjs_require__(54);
+var _helvetica_factors = __w_pdfjs_require__(52);
+var _liberationsans_widths = __w_pdfjs_require__(53);
+var _myriadpro_factors = __w_pdfjs_require__(54);
+var _segoeui_factors = __w_pdfjs_require__(55);
var _core_utils = __w_pdfjs_require__(3);
-var _fonts_utils = __w_pdfjs_require__(36);
+var _fonts_utils = __w_pdfjs_require__(37);
const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = {
name: "LiberationSans-Regular",
@@ -44620,7 +44783,7 @@ function getXfaFontDict(name) {
}
/***/ }),
-/* 50 */
+/* 51 */
/***/ ((__unused_webpack_module, exports) => {
@@ -44659,7 +44822,7 @@ const CalibriRegularMetrics = {
exports.CalibriRegularMetrics = CalibriRegularMetrics;
/***/ }),
-/* 51 */
+/* 52 */
/***/ ((__unused_webpack_module, exports) => {
@@ -44698,7 +44861,7 @@ const HelveticaRegularMetrics = {
exports.HelveticaRegularMetrics = HelveticaRegularMetrics;
/***/ }),
-/* 52 */
+/* 53 */
/***/ ((__unused_webpack_module, exports) => {
@@ -44725,7 +44888,7 @@ const LiberationSansRegularMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39
exports.LiberationSansRegularMapping = LiberationSansRegularMapping;
/***/ }),
-/* 53 */
+/* 54 */
/***/ ((__unused_webpack_module, exports) => {
@@ -44764,7 +44927,7 @@ const MyriadProRegularMetrics = {
exports.MyriadProRegularMetrics = MyriadProRegularMetrics;
/***/ }),
-/* 54 */
+/* 55 */
/***/ ((__unused_webpack_module, exports) => {
@@ -44803,7 +44966,7 @@ const SegoeuiRegularMetrics = {
exports.SegoeuiRegularMetrics = SegoeuiRegularMetrics;
/***/ }),
-/* 55 */
+/* 56 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -44815,9 +44978,9 @@ exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFa
exports.isPDFFunction = isPDFFunction;
var _primitives = __w_pdfjs_require__(4);
var _util = __w_pdfjs_require__(2);
-var _ps_parser = __w_pdfjs_require__(56);
+var _ps_parser = __w_pdfjs_require__(57);
var _base_stream = __w_pdfjs_require__(5);
-var _image_utils = __w_pdfjs_require__(57);
+var _image_utils = __w_pdfjs_require__(58);
class PDFFunctionFactory {
constructor({
xref,
@@ -45236,9 +45399,7 @@ class PDFFunction {
}
function isPDFFunction(v) {
let fnDict;
- if (typeof v !== "object") {
- return false;
- } else if (v instanceof _primitives.Dict) {
+ if (v instanceof _primitives.Dict) {
fnDict = v;
} else if (v instanceof _base_stream.BaseStream) {
fnDict = v.dict;
@@ -45347,8 +45508,13 @@ class PostScriptEvaluator {
}
break;
case "atan":
+ b = stack.pop();
a = stack.pop();
- stack.push(Math.atan(a));
+ a = Math.atan2(a, b) / Math.PI * 180;
+ if (a < 0) {
+ a += 360;
+ }
+ stack.push(a);
break;
case "bitshift":
b = stack.pop();
@@ -45369,7 +45535,7 @@ class PostScriptEvaluator {
break;
case "cos":
a = stack.pop();
- stack.push(Math.cos(a));
+ stack.push(Math.cos(a % 360 / 180 * Math.PI));
break;
case "cvi":
a = stack.pop() | 0;
@@ -45492,7 +45658,7 @@ class PostScriptEvaluator {
break;
case "sin":
a = stack.pop();
- stack.push(Math.sin(a));
+ stack.push(Math.sin(a % 360 / 180 * Math.PI));
break;
case "sqrt":
a = stack.pop();
@@ -45855,7 +46021,7 @@ class PostScriptCompiler {
exports.PostScriptCompiler = PostScriptCompiler;
/***/ }),
-/* 56 */
+/* 57 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -46059,7 +46225,7 @@ class PostScriptLexer {
exports.PostScriptLexer = PostScriptLexer;
/***/ }),
-/* 57 */
+/* 58 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -46203,7 +46369,7 @@ class GlobalImageCache {
return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10);
}
static get MAX_BYTE_SIZE() {
- return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6);
+ return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 5 * _util.MAX_IMAGE_SIZE_TO_CACHE);
}
constructor() {
this._refCache = new _primitives.RefSetCache();
@@ -46292,7 +46458,7 @@ class GlobalImageCache {
exports.GlobalImageCache = GlobalImageCache;
/***/ }),
-/* 58 */
+/* 59 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -46539,7 +46705,261 @@ function bidi(str, startLevel = -1, vertical = false) {
}
/***/ }),
-/* 59 */
+/* 60 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ImageResizer = void 0;
+var _util = __w_pdfjs_require__(2);
+const MIN_IMAGE_DIM = 2048;
+const MAX_IMAGE_DIM = 65537;
+const MAX_ERROR = 128;
+class ImageResizer {
+ constructor(imgData, isMask) {
+ this._imgData = imgData;
+ this._isMask = isMask;
+ }
+ static needsToBeResized(width, height) {
+ if (width <= this._goodSquareLength && height <= this._goodSquareLength) {
+ return false;
+ }
+ const {
+ MAX_DIM
+ } = this;
+ if (width > MAX_DIM || height > MAX_DIM) {
+ return true;
+ }
+ const area = width * height;
+ if (this._hasMaxArea) {
+ return area > this.MAX_AREA;
+ }
+ if (area < this._goodSquareLength ** 2) {
+ return false;
+ }
+ if (this._areGoodDims(width, height)) {
+ this._goodSquareLength = Math.max(this._goodSquareLength, Math.floor(Math.sqrt(width * height)));
+ return false;
+ }
+ this._goodSquareLength = this._guessMax(this._goodSquareLength, MAX_DIM, MAX_ERROR, 0);
+ const maxArea = this.MAX_AREA = this._goodSquareLength ** 2;
+ return area > maxArea;
+ }
+ static get MAX_DIM() {
+ return (0, _util.shadow)(this, "MAX_DIM", this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1));
+ }
+ static get MAX_AREA() {
+ this._hasMaxArea = true;
+ return (0, _util.shadow)(this, "MAX_AREA", this._guessMax(ImageResizer._goodSquareLength, this.MAX_DIM, MAX_ERROR, 0) ** 2);
+ }
+ static set MAX_AREA(area) {
+ if (area >= 0) {
+ this._hasMaxArea = true;
+ (0, _util.shadow)(this, "MAX_AREA", area);
+ }
+ }
+ static setMaxArea(area) {
+ if (!this._hasMaxArea) {
+ this.MAX_AREA = area >> 2;
+ }
+ }
+ static _areGoodDims(width, height) {
+ try {
+ const canvas = new OffscreenCanvas(width, height);
+ const ctx = canvas.getContext("2d");
+ ctx.fillRect(0, 0, 1, 1);
+ const opacity = ctx.getImageData(0, 0, 1, 1).data[3];
+ canvas.width = canvas.height = 1;
+ return opacity !== 0;
+ } catch (e) {
+ return false;
+ }
+ }
+ static _guessMax(start, end, tolerance, defaultHeight) {
+ while (start + tolerance + 1 < end) {
+ const middle = Math.floor((start + end) / 2);
+ const height = defaultHeight || middle;
+ if (this._areGoodDims(middle, height)) {
+ start = middle;
+ } else {
+ end = middle;
+ }
+ }
+ return start;
+ }
+ static async createImage(imgData, isMask = false) {
+ return new ImageResizer(imgData, isMask)._createImage();
+ }
+ async _createImage() {
+ const data = this._encodeBMP();
+ const blob = new Blob([data.buffer], {
+ type: "image/bmp"
+ });
+ const bitmapPromise = createImageBitmap(blob);
+ const {
+ MAX_AREA,
+ MAX_DIM
+ } = ImageResizer;
+ const {
+ _imgData: imgData
+ } = this;
+ const {
+ width,
+ height
+ } = imgData;
+ const minFactor = Math.max(width / MAX_DIM, height / MAX_DIM, Math.sqrt(width * height / MAX_AREA));
+ const firstFactor = Math.max(minFactor, 2);
+ const factor = Math.round(10 * (minFactor + 1.25)) / 10 / firstFactor;
+ const N = Math.floor(Math.log2(factor));
+ const steps = new Array(N + 2).fill(2);
+ steps[0] = firstFactor;
+ steps.splice(-1, 1, factor / (1 << N));
+ let newWidth = width;
+ let newHeight = height;
+ let bitmap = await bitmapPromise;
+ for (const step of steps) {
+ const prevWidth = newWidth;
+ const prevHeight = newHeight;
+ newWidth = Math.floor(newWidth / step) - 1;
+ newHeight = Math.floor(newHeight / step) - 1;
+ const canvas = new OffscreenCanvas(newWidth, newHeight);
+ const ctx = canvas.getContext("2d");
+ ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);
+ bitmap = canvas.transferToImageBitmap();
+ }
+ imgData.data = null;
+ imgData.bitmap = bitmap;
+ imgData.width = newWidth;
+ imgData.height = newHeight;
+ return imgData;
+ }
+ _encodeBMP() {
+ const {
+ width,
+ height,
+ kind
+ } = this._imgData;
+ let data = this._imgData.data;
+ let bitPerPixel;
+ let colorTable = new Uint8Array(0);
+ let maskTable = colorTable;
+ let compression = 0;
+ switch (kind) {
+ case _util.ImageKind.GRAYSCALE_1BPP:
+ {
+ bitPerPixel = 1;
+ colorTable = new Uint8Array(this._isMask ? [255, 255, 255, 255, 0, 0, 0, 0] : [0, 0, 0, 0, 255, 255, 255, 255]);
+ const rowLen = width + 7 >> 3;
+ const rowSize = rowLen + 3 & -4;
+ if (rowLen !== rowSize) {
+ const newData = new Uint8Array(rowSize * height);
+ let k = 0;
+ for (let i = 0, ii = height * rowLen; i < ii; i += rowLen, k += rowSize) {
+ newData.set(data.subarray(i, i + rowLen), k);
+ }
+ data = newData;
+ }
+ break;
+ }
+ case _util.ImageKind.RGB_24BPP:
+ {
+ bitPerPixel = 24;
+ if (width & 3) {
+ const rowLen = 3 * width;
+ const rowSize = rowLen + 3 & -4;
+ const extraLen = rowSize - rowLen;
+ const newData = new Uint8Array(rowSize * height);
+ let k = 0;
+ for (let i = 0, ii = height * rowLen; i < ii; i += rowLen) {
+ const row = data.subarray(i, i + rowLen);
+ for (let j = 0; j < rowLen; j += 3) {
+ newData[k++] = row[j + 2];
+ newData[k++] = row[j + 1];
+ newData[k++] = row[j];
+ }
+ k += extraLen;
+ }
+ data = newData;
+ } else {
+ for (let i = 0, ii = data.length; i < ii; i += 3) {
+ const tmp = data[i];
+ data[i] = data[i + 2];
+ data[i + 2] = tmp;
+ }
+ }
+ break;
+ }
+ case _util.ImageKind.RGBA_32BPP:
+ bitPerPixel = 32;
+ compression = 3;
+ maskTable = new Uint8Array(4 + 4 + 4 + 4 + 52);
+ const view = new DataView(maskTable.buffer);
+ if (_util.FeatureTest.isLittleEndian) {
+ view.setUint32(0, 0x000000ff, true);
+ view.setUint32(4, 0x0000ff00, true);
+ view.setUint32(8, 0x00ff0000, true);
+ view.setUint32(12, 0xff000000, true);
+ } else {
+ view.setUint32(0, 0xff000000, true);
+ view.setUint32(4, 0x00ff0000, true);
+ view.setUint32(8, 0x0000ff00, true);
+ view.setUint32(12, 0x000000ff, true);
+ }
+ break;
+ default:
+ throw new Error("invalid format");
+ }
+ let i = 0;
+ const headerLength = 40 + maskTable.length;
+ const fileLength = 14 + headerLength + colorTable.length + data.length;
+ const bmpData = new Uint8Array(fileLength);
+ const view = new DataView(bmpData.buffer);
+ view.setUint16(i, 0x4d42, true);
+ i += 2;
+ view.setUint32(i, fileLength, true);
+ i += 4;
+ view.setUint32(i, 0, true);
+ i += 4;
+ view.setUint32(i, 14 + headerLength + colorTable.length, true);
+ i += 4;
+ view.setUint32(i, headerLength, true);
+ i += 4;
+ view.setInt32(i, width, true);
+ i += 4;
+ view.setInt32(i, -height, true);
+ i += 4;
+ view.setUint16(i, 1, true);
+ i += 2;
+ view.setUint16(i, bitPerPixel, true);
+ i += 2;
+ view.setUint32(i, compression, true);
+ i += 4;
+ view.setUint32(i, 0, true);
+ i += 4;
+ view.setInt32(i, 0, true);
+ i += 4;
+ view.setInt32(i, 0, true);
+ i += 4;
+ view.setUint32(i, colorTable.length / 4, true);
+ i += 4;
+ view.setUint32(i, 0, true);
+ i += 4;
+ bmpData.set(maskTable, i);
+ i += maskTable.length;
+ bmpData.set(colorTable, i);
+ i += colorTable.length;
+ bmpData.set(data, i);
+ return bmpData;
+ }
+}
+exports.ImageResizer = ImageResizer;
+ImageResizer._goodSquareLength = MIN_IMAGE_DIM;
+
+/***/ }),
+/* 61 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -46643,7 +47063,7 @@ class MurmurHash3_64 {
exports.MurmurHash3_64 = MurmurHash3_64;
/***/ }),
-/* 60 */
+/* 62 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -46748,13 +47168,22 @@ addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInli
offset -= imgRowSize;
}
}
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
- argsArray.splice(iFirstSave, count * 4, [{
+ const img = {
width: imgWidth,
- height: imgHeight,
- kind: _util.ImageKind.RGBA_32BPP,
- data: imgData
- }, map]);
+ height: imgHeight
+ };
+ if (context.isOffscreenCanvasSupported) {
+ const canvas = new OffscreenCanvas(imgWidth, imgHeight);
+ const ctx = canvas.getContext("2d");
+ ctx.putImageData(new ImageData(new Uint8ClampedArray(imgData.buffer), imgWidth, imgHeight), 0, 0);
+ img.bitmap = canvas.transferToImageBitmap();
+ img.data = null;
+ } else {
+ img.kind = _util.ImageKind.RGBA_32BPP;
+ img.data = imgData;
+ }
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
+ argsArray.splice(iFirstSave, count * 4, [img, map]);
return iFirstSave + 1;
});
addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
@@ -46982,11 +47411,15 @@ class QueueOptimizer extends NullOptimizer {
this.context = {
iCurr: 0,
fnArray: queue.fnArray,
- argsArray: queue.argsArray
+ argsArray: queue.argsArray,
+ isOffscreenCanvasSupported: false
};
this.match = null;
this.lastProcessed = 0;
}
+ set isOffscreenCanvasSupported(value) {
+ this.context.isOffscreenCanvasSupported = value;
+ }
_optimize() {
const fnArray = this.queue.fnArray;
let i = this.lastProcessed,
@@ -47067,6 +47500,9 @@ class OperatorList {
this.weight = 0;
this._resolved = streamSink ? null : Promise.resolve();
}
+ set isOffscreenCanvasSupported(value) {
+ this.optimizer.isOffscreenCanvasSupported = value;
+ }
get length() {
return this.argsArray.length;
}
@@ -47169,7 +47605,7 @@ class OperatorList {
exports.OperatorList = OperatorList;
/***/ }),
-/* 61 */
+/* 63 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -47179,12 +47615,13 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.PDFImage = void 0;
var _util = __w_pdfjs_require__(2);
-var _image_utils = __w_pdfjs_require__(62);
+var _image_utils = __w_pdfjs_require__(27);
var _base_stream = __w_pdfjs_require__(5);
var _colorspace = __w_pdfjs_require__(12);
var _decode_stream = __w_pdfjs_require__(17);
+var _image_resizer = __w_pdfjs_require__(60);
var _jpeg_stream = __w_pdfjs_require__(25);
-var _jpx = __w_pdfjs_require__(28);
+var _jpx = __w_pdfjs_require__(29);
var _primitives = __w_pdfjs_require__(4);
function decodeAndClamp(value, addend, coefficient, max) {
value = addend + value * coefficient;
@@ -47435,14 +47872,14 @@ class PDFImage {
interpolate
};
}
- static createMask({
+ static async createMask({
imgArray,
width,
height,
imageIsFromDecodeStream,
inverseDecode,
interpolate,
- isOffscreenCanvasSupported = true
+ isOffscreenCanvasSupported = false
}) {
const isSingleOpaquePixel = width === 1 && height === 1 && inverseDecode === (imgArray.length === 0 || !!(imgArray[0] & 128));
if (isSingleOpaquePixel) {
@@ -47450,15 +47887,34 @@ class PDFImage {
isSingleOpaquePixel
};
}
- if (isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported) {
+ if (isOffscreenCanvasSupported) {
+ if (_image_resizer.ImageResizer.needsToBeResized(width, height)) {
+ const data = new Uint8ClampedArray(width * height * 4);
+ (0, _image_utils.convertBlackAndWhiteToRGBA)({
+ src: imgArray,
+ dest: data,
+ width,
+ height,
+ nonBlackColor: 0,
+ inverseDecode
+ });
+ return _image_resizer.ImageResizer.createImage({
+ kind: _util.ImageKind.RGBA_32BPP,
+ data,
+ width,
+ height,
+ interpolate
+ });
+ }
const canvas = new OffscreenCanvas(width, height);
const ctx = canvas.getContext("2d");
const imgData = ctx.createImageData(width, height);
- (0, _image_utils.applyMaskImageData)({
+ (0, _image_utils.convertBlackAndWhiteToRGBA)({
src: imgArray,
dest: imgData.data,
width,
height,
+ nonBlackColor: 0,
inverseDecode
});
ctx.putImageData(imgData, 0, 0);
@@ -47661,7 +48117,7 @@ class PDFImage {
buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
}
}
- createImageData(forceRGBA = false) {
+ async createImageData(forceRGBA = false, isOffscreenCanvasSupported = false) {
const drawWidth = this.drawWidth;
const drawHeight = this.drawHeight;
const imgData = {
@@ -47676,6 +48132,7 @@ class PDFImage {
const originalHeight = this.height;
const bpc = this.bpc;
const rowBytes = originalWidth * numComps * bpc + 7 >> 3;
+ const mustBeResized = isOffscreenCanvasSupported && _image_resizer.ImageResizer.needsToBeResized(drawWidth, drawHeight);
if (!forceRGBA) {
let kind;
if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
@@ -47684,8 +48141,21 @@ class PDFImage {
kind = _util.ImageKind.RGB_24BPP;
}
if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {
+ const data = this.getImageBytes(originalHeight * rowBytes, {});
+ if (isOffscreenCanvasSupported) {
+ if (mustBeResized) {
+ return _image_resizer.ImageResizer.createImage({
+ data,
+ kind,
+ width: drawWidth,
+ height: drawHeight,
+ interpolate: this.interpolate
+ }, this.needsDecode);
+ }
+ return this.createBitmap(kind, originalWidth, originalHeight, data);
+ }
imgData.kind = kind;
- imgData.data = this.getImageBytes(originalHeight * rowBytes, {});
+ imgData.data = data;
if (this.needsDecode) {
(0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale.");
const buffer = imgData.data;
@@ -47697,18 +48167,46 @@ class PDFImage {
}
if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
let imageLength = originalHeight * rowBytes;
- switch (this.colorSpace.name) {
- case "DeviceGray":
- imageLength *= 3;
- case "DeviceRGB":
- case "DeviceCMYK":
- imgData.kind = _util.ImageKind.RGB_24BPP;
- imgData.data = this.getImageBytes(imageLength, {
+ if (isOffscreenCanvasSupported && !mustBeResized) {
+ let isHandled = false;
+ switch (this.colorSpace.name) {
+ case "DeviceGray":
+ imageLength *= 4;
+ isHandled = true;
+ break;
+ case "DeviceRGB":
+ imageLength = imageLength / 3 * 4;
+ isHandled = true;
+ break;
+ case "DeviceCMYK":
+ isHandled = true;
+ break;
+ }
+ if (isHandled) {
+ const rgba = this.getImageBytes(imageLength, {
drawWidth,
drawHeight,
- forceRGB: true
+ forceRGBA: true
});
- return imgData;
+ return this.createBitmap(_util.ImageKind.RGBA_32BPP, drawWidth, drawHeight, rgba);
+ }
+ } else {
+ switch (this.colorSpace.name) {
+ case "DeviceGray":
+ imageLength *= 3;
+ case "DeviceRGB":
+ case "DeviceCMYK":
+ imgData.kind = _util.ImageKind.RGB_24BPP;
+ imgData.data = this.getImageBytes(imageLength, {
+ drawWidth,
+ drawHeight,
+ forceRGB: true
+ });
+ if (mustBeResized) {
+ return _image_resizer.ImageResizer.createImage(imgData);
+ }
+ return imgData;
+ }
}
}
}
@@ -47718,24 +48216,54 @@ class PDFImage {
const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
const comps = this.getComponents(imgArray);
let alpha01, maybeUndoPreblend;
+ let canvas, ctx, canvasImgData, data;
+ if (isOffscreenCanvasSupported && !mustBeResized) {
+ canvas = new OffscreenCanvas(drawWidth, drawHeight);
+ ctx = canvas.getContext("2d");
+ canvasImgData = ctx.createImageData(drawWidth, drawHeight);
+ data = canvasImgData.data;
+ }
+ imgData.kind = _util.ImageKind.RGBA_32BPP;
if (!forceRGBA && !this.smask && !this.mask) {
- imgData.kind = _util.ImageKind.RGB_24BPP;
- imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
- alpha01 = 0;
+ if (!isOffscreenCanvasSupported || mustBeResized) {
+ imgData.kind = _util.ImageKind.RGB_24BPP;
+ data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
+ alpha01 = 0;
+ } else {
+ const arr = new Uint32Array(data.buffer);
+ arr.fill(_util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff);
+ alpha01 = 1;
+ }
maybeUndoPreblend = false;
} else {
- imgData.kind = _util.ImageKind.RGBA_32BPP;
- imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
+ if (!isOffscreenCanvasSupported || mustBeResized) {
+ data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
+ }
alpha01 = 1;
maybeUndoPreblend = true;
- this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);
+ this.fillOpacity(data, drawWidth, drawHeight, actualHeight, comps);
}
if (this.needsDecode) {
this.decodeBuffer(comps);
}
- this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);
+ this.colorSpace.fillRgb(data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);
if (maybeUndoPreblend) {
- this.undoPreblend(imgData.data, drawWidth, actualHeight);
+ this.undoPreblend(data, drawWidth, actualHeight);
+ }
+ if (isOffscreenCanvasSupported && !mustBeResized) {
+ ctx.putImageData(canvasImgData, 0, 0);
+ const bitmap = canvas.transferToImageBitmap();
+ return {
+ data: null,
+ width: drawWidth,
+ height: drawHeight,
+ bitmap,
+ interpolate: this.interpolate
+ };
+ }
+ imgData.data = data;
+ if (mustBeResized) {
+ return _image_resizer.ImageResizer.createImage(imgData);
}
return imgData;
}
@@ -47775,15 +48303,44 @@ class PDFImage {
buffer[i] = scale * comps[i];
}
}
+ createBitmap(kind, width, height, src) {
+ const canvas = new OffscreenCanvas(width, height);
+ const ctx = canvas.getContext("2d");
+ let imgData;
+ if (kind === _util.ImageKind.RGBA_32BPP) {
+ imgData = new ImageData(src, width, height);
+ } else {
+ imgData = ctx.createImageData(width, height);
+ (0, _image_utils.convertToRGBA)({
+ kind,
+ src,
+ dest: new Uint32Array(imgData.data.buffer),
+ width,
+ height,
+ inverseDecode: this.needsDecode
+ });
+ }
+ ctx.putImageData(imgData, 0, 0);
+ const bitmap = canvas.transferToImageBitmap();
+ return {
+ data: null,
+ width,
+ height,
+ bitmap,
+ interpolate: this.interpolate
+ };
+ }
getImageBytes(length, {
drawWidth,
drawHeight,
+ forceRGBA = false,
forceRGB = false,
internal = false
}) {
this.image.reset();
this.image.drawWidth = drawWidth || this.width;
this.image.drawHeight = drawHeight || this.height;
+ this.image.forceRGBA = !!forceRGBA;
this.image.forceRGB = !!forceRGB;
const imageBytes = this.image.getBytes(length);
if (internal || this.image instanceof _decode_stream.DecodeStream) {
@@ -47796,59 +48353,7 @@ class PDFImage {
exports.PDFImage = PDFImage;
/***/ }),
-/* 62 */
-/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-
-
-
-Object.defineProperty(exports, "__esModule", ({
- value: true
-}));
-exports.applyMaskImageData = applyMaskImageData;
-var _util = __w_pdfjs_require__(2);
-function applyMaskImageData({
- src,
- srcPos = 0,
- dest,
- destPos = 0,
- width,
- height,
- inverseDecode = false
-}) {
- const opaque = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
- const [zeroMapping, oneMapping] = !inverseDecode ? [opaque, 0] : [0, opaque];
- const widthInSource = width >> 3;
- const widthRemainder = width & 7;
- const srcLength = src.length;
- dest = new Uint32Array(dest.buffer);
- for (let i = 0; i < height; i++) {
- for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
- const elem = srcPos < srcLength ? src[srcPos] : 255;
- dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
- dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
- }
- if (widthRemainder === 0) {
- continue;
- }
- const elem = srcPos < srcLength ? src[srcPos++] : 255;
- for (let j = 0; j < widthRemainder; j++) {
- dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
- }
- }
- return {
- srcPos,
- destPos
- };
-}
-
-/***/ }),
-/* 63 */
+/* 64 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -47862,9 +48367,9 @@ exports.writeObject = writeObject;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
var _core_utils = __w_pdfjs_require__(3);
-var _xml_parser = __w_pdfjs_require__(64);
+var _xml_parser = __w_pdfjs_require__(65);
var _base_stream = __w_pdfjs_require__(5);
-var _crypto = __w_pdfjs_require__(65);
+var _crypto = __w_pdfjs_require__(66);
function writeObject(ref, obj, buffer, transform) {
buffer.push(`${ref.num} ${ref.gen} obj\n`);
if (obj instanceof _primitives.Dict) {
@@ -48164,7 +48669,7 @@ function incrementalUpdate({
}
/***/ }),
-/* 64 */
+/* 65 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -48202,7 +48707,7 @@ function isWhitespaceString(s) {
}
class XMLParserBase {
_resolveEntities(s) {
- return s.replace(/&([^;]+);/g, (all, entity) => {
+ return s.replaceAll(/&([^;]+);/g, (all, entity) => {
if (entity.substring(0, 2) === "#x") {
return String.fromCodePoint(parseInt(entity.substring(2), 16));
} else if (entity.substring(0, 1) === "#") {
@@ -48592,7 +49097,7 @@ class SimpleXMLParser extends XMLParserBase {
exports.SimpleXMLParser = SimpleXMLParser;
/***/ }),
-/* 65 */
+/* 66 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -48605,7 +49110,7 @@ exports.calculateSHA384 = calculateSHA384;
exports.calculateSHA512 = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
-var _decrypt_stream = __w_pdfjs_require__(66);
+var _decrypt_stream = __w_pdfjs_require__(67);
class ARCFourCipher {
constructor(key) {
this.a = 0;
@@ -49901,7 +50406,7 @@ const CipherTransformFactory = function CipherTransformFactoryClosure() {
exports.CipherTransformFactory = CipherTransformFactory;
/***/ }),
-/* 66 */
+/* 67 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -49947,7 +50452,7 @@ class DecryptStream extends _decode_stream.DecodeStream {
exports.DecryptStream = DecryptStream;
/***/ }),
-/* 67 */
+/* 68 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -49959,14 +50464,14 @@ exports.Catalog = void 0;
var _core_utils = __w_pdfjs_require__(3);
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(4);
-var _name_number_tree = __w_pdfjs_require__(68);
+var _name_number_tree = __w_pdfjs_require__(69);
var _base_stream = __w_pdfjs_require__(5);
-var _cleanup_helper = __w_pdfjs_require__(69);
+var _cleanup_helper = __w_pdfjs_require__(70);
var _colorspace = __w_pdfjs_require__(12);
-var _file_spec = __w_pdfjs_require__(70);
-var _image_utils = __w_pdfjs_require__(57);
-var _metadata_parser = __w_pdfjs_require__(71);
-var _struct_tree = __w_pdfjs_require__(72);
+var _file_spec = __w_pdfjs_require__(71);
+var _image_utils = __w_pdfjs_require__(58);
+var _metadata_parser = __w_pdfjs_require__(72);
+var _struct_tree = __w_pdfjs_require__(73);
function fetchDestination(dest) {
if (dest instanceof _primitives.Dict) {
dest = dest.get("D");
@@ -50757,7 +51262,7 @@ class Catalog {
if (javaScript === null) {
javaScript = new Map();
}
- js = (0, _util.stringToPDFString)(js).replace(/\u0000/g, "");
+ js = (0, _util.stringToPDFString)(js).replaceAll("\x00", "");
javaScript.set(name, js);
}
if (obj instanceof _primitives.Dict && obj.has("JavaScript")) {
@@ -51285,7 +51790,7 @@ class Catalog {
exports.Catalog = Catalog;
/***/ }),
-/* 68 */
+/* 69 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -51413,7 +51918,7 @@ class NumberTree extends NameOrNumberTree {
exports.NumberTree = NumberTree;
/***/ }),
-/* 69 */
+/* 70 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -51423,14 +51928,14 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.clearGlobalCaches = clearGlobalCaches;
var _primitives = __w_pdfjs_require__(4);
-var _unicode = __w_pdfjs_require__(38);
+var _unicode = __w_pdfjs_require__(39);
function clearGlobalCaches() {
(0, _primitives.clearPrimitiveCaches)();
(0, _unicode.clearUnicodeCaches)();
}
/***/ }),
-/* 70 */
+/* 71 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -51479,7 +51984,7 @@ class FileSpec {
get filename() {
if (!this._filename && this.root) {
const filename = pickPlatformItem(this.root) || "unnamed";
- this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/");
+ this._filename = (0, _util.stringToPDFString)(filename).replaceAll("\\\\", "\\").replaceAll("\\/", "/").replaceAll("\\", "/");
}
return this._filename;
}
@@ -51513,7 +52018,7 @@ class FileSpec {
exports.FileSpec = FileSpec;
/***/ }),
-/* 71 */
+/* 72 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -51522,7 +52027,7 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.MetadataParser = void 0;
-var _xml_parser = __w_pdfjs_require__(64);
+var _xml_parser = __w_pdfjs_require__(65);
class MetadataParser {
constructor(data) {
data = this._repair(data);
@@ -51537,10 +52042,10 @@ class MetadataParser {
}
}
_repair(data) {
- return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
- const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
+ return data.replace(/^[^<]+/, "").replaceAll(/>\\376\\377([^<]+)/g, function (all, codes) {
+ const bytes = codes.replaceAll(/\\([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) {
+ }).replaceAll(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
switch (name) {
case "amp":
return "&";
@@ -51621,7 +52126,7 @@ class MetadataParser {
exports.MetadataParser = MetadataParser;
/***/ }),
-/* 72 */
+/* 73 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -51632,7 +52137,7 @@ Object.defineProperty(exports, "__esModule", ({
exports.StructTreeRoot = exports.StructTreePage = void 0;
var _primitives = __w_pdfjs_require__(4);
var _util = __w_pdfjs_require__(2);
-var _name_number_tree = __w_pdfjs_require__(68);
+var _name_number_tree = __w_pdfjs_require__(69);
const MAX_DEPTH = 40;
const StructElementType = {
PAGE_CONTENT: "PAGE_CONTENT",
@@ -51909,7 +52414,7 @@ class StructTreePage {
exports.StructTreePage = StructTreePage;
/***/ }),
-/* 73 */
+/* 74 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -52029,7 +52534,7 @@ class ObjectLoader {
exports.ObjectLoader = ObjectLoader;
/***/ }),
-/* 74 */
+/* 75 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -52038,14 +52543,14 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.XFAFactory = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
-var _bind = __w_pdfjs_require__(79);
-var _data = __w_pdfjs_require__(85);
-var _fonts = __w_pdfjs_require__(83);
-var _utils = __w_pdfjs_require__(76);
+var _xfa_object = __w_pdfjs_require__(76);
+var _bind = __w_pdfjs_require__(80);
+var _data = __w_pdfjs_require__(86);
+var _fonts = __w_pdfjs_require__(84);
+var _utils = __w_pdfjs_require__(77);
var _util = __w_pdfjs_require__(2);
-var _parser = __w_pdfjs_require__(86);
-var _xhtml = __w_pdfjs_require__(96);
+var _parser = __w_pdfjs_require__(87);
+var _xhtml = __w_pdfjs_require__(97);
class XFAFactory {
constructor(data) {
try {
@@ -52180,7 +52685,7 @@ class XFAFactory {
exports.XFAFactory = XFAFactory;
/***/ }),
-/* 75 */
+/* 76 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -52189,11 +52694,11 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = exports.$uid = exports.$toStyle = exports.$toString = exports.$toPages = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushPara = exports.$pushGlyphs = exports.$popPara = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0;
-var _utils = __w_pdfjs_require__(76);
+var _utils = __w_pdfjs_require__(77);
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
-var _namespaces = __w_pdfjs_require__(77);
-var _som = __w_pdfjs_require__(78);
+var _namespaces = __w_pdfjs_require__(78);
+var _som = __w_pdfjs_require__(79);
const $acceptWhitespace = Symbol();
exports.$acceptWhitespace = $acceptWhitespace;
const $addHTML = Symbol();
@@ -52625,9 +53130,9 @@ class XFAObject {
if (usehref) {
ref = usehref;
if (usehref.startsWith("#som(") && usehref.endsWith(")")) {
- somExpression = usehref.slice("#som(".length, usehref.length - 1);
+ somExpression = usehref.slice("#som(".length, -1);
} else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) {
- somExpression = usehref.slice(".#som(".length, usehref.length - 1);
+ somExpression = usehref.slice(".#som(".length, -1);
} else if (usehref.startsWith("#")) {
id = usehref.slice(1);
} else if (usehref.startsWith(".#")) {
@@ -53116,7 +53621,7 @@ class Option10 extends IntegerObject {
exports.Option10 = Option10;
/***/ }),
-/* 76 */
+/* 77 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -53146,7 +53651,7 @@ const dimConverters = {
const measurementPattern = /([+-]?\d+\.?\d*)(.*)/;
function stripQuotes(str) {
if (str.startsWith("'") || str.startsWith('"')) {
- return str.slice(1, str.length - 1);
+ return str.slice(1, -1);
}
return str;
}
@@ -53335,7 +53840,7 @@ class HTMLResult {
exports.HTMLResult = HTMLResult;
/***/ }),
-/* 77 */
+/* 78 */
/***/ ((__unused_webpack_module, exports) => {
@@ -53411,7 +53916,7 @@ const NamespaceIds = {
exports.NamespaceIds = NamespaceIds;
/***/ }),
-/* 78 */
+/* 79 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -53421,8 +53926,8 @@ Object.defineProperty(exports, "__esModule", ({
}));
exports.createDataNode = createDataNode;
exports.searchNode = searchNode;
-var _xfa_object = __w_pdfjs_require__(75);
-var _namespaces = __w_pdfjs_require__(77);
+var _xfa_object = __w_pdfjs_require__(76);
+var _namespaces = __w_pdfjs_require__(78);
var _util = __w_pdfjs_require__(2);
const namePattern = /^[^.[]+/;
const indexPattern = /^[^\]]+/;
@@ -53683,7 +54188,7 @@ function createDataNode(root, container, expr) {
}
/***/ }),
-/* 79 */
+/* 80 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -53692,10 +54197,10 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.Binder = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
-var _template = __w_pdfjs_require__(80);
-var _som = __w_pdfjs_require__(78);
-var _namespaces = __w_pdfjs_require__(77);
+var _xfa_object = __w_pdfjs_require__(76);
+var _template = __w_pdfjs_require__(81);
+var _som = __w_pdfjs_require__(79);
+var _namespaces = __w_pdfjs_require__(78);
var _util = __w_pdfjs_require__(2);
const NS_DATASETS = _namespaces.NamespaceIds.datasets.id;
function createText(content) {
@@ -54117,7 +54622,7 @@ class Binder {
exports.Binder = Binder;
/***/ }),
-/* 80 */
+/* 81 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -54126,15 +54631,15 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
-var _namespaces = __w_pdfjs_require__(77);
-var _layout = __w_pdfjs_require__(81);
-var _html_utils = __w_pdfjs_require__(82);
-var _utils = __w_pdfjs_require__(76);
+var _xfa_object = __w_pdfjs_require__(76);
+var _namespaces = __w_pdfjs_require__(78);
+var _layout = __w_pdfjs_require__(82);
+var _html_utils = __w_pdfjs_require__(83);
+var _utils = __w_pdfjs_require__(77);
var _util = __w_pdfjs_require__(2);
-var _fonts = __w_pdfjs_require__(83);
+var _fonts = __w_pdfjs_require__(84);
var _core_utils = __w_pdfjs_require__(3);
-var _som = __w_pdfjs_require__(78);
+var _som = __w_pdfjs_require__(79);
const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id;
const SVG_NS = "http://www.w3.org/2000/svg";
const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2;
@@ -58314,7 +58819,7 @@ class Text extends _xfa_object.ContentObject {
}
[_xfa_object.$finalize]() {
if (typeof this[_xfa_object.$content] === "string") {
- this[_xfa_object.$content] = this[_xfa_object.$content].replace(/\r\n/g, "\n");
+ this[_xfa_object.$content] = this[_xfa_object.$content].replaceAll("\r\n", "\n");
}
}
[_xfa_object.$getExtra]() {
@@ -59016,7 +59521,7 @@ class TemplateNamespace {
exports.TemplateNamespace = TemplateNamespace;
/***/ }),
-/* 81 */
+/* 82 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -59028,8 +59533,8 @@ exports.addHTML = addHTML;
exports.checkDimensions = checkDimensions;
exports.flushHTML = flushHTML;
exports.getAvailableSpace = getAvailableSpace;
-var _xfa_object = __w_pdfjs_require__(75);
-var _html_utils = __w_pdfjs_require__(82);
+var _xfa_object = __w_pdfjs_require__(76);
+var _html_utils = __w_pdfjs_require__(83);
function createLine(node, children) {
return {
name: "div",
@@ -59296,7 +59801,7 @@ function checkDimensions(node, space) {
}
/***/ }),
-/* 82 */
+/* 83 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -59318,11 +59823,11 @@ exports.setFontFamily = setFontFamily;
exports.setMinMaxDimensions = setMinMaxDimensions;
exports.setPara = setPara;
exports.toStyle = toStyle;
-var _xfa_object = __w_pdfjs_require__(75);
+var _xfa_object = __w_pdfjs_require__(76);
var _util = __w_pdfjs_require__(2);
-var _utils = __w_pdfjs_require__(76);
-var _fonts = __w_pdfjs_require__(83);
-var _text = __w_pdfjs_require__(84);
+var _utils = __w_pdfjs_require__(77);
+var _fonts = __w_pdfjs_require__(84);
+var _text = __w_pdfjs_require__(85);
function measureToString(m) {
if (typeof m === "string") {
return "0px";
@@ -59841,7 +60346,7 @@ function fixURL(str) {
}
/***/ }),
-/* 83 */
+/* 84 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -59852,8 +60357,8 @@ Object.defineProperty(exports, "__esModule", ({
exports.FontFinder = void 0;
exports.getMetrics = getMetrics;
exports.selectFont = selectFont;
-var _xfa_object = __w_pdfjs_require__(75);
-var _utils = __w_pdfjs_require__(76);
+var _xfa_object = __w_pdfjs_require__(76);
+var _utils = __w_pdfjs_require__(77);
var _util = __w_pdfjs_require__(2);
class FontFinder {
constructor(pdfFonts) {
@@ -59920,7 +60425,7 @@ class FontFinder {
return font;
}
const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi;
- let name = fontName.replace(pattern, "");
+ let name = fontName.replaceAll(pattern, "");
font = this.fonts.get(name);
if (font) {
this.cache.set(fontName, font);
@@ -59929,28 +60434,28 @@ class FontFinder {
name = name.toLowerCase();
const maybe = [];
for (const [family, pdfFont] of this.fonts.entries()) {
- if (family.replace(pattern, "").toLowerCase().startsWith(name)) {
+ if (family.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
maybe.push(pdfFont);
}
}
if (maybe.length === 0) {
for (const [, pdfFont] of this.fonts.entries()) {
- if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) {
+ if (pdfFont.regular.name && pdfFont.regular.name.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
maybe.push(pdfFont);
}
}
}
if (maybe.length === 0) {
- name = name.replace(/psmt|mt/gi, "");
+ name = name.replaceAll(/psmt|mt/gi, "");
for (const [family, pdfFont] of this.fonts.entries()) {
- if (family.replace(pattern, "").toLowerCase().startsWith(name)) {
+ if (family.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
maybe.push(pdfFont);
}
}
}
if (maybe.length === 0) {
for (const pdfFont of this.fonts.values()) {
- if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) {
+ if (pdfFont.regular.name && pdfFont.regular.name.replaceAll(pattern, "").toLowerCase().startsWith(name)) {
maybe.push(pdfFont);
}
}
@@ -60006,7 +60511,7 @@ function getMetrics(xfaFont, real = false) {
}
/***/ }),
-/* 84 */
+/* 85 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -60015,7 +60520,7 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.TextMeasure = void 0;
-var _fonts = __w_pdfjs_require__(83);
+var _fonts = __w_pdfjs_require__(84);
const WIDTH_FACTOR = 1.02;
class FontInfo {
constructor(xfaFont, margin, lineHeight, fontFinder) {
@@ -60226,7 +60731,7 @@ class TextMeasure {
exports.TextMeasure = TextMeasure;
/***/ }),
-/* 85 */
+/* 86 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -60235,7 +60740,7 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.DataHandler = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
+var _xfa_object = __w_pdfjs_require__(76);
class DataHandler {
constructor(root, data) {
this.data = data;
@@ -60285,7 +60790,7 @@ class DataHandler {
exports.DataHandler = DataHandler;
/***/ }),
-/* 86 */
+/* 87 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -60294,9 +60799,9 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.XFAParser = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
-var _xml_parser = __w_pdfjs_require__(64);
-var _builder = __w_pdfjs_require__(87);
+var _xfa_object = __w_pdfjs_require__(76);
+var _xml_parser = __w_pdfjs_require__(65);
+var _builder = __w_pdfjs_require__(88);
var _util = __w_pdfjs_require__(2);
class XFAParser extends _xml_parser.XMLParserBase {
constructor(rootNameSpace = null, richText = false) {
@@ -60430,7 +60935,7 @@ class XFAParser extends _xml_parser.XMLParserBase {
exports.XFAParser = XFAParser;
/***/ }),
-/* 87 */
+/* 88 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -60439,11 +60944,11 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.Builder = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
-var _setup = __w_pdfjs_require__(88);
-var _template = __w_pdfjs_require__(80);
-var _unknown = __w_pdfjs_require__(97);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
+var _setup = __w_pdfjs_require__(89);
+var _template = __w_pdfjs_require__(81);
+var _unknown = __w_pdfjs_require__(98);
var _util = __w_pdfjs_require__(2);
class Root extends _xfa_object.XFAObject {
constructor(ids) {
@@ -60607,7 +61112,7 @@ class Builder {
exports.Builder = Builder;
/***/ }),
-/* 88 */
+/* 89 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -60616,15 +61121,15 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.NamespaceSetUp = void 0;
-var _config = __w_pdfjs_require__(89);
-var _connection_set = __w_pdfjs_require__(90);
-var _datasets = __w_pdfjs_require__(91);
-var _locale_set = __w_pdfjs_require__(92);
-var _signature = __w_pdfjs_require__(93);
-var _stylesheet = __w_pdfjs_require__(94);
-var _template = __w_pdfjs_require__(80);
-var _xdp = __w_pdfjs_require__(95);
-var _xhtml = __w_pdfjs_require__(96);
+var _config = __w_pdfjs_require__(90);
+var _connection_set = __w_pdfjs_require__(91);
+var _datasets = __w_pdfjs_require__(92);
+var _locale_set = __w_pdfjs_require__(93);
+var _signature = __w_pdfjs_require__(94);
+var _stylesheet = __w_pdfjs_require__(95);
+var _template = __w_pdfjs_require__(81);
+var _xdp = __w_pdfjs_require__(96);
+var _xhtml = __w_pdfjs_require__(97);
const NamespaceSetUp = {
config: _config.ConfigNamespace,
connection: _connection_set.ConnectionSetNamespace,
@@ -60639,7 +61144,7 @@ const NamespaceSetUp = {
exports.NamespaceSetUp = NamespaceSetUp;
/***/ }),
-/* 89 */
+/* 90 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -60648,9 +61153,9 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.ConfigNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
-var _utils = __w_pdfjs_require__(76);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
+var _utils = __w_pdfjs_require__(77);
var _util = __w_pdfjs_require__(2);
const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id;
class Acrobat extends _xfa_object.XFAObject {
@@ -62075,7 +62580,7 @@ class ConfigNamespace {
exports.ConfigNamespace = ConfigNamespace;
/***/ }),
-/* 90 */
+/* 91 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62084,8 +62589,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.ConnectionSetNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id;
class ConnectionSet extends _xfa_object.XFAObject {
constructor(attributes) {
@@ -62246,7 +62751,7 @@ class ConnectionSetNamespace {
exports.ConnectionSetNamespace = ConnectionSetNamespace;
/***/ }),
-/* 91 */
+/* 92 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62255,8 +62760,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.DatasetsNamespace = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
-var _namespaces = __w_pdfjs_require__(77);
+var _xfa_object = __w_pdfjs_require__(76);
+var _namespaces = __w_pdfjs_require__(78);
const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id;
class Data extends _xfa_object.XmlObject {
constructor(attributes) {
@@ -62297,7 +62802,7 @@ class DatasetsNamespace {
exports.DatasetsNamespace = DatasetsNamespace;
/***/ }),
-/* 92 */
+/* 93 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62306,9 +62811,9 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.LocaleSetNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
-var _utils = __w_pdfjs_require__(76);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
+var _utils = __w_pdfjs_require__(77);
const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id;
class CalendarSymbols extends _xfa_object.XFAObject {
constructor(attributes) {
@@ -62555,7 +63060,7 @@ class LocaleSetNamespace {
exports.LocaleSetNamespace = LocaleSetNamespace;
/***/ }),
-/* 93 */
+/* 94 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62564,8 +63069,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.SignatureNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id;
class Signature extends _xfa_object.XFAObject {
constructor(attributes) {
@@ -62586,7 +63091,7 @@ class SignatureNamespace {
exports.SignatureNamespace = SignatureNamespace;
/***/ }),
-/* 94 */
+/* 95 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62595,8 +63100,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.StylesheetNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id;
class Stylesheet extends _xfa_object.XFAObject {
constructor(attributes) {
@@ -62617,7 +63122,7 @@ class StylesheetNamespace {
exports.StylesheetNamespace = StylesheetNamespace;
/***/ }),
-/* 95 */
+/* 96 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62626,8 +63131,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.XdpNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id;
class Xdp extends _xfa_object.XFAObject {
constructor(attributes) {
@@ -62660,7 +63165,7 @@ class XdpNamespace {
exports.XdpNamespace = XdpNamespace;
/***/ }),
-/* 96 */
+/* 97 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -62669,10 +63174,10 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.XhtmlNamespace = void 0;
-var _xfa_object = __w_pdfjs_require__(75);
-var _namespaces = __w_pdfjs_require__(77);
-var _html_utils = __w_pdfjs_require__(82);
-var _utils = __w_pdfjs_require__(76);
+var _xfa_object = __w_pdfjs_require__(76);
+var _namespaces = __w_pdfjs_require__(78);
+var _html_utils = __w_pdfjs_require__(83);
+var _utils = __w_pdfjs_require__(77);
const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id;
const $richText = Symbol();
const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]);
@@ -62760,9 +63265,9 @@ class XhtmlObject extends _xfa_object.XmlObject {
}
[_xfa_object.$onText](str, richText = false) {
if (!richText) {
- str = str.replace(crlfRegExp, "");
+ str = str.replaceAll(crlfRegExp, "");
if (!this.style.includes("xfa-spacerun:yes")) {
- str = str.replace(spacesRegExp, " ");
+ str = str.replaceAll(spacesRegExp, " ");
}
} else {
this[$richText] = true;
@@ -62864,7 +63369,7 @@ class XhtmlObject extends _xfa_object.XmlObject {
}
let value;
if (this[$richText]) {
- value = this[_xfa_object.$content] ? this[_xfa_object.$content].replace(crlfForRichTextRegExp, "\n") : undefined;
+ value = this[_xfa_object.$content] ? this[_xfa_object.$content].replaceAll(crlfForRichTextRegExp, "\n") : undefined;
} else {
value = this[_xfa_object.$content] || undefined;
}
@@ -63076,7 +63581,7 @@ class XhtmlNamespace {
exports.XhtmlNamespace = XhtmlNamespace;
/***/ }),
-/* 97 */
+/* 98 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -63085,8 +63590,8 @@ Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.UnknownNamespace = void 0;
-var _namespaces = __w_pdfjs_require__(77);
-var _xfa_object = __w_pdfjs_require__(75);
+var _namespaces = __w_pdfjs_require__(78);
+var _xfa_object = __w_pdfjs_require__(76);
class UnknownNamespace {
constructor(nsId) {
this.namespaceId = nsId;
@@ -63098,7 +63603,7 @@ class UnknownNamespace {
exports.UnknownNamespace = UnknownNamespace;
/***/ }),
-/* 98 */
+/* 99 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -63109,7 +63614,7 @@ Object.defineProperty(exports, "__esModule", ({
exports.DatasetReader = void 0;
var _util = __w_pdfjs_require__(2);
var _core_utils = __w_pdfjs_require__(3);
-var _xml_parser = __w_pdfjs_require__(64);
+var _xml_parser = __w_pdfjs_require__(65);
function decodeString(str) {
try {
return (0, _util.stringToUTF8String)(str);
@@ -63165,7 +63670,7 @@ class DatasetReader {
exports.DatasetReader = DatasetReader;
/***/ }),
-/* 99 */
+/* 100 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -63179,13 +63684,13 @@ var _primitives = __w_pdfjs_require__(4);
var _parser = __w_pdfjs_require__(15);
var _core_utils = __w_pdfjs_require__(3);
var _base_stream = __w_pdfjs_require__(5);
-var _crypto = __w_pdfjs_require__(65);
+var _crypto = __w_pdfjs_require__(66);
class XRef {
constructor(stream, pdfManager) {
this.stream = stream;
this.pdfManager = pdfManager;
this.entries = [];
- this.xrefstms = Object.create(null);
+ this._xrefStms = new Set();
this._cacheMap = new Map();
this._pendingRefs = new _primitives.RefSet();
this._newPersistentRefNum = null;
@@ -63554,7 +64059,7 @@ class XRef {
const xrefTagOffset = skipUntil(content, 0, xrefBytes);
if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {
xrefStms.push(position - stream.start);
- this.xrefstms[position - stream.start] = 1;
+ this._xrefStms.add(position - stream.start);
}
position += contentLength;
} else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) {
@@ -63671,12 +64176,9 @@ class XRef {
this.topDict = dict;
}
obj = dict.get("XRefStm");
- if (Number.isInteger(obj)) {
- const pos = obj;
- if (!(pos in this.xrefstms)) {
- this.xrefstms[pos] = 1;
- this.startXRefQueue.push(pos);
- }
+ if (Number.isInteger(obj) && !this._xrefStms.has(obj)) {
+ this._xrefStms.add(obj);
+ this.startXRefQueue.push(obj);
}
} else if (Number.isInteger(obj)) {
if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !((obj = parser.getObj()) instanceof _base_stream.BaseStream)) {
@@ -63714,6 +64216,9 @@ class XRef {
}
throw new _core_utils.XRefParseException();
}
+ get lastXRefStreamPos() {
+ return this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null;
+ }
getEntry(i) {
const xrefEntry = this.entries[i];
if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
@@ -63893,7 +64398,7 @@ class XRef {
exports.XRef = XRef;
/***/ }),
-/* 100 */
+/* 101 */
/***/ ((__unused_webpack_module, exports) => {
@@ -63906,7 +64411,7 @@ const isNodeJS = typeof process === "object" && process + "" === "[object proces
exports.isNodeJS = isNodeJS;
/***/ }),
-/* 101 */
+/* 102 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -64319,7 +64824,7 @@ class MessageHandler {
exports.MessageHandler = MessageHandler;
/***/ }),
-/* 102 */
+/* 103 */
/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -64510,8 +65015,8 @@ Object.defineProperty(exports, "WorkerMessageHandler", ({
}
}));
var _worker = __w_pdfjs_require__(1);
-const pdfjsVersion = '3.4.120';
-const pdfjsBuild = 'af6414988';
+const pdfjsVersion = '3.5.141';
+const pdfjsBuild = 'be0f6ee08';
})();
/******/ return __webpack_exports__;