@open-file-viewer/core 0.1.9 → 0.1.10
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/README.md +17 -0
- package/dist/index.cjs +41 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +41 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -140,6 +140,11 @@ interface PdfPluginOptions {
|
|
|
140
140
|
cMapPacked?: boolean;
|
|
141
141
|
standardFontDataUrl?: string;
|
|
142
142
|
useSystemFonts?: boolean;
|
|
143
|
+
disableStream?: boolean;
|
|
144
|
+
disableAutoFetch?: boolean;
|
|
145
|
+
disableRange?: boolean;
|
|
146
|
+
rangeChunkSize?: number;
|
|
147
|
+
useFetchData?: boolean;
|
|
143
148
|
}
|
|
144
149
|
declare function pdfPlugin(options?: PdfJsModule | PdfPluginOptions): PreviewPlugin;
|
|
145
150
|
|
package/dist/index.d.ts
CHANGED
|
@@ -140,6 +140,11 @@ interface PdfPluginOptions {
|
|
|
140
140
|
cMapPacked?: boolean;
|
|
141
141
|
standardFontDataUrl?: string;
|
|
142
142
|
useSystemFonts?: boolean;
|
|
143
|
+
disableStream?: boolean;
|
|
144
|
+
disableAutoFetch?: boolean;
|
|
145
|
+
disableRange?: boolean;
|
|
146
|
+
rangeChunkSize?: number;
|
|
147
|
+
useFetchData?: boolean;
|
|
143
148
|
}
|
|
144
149
|
declare function pdfPlugin(options?: PdfJsModule | PdfPluginOptions): PreviewPlugin;
|
|
145
150
|
|
package/dist/index.js
CHANGED
|
@@ -4523,14 +4523,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4523
4523
|
scroller.className = "ofv-pdf ofv-pdf-pages";
|
|
4524
4524
|
viewer.append(summary, scroller);
|
|
4525
4525
|
options.viewport.append(viewer);
|
|
4526
|
-
const
|
|
4527
|
-
url: options.fileUrl,
|
|
4528
|
-
cMapUrl: options.cMapUrl ?? `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdf.version}/cmaps/`,
|
|
4529
|
-
cMapPacked: options.cMapPacked ?? true,
|
|
4530
|
-
standardFontDataUrl: options.standardFontDataUrl ?? `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdf.version}/standard_fonts/`,
|
|
4531
|
-
useSystemFonts: options.useSystemFonts ?? true
|
|
4532
|
-
});
|
|
4533
|
-
const doc = await documentTask.promise.catch((error) => {
|
|
4526
|
+
const showDocumentFallback = (error) => {
|
|
4534
4527
|
viewer.remove();
|
|
4535
4528
|
options.viewport.classList.add("ofv-center");
|
|
4536
4529
|
const fileLike = {
|
|
@@ -4547,8 +4540,29 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4547
4540
|
action: options.encryptedAction || "\u4E0B\u8F7D PDF"
|
|
4548
4541
|
}) : createPdfFallback(options.fileName, options.fileUrl, normalizePdfError(error), options.fallbackTitle);
|
|
4549
4542
|
options.viewport.append(fallback);
|
|
4550
|
-
|
|
4551
|
-
|
|
4543
|
+
};
|
|
4544
|
+
let documentTask;
|
|
4545
|
+
let doc;
|
|
4546
|
+
try {
|
|
4547
|
+
const pdfData = options.useFetchData ? await loadPdfData(options.fileUrl) : void 0;
|
|
4548
|
+
documentTask = pdf.getDocument({
|
|
4549
|
+
...pdfData ? { data: pdfData } : { url: options.fileUrl },
|
|
4550
|
+
cMapUrl: options.cMapUrl ?? `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdf.version}/cmaps/`,
|
|
4551
|
+
cMapPacked: options.cMapPacked ?? true,
|
|
4552
|
+
standardFontDataUrl: options.standardFontDataUrl ?? `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdf.version}/standard_fonts/`,
|
|
4553
|
+
useSystemFonts: options.useSystemFonts ?? true,
|
|
4554
|
+
disableStream: options.disableStream,
|
|
4555
|
+
disableAutoFetch: options.disableAutoFetch,
|
|
4556
|
+
disableRange: options.disableRange,
|
|
4557
|
+
rangeChunkSize: options.rangeChunkSize
|
|
4558
|
+
});
|
|
4559
|
+
doc = await documentTask.promise.catch((error) => {
|
|
4560
|
+
showDocumentFallback(error);
|
|
4561
|
+
return void 0;
|
|
4562
|
+
});
|
|
4563
|
+
} catch (error) {
|
|
4564
|
+
showDocumentFallback(error);
|
|
4565
|
+
}
|
|
4552
4566
|
if (!doc) {
|
|
4553
4567
|
return {
|
|
4554
4568
|
canCommand() {
|
|
@@ -4561,17 +4575,18 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4561
4575
|
},
|
|
4562
4576
|
destroy() {
|
|
4563
4577
|
options.viewport.classList.remove("ofv-center");
|
|
4564
|
-
documentTask
|
|
4578
|
+
documentTask?.destroy?.();
|
|
4565
4579
|
if (options.revokeUrlOnDestroy) {
|
|
4566
4580
|
revokeObjectUrl(options.fileUrl, Boolean(options.isExternal));
|
|
4567
4581
|
}
|
|
4568
4582
|
}
|
|
4569
4583
|
};
|
|
4570
4584
|
}
|
|
4585
|
+
const pdfDocument = doc;
|
|
4571
4586
|
const pagesMeta = [];
|
|
4572
|
-
for (let pageNumber = 1; pageNumber <=
|
|
4587
|
+
for (let pageNumber = 1; pageNumber <= pdfDocument.numPages; pageNumber += 1) {
|
|
4573
4588
|
try {
|
|
4574
|
-
const page = await
|
|
4589
|
+
const page = await pdfDocument.getPage(pageNumber);
|
|
4575
4590
|
const baseViewport = page.getViewport({ scale: 1 });
|
|
4576
4591
|
pagesMeta.push({
|
|
4577
4592
|
width: baseViewport.width,
|
|
@@ -4587,7 +4602,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4587
4602
|
let zoomFactor = 1;
|
|
4588
4603
|
let rotation = 0;
|
|
4589
4604
|
const updateSummary = () => {
|
|
4590
|
-
renderPdfSummary(summary,
|
|
4605
|
+
renderPdfSummary(summary, pdfDocument.numPages, pagesMeta, options.fit, zoomFactor);
|
|
4591
4606
|
options.toolbar?.setZoom(zoomFactor);
|
|
4592
4607
|
};
|
|
4593
4608
|
const clearPage = (pageIdx) => {
|
|
@@ -4610,7 +4625,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4610
4625
|
if (!state || state.rendered) return;
|
|
4611
4626
|
state.rendered = true;
|
|
4612
4627
|
try {
|
|
4613
|
-
const page = await
|
|
4628
|
+
const page = await pdfDocument.getPage(pageIdx + 1);
|
|
4614
4629
|
const meta = pagesMeta[pageIdx];
|
|
4615
4630
|
const scale = options.fit === "actual" ? zoomFactor : Math.max(0.05, Math.min(5, getPdfAvailableWidth(size.width) / rotatedPdfWidth(meta, rotation) * zoomFactor));
|
|
4616
4631
|
const viewport = page.getViewport({ scale, rotation });
|
|
@@ -4697,7 +4712,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4697
4712
|
if (!state.rendered) {
|
|
4698
4713
|
void renderPage(pageIdx, size);
|
|
4699
4714
|
}
|
|
4700
|
-
} else if (state.rendered &&
|
|
4715
|
+
} else if (state.rendered && pdfDocument.numPages > 8) {
|
|
4701
4716
|
clearPage(pageIdx);
|
|
4702
4717
|
}
|
|
4703
4718
|
});
|
|
@@ -4708,7 +4723,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4708
4723
|
}
|
|
4709
4724
|
);
|
|
4710
4725
|
}
|
|
4711
|
-
for (let i = 0; i <
|
|
4726
|
+
for (let i = 0; i < pdfDocument.numPages; i++) {
|
|
4712
4727
|
const meta = pagesMeta[i];
|
|
4713
4728
|
const rotatedWidth = rotatedPdfWidth(meta, rotation);
|
|
4714
4729
|
const rotatedHeight = rotatedPdfHeight(meta, rotation);
|
|
@@ -4736,7 +4751,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4736
4751
|
}
|
|
4737
4752
|
if (observer) {
|
|
4738
4753
|
window.setTimeout(() => {
|
|
4739
|
-
const eagerPages =
|
|
4754
|
+
const eagerPages = pdfDocument.numPages > 8 ? 2 : pdfDocument.numPages;
|
|
4740
4755
|
for (let i = 0; i < eagerPages; i++) {
|
|
4741
4756
|
void renderPage(i, size);
|
|
4742
4757
|
}
|
|
@@ -4793,10 +4808,10 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4793
4808
|
}
|
|
4794
4809
|
});
|
|
4795
4810
|
pageStates.length = 0;
|
|
4811
|
+
void pdfDocument.destroy?.();
|
|
4796
4812
|
if (options.revokeUrlOnDestroy) {
|
|
4797
4813
|
revokeObjectUrl(options.fileUrl, Boolean(options.isExternal));
|
|
4798
4814
|
}
|
|
4799
|
-
void doc.destroy();
|
|
4800
4815
|
}
|
|
4801
4816
|
};
|
|
4802
4817
|
}
|
|
@@ -4859,6 +4874,13 @@ function normalizePdfOptions(options) {
|
|
|
4859
4874
|
}
|
|
4860
4875
|
return options;
|
|
4861
4876
|
}
|
|
4877
|
+
async function loadPdfData(url) {
|
|
4878
|
+
const response = await fetch(url);
|
|
4879
|
+
if (!response.ok) {
|
|
4880
|
+
throw new Error(`Failed to load PDF data: ${response.status} ${response.statusText}`);
|
|
4881
|
+
}
|
|
4882
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
4883
|
+
}
|
|
4862
4884
|
function isCanvasVisuallyBlank(canvas, context) {
|
|
4863
4885
|
if (canvas.width === 0 || canvas.height === 0 || typeof context.getImageData !== "function") {
|
|
4864
4886
|
return false;
|