@file-viewer/renderer-pdf 2.1.26 → 2.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pdf.js +63 -48
- package/package.json +2 -2
package/dist/pdf.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getDocument, GlobalWorkerOptions, PDFWorker as PdfJsWorker, PixelsPerInch, } from 'pdfjs-dist/legacy/build/pdf.mjs';
|
|
2
2
|
import { EventBus, GenericL10n, PDFFindController, PDFLinkService, PDFViewer, } from 'pdfjs-dist/legacy/web/pdf_viewer.mjs';
|
|
3
3
|
import { registerFileViewerSearchProvider, registerFileViewerZoomProvider, unregisterFileViewerSearchProvider, unregisterFileViewerZoomProvider, registerFileViewerViewStateProvider, unregisterFileViewerViewStateProvider, createFileViewerZoomChangeEmitter, createFileViewerViewStateChange, createFileViewerViewStateChangeEmitter, createFileViewerTranslator, buildPrintPageStyle, formatCssPixels, DEFAULT_PDF_RANGE_CHUNK_SIZE, resolveFileViewerLocale, resolveFileViewerFitScale, } from '@file-viewer/core';
|
|
4
|
-
import { DEFAULT_FILE_VIEWER_PDF_WORKER_PATH, resolveFileViewerPdfAssetUrls, } from '@file-viewer/core/assets';
|
|
4
|
+
import { DEFAULT_FILE_VIEWER_PDF_WORKER_PATH, resolveFileViewerPdfAssetUrls, resolveFileViewerRuntimeAssetBaseUrl, } from '@file-viewer/core/assets';
|
|
5
5
|
import { pdfViewerStyle } from './pdfStyles.js';
|
|
6
6
|
import { collectMalformedIdentityFontNames, createPdfCjkFontFallbackManager, detectMalformedIdentityCjkFontFamilies, } from './pdfFontFallback.js';
|
|
7
7
|
export const DEFAULT_FILE_VIEWER_PDF_WORKER_URL = DEFAULT_FILE_VIEWER_PDF_WORKER_PATH;
|
|
@@ -254,50 +254,6 @@ const installBundledPdfFakeWorker = async () => {
|
|
|
254
254
|
const resolvePdfWorkerUrl = (options, documentBaseUrl) => {
|
|
255
255
|
return resolveFileViewerPdfAssetUrls(options, documentBaseUrl).workerUrl;
|
|
256
256
|
};
|
|
257
|
-
const readBundlerPublicBaseUrl = () => {
|
|
258
|
-
var _a;
|
|
259
|
-
try {
|
|
260
|
-
const value = (_a = import.meta.env) === null || _a === void 0 ? void 0 : _a.BASE_URL;
|
|
261
|
-
return typeof value === 'string' ? value.trim() : '';
|
|
262
|
-
}
|
|
263
|
-
catch {
|
|
264
|
-
return '';
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
const resolvePdfRuntimeAssetBaseUrl = (documentRef) => {
|
|
268
|
-
const documentBaseUrl = documentRef.baseURI || documentRef.URL || 'file:///';
|
|
269
|
-
const bundlerBaseUrl = readBundlerPublicBaseUrl();
|
|
270
|
-
if (bundlerBaseUrl && bundlerBaseUrl !== '.' && bundlerBaseUrl !== './') {
|
|
271
|
-
try {
|
|
272
|
-
return new URL(bundlerBaseUrl.endsWith('/') ? bundlerBaseUrl : `${bundlerBaseUrl}/`, documentBaseUrl).href;
|
|
273
|
-
}
|
|
274
|
-
catch {
|
|
275
|
-
// Continue with DOM-based public-path detection.
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
// An explicit <base> is authoritative and already reflected by baseURI.
|
|
279
|
-
if (documentRef.querySelector('base[href]')) {
|
|
280
|
-
return documentBaseUrl;
|
|
281
|
-
}
|
|
282
|
-
// Entry scripts remain under the public deployment base when an SPA route
|
|
283
|
-
// changes document.baseURI. This covers Vite and common UMI/Webpack layouts.
|
|
284
|
-
for (const script of Array.from(documentRef.querySelectorAll('script[src]'))) {
|
|
285
|
-
try {
|
|
286
|
-
const scriptUrl = new URL(script.src || script.getAttribute('src') || '', documentBaseUrl);
|
|
287
|
-
const assetDirectory = scriptUrl.pathname.match(/^(.*\/)(?:assets|static)\/[^/]+$/i);
|
|
288
|
-
if (assetDirectory) {
|
|
289
|
-
return new URL(assetDirectory[1], scriptUrl.origin).href;
|
|
290
|
-
}
|
|
291
|
-
if (/\/(?:umi|main|index)(?:[.-][^/]*)?\.(?:m?js)$/i.test(scriptUrl.pathname)) {
|
|
292
|
-
return new URL('./', scriptUrl).href;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
// Ignore unrelated or malformed script URLs.
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
return documentBaseUrl;
|
|
300
|
-
};
|
|
301
257
|
const buildOutlineItems = (items, prefix = 'outline', getFallbackTitle = index => `Outline ${index + 1}`) => items.map((item, index) => {
|
|
302
258
|
const id = `${prefix}-${index}`;
|
|
303
259
|
const children = Array.isArray(item.items)
|
|
@@ -312,7 +268,7 @@ const buildOutlineItems = (items, prefix = 'outline', getFallbackTitle = index =
|
|
|
312
268
|
};
|
|
313
269
|
});
|
|
314
270
|
export default async function renderPdf(buffer, target, context) {
|
|
315
|
-
var _a, _b, _c;
|
|
271
|
+
var _a, _b, _c, _d;
|
|
316
272
|
const documentRef = target.ownerDocument || document;
|
|
317
273
|
const targetWindow = documentRef.defaultView || (typeof window !== 'undefined' ? window : null);
|
|
318
274
|
const t = createFileViewerTranslator(context === null || context === void 0 ? void 0 : context.options);
|
|
@@ -321,7 +277,7 @@ export default async function renderPdf(buffer, target, context) {
|
|
|
321
277
|
throw new Error(t('pdf.error.browserWindow'));
|
|
322
278
|
}
|
|
323
279
|
const options = (_a = context === null || context === void 0 ? void 0 : context.options) === null || _a === void 0 ? void 0 : _a.pdf;
|
|
324
|
-
const pdfRuntimeAssetBaseUrl =
|
|
280
|
+
const pdfRuntimeAssetBaseUrl = resolveFileViewerRuntimeAssetBaseUrl(documentRef);
|
|
325
281
|
const cjkFontFallbackEnabled = (options === null || options === void 0 ? void 0 : options.cjkFontFallback) !== false;
|
|
326
282
|
const identityFontRepairEnabled = (options === null || options === void 0 ? void 0 : options.identityFontRepair) !== false;
|
|
327
283
|
const fontInspectionEnabled = cjkFontFallbackEnabled || identityFontRepairEnabled;
|
|
@@ -586,6 +542,64 @@ export default async function renderPdf(buffer, target, context) {
|
|
|
586
542
|
pendingPdfThumbnails.delete(pageNumber);
|
|
587
543
|
}
|
|
588
544
|
};
|
|
545
|
+
const renderFirstPageThumbnail = async (captureOptions) => {
|
|
546
|
+
var _a, _b, _c, _d, _e, _f;
|
|
547
|
+
const pdfDocument = pdfContext.document;
|
|
548
|
+
if (!pdfDocument) {
|
|
549
|
+
return null;
|
|
550
|
+
}
|
|
551
|
+
if ((_a = captureOptions.signal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
552
|
+
throw captureOptions.signal.reason;
|
|
553
|
+
}
|
|
554
|
+
const page = await pdfDocument.getPage(1);
|
|
555
|
+
await ensurePdfPageCjkFontFallback(1, page);
|
|
556
|
+
const baseViewport = page.getViewport({ scale: 1, rotation: currentRotation });
|
|
557
|
+
const scale = Math.max(0.1, Math.min(captureOptions.width / Math.max(baseViewport.width, 1), captureOptions.height / Math.max(baseViewport.height, 1)));
|
|
558
|
+
const viewport = page.getViewport({ scale, rotation: currentRotation });
|
|
559
|
+
const canvas = documentRef.createElement('canvas');
|
|
560
|
+
const canvasContext = canvas.getContext('2d');
|
|
561
|
+
if (!canvasContext) {
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
canvas.width = Math.max(1, Math.ceil(viewport.width));
|
|
565
|
+
canvas.height = Math.max(1, Math.ceil(viewport.height));
|
|
566
|
+
const renderTask = page.render({ canvas, canvasContext, viewport });
|
|
567
|
+
const cancelRender = () => renderTask.cancel();
|
|
568
|
+
(_b = captureOptions.signal) === null || _b === void 0 ? void 0 : _b.addEventListener('abort', cancelRender, { once: true });
|
|
569
|
+
try {
|
|
570
|
+
await renderTask.promise;
|
|
571
|
+
if ((_c = captureOptions.signal) === null || _c === void 0 ? void 0 : _c.aborted) {
|
|
572
|
+
throw captureOptions.signal.reason;
|
|
573
|
+
}
|
|
574
|
+
return await new Promise(resolve => canvas.toBlob(resolve, 'image/png'));
|
|
575
|
+
}
|
|
576
|
+
catch (error) {
|
|
577
|
+
if ((_d = captureOptions.signal) === null || _d === void 0 ? void 0 : _d.aborted) {
|
|
578
|
+
throw captureOptions.signal.reason;
|
|
579
|
+
}
|
|
580
|
+
throw error;
|
|
581
|
+
}
|
|
582
|
+
finally {
|
|
583
|
+
(_e = captureOptions.signal) === null || _e === void 0 ? void 0 : _e.removeEventListener('abort', cancelRender);
|
|
584
|
+
canvas.width = 0;
|
|
585
|
+
canvas.height = 0;
|
|
586
|
+
(_f = page.cleanup) === null || _f === void 0 ? void 0 : _f.call(page);
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
(_d = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _d === void 0 ? void 0 : _d.call(context, {
|
|
590
|
+
beforeCapture: async ({ signal }) => {
|
|
591
|
+
while (loadStatus === 'loading' && !destroyed) {
|
|
592
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
593
|
+
throw signal.reason;
|
|
594
|
+
}
|
|
595
|
+
await new Promise(resolve => targetWindow.setTimeout(resolve, 16));
|
|
596
|
+
}
|
|
597
|
+
if (loadStatus === 'error') {
|
|
598
|
+
throw new Error(errorMessage || t('pdf.error.loadFailed'));
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
capture: renderFirstPageThumbnail,
|
|
602
|
+
});
|
|
589
603
|
const ensureThumbnailObserver = () => {
|
|
590
604
|
if (!thumbnailsEnabled || thumbnailObserver || typeof targetWindow.IntersectionObserver !== 'function') {
|
|
591
605
|
return;
|
|
@@ -1679,7 +1693,7 @@ export default async function renderPdf(buffer, target, context) {
|
|
|
1679
1693
|
return {
|
|
1680
1694
|
$el: root,
|
|
1681
1695
|
unmount() {
|
|
1682
|
-
var _a;
|
|
1696
|
+
var _a, _b;
|
|
1683
1697
|
destroyed = true;
|
|
1684
1698
|
loadVersion += 1;
|
|
1685
1699
|
restorePdfJsMissingSystemFontWarnings();
|
|
@@ -1700,6 +1714,7 @@ export default async function renderPdf(buffer, target, context) {
|
|
|
1700
1714
|
unregisterFileViewerViewStateProvider(root);
|
|
1701
1715
|
outlineItems = [];
|
|
1702
1716
|
(_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
|
|
1717
|
+
(_b = context === null || context === void 0 ? void 0 : context.registerThumbnailAdapter) === null || _b === void 0 ? void 0 : _b.call(context, null);
|
|
1703
1718
|
const resource = pdfContext.resource;
|
|
1704
1719
|
pdfContext.viewer = null;
|
|
1705
1720
|
pdfContext.linkService = null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@file-viewer/renderer-pdf",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.28",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Standalone PDF renderer plugin for Flyfish File Viewer powered by PDF.js.",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"LICENSE"
|
|
55
55
|
],
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@file-viewer/core": "2.1.
|
|
57
|
+
"@file-viewer/core": "2.1.28",
|
|
58
58
|
"@fontsource-variable/noto-sans-sc": "5.2.10",
|
|
59
59
|
"pdf-lib": "1.17.1",
|
|
60
60
|
"pdfjs-dist": "5.4.624"
|