@open-file-viewer/core 0.1.8 → 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 +35 -0
- package/dist/index.cjs +55 -20
- 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 +55 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
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
|
@@ -2516,6 +2516,11 @@ function objectFit(fit) {
|
|
|
2516
2516
|
}
|
|
2517
2517
|
|
|
2518
2518
|
// src/plugins/video.ts
|
|
2519
|
+
var mpegtsPackageName = "mpegts.js";
|
|
2520
|
+
var loadMpegts = () => import(
|
|
2521
|
+
/* @vite-ignore */
|
|
2522
|
+
mpegtsPackageName
|
|
2523
|
+
);
|
|
2519
2524
|
var videoExtensions = /* @__PURE__ */ new Set([
|
|
2520
2525
|
"mp4",
|
|
2521
2526
|
"mpg",
|
|
@@ -2630,7 +2635,8 @@ function videoPlugin() {
|
|
|
2630
2635
|
showTranscodeFallback();
|
|
2631
2636
|
}
|
|
2632
2637
|
} else if (isFlv || isMpegTs) {
|
|
2633
|
-
const
|
|
2638
|
+
const mpegtsModule = await loadMpegts();
|
|
2639
|
+
const mpegts = resolveMpegtsApi(mpegtsModule);
|
|
2634
2640
|
if (mpegts.isSupported()) {
|
|
2635
2641
|
mpegtsPlayer = mpegts.createPlayer({
|
|
2636
2642
|
type: isFlv ? "flv" : "mpegts",
|
|
@@ -2682,6 +2688,13 @@ function videoPlugin() {
|
|
|
2682
2688
|
}
|
|
2683
2689
|
};
|
|
2684
2690
|
}
|
|
2691
|
+
function resolveMpegtsApi(module) {
|
|
2692
|
+
const api = module.default || module;
|
|
2693
|
+
if (!api.Events || !api.isSupported || !api.createPlayer) {
|
|
2694
|
+
throw new Error("mpegts.js is not available.");
|
|
2695
|
+
}
|
|
2696
|
+
return api;
|
|
2697
|
+
}
|
|
2685
2698
|
function createVideoTransformController(video, ctx) {
|
|
2686
2699
|
let scale = 1;
|
|
2687
2700
|
let rotation = 0;
|
|
@@ -4510,14 +4523,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4510
4523
|
scroller.className = "ofv-pdf ofv-pdf-pages";
|
|
4511
4524
|
viewer.append(summary, scroller);
|
|
4512
4525
|
options.viewport.append(viewer);
|
|
4513
|
-
const
|
|
4514
|
-
url: options.fileUrl,
|
|
4515
|
-
cMapUrl: options.cMapUrl ?? `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdf.version}/cmaps/`,
|
|
4516
|
-
cMapPacked: options.cMapPacked ?? true,
|
|
4517
|
-
standardFontDataUrl: options.standardFontDataUrl ?? `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdf.version}/standard_fonts/`,
|
|
4518
|
-
useSystemFonts: options.useSystemFonts ?? true
|
|
4519
|
-
});
|
|
4520
|
-
const doc = await documentTask.promise.catch((error) => {
|
|
4526
|
+
const showDocumentFallback = (error) => {
|
|
4521
4527
|
viewer.remove();
|
|
4522
4528
|
options.viewport.classList.add("ofv-center");
|
|
4523
4529
|
const fileLike = {
|
|
@@ -4534,8 +4540,29 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4534
4540
|
action: options.encryptedAction || "\u4E0B\u8F7D PDF"
|
|
4535
4541
|
}) : createPdfFallback(options.fileName, options.fileUrl, normalizePdfError(error), options.fallbackTitle);
|
|
4536
4542
|
options.viewport.append(fallback);
|
|
4537
|
-
|
|
4538
|
-
|
|
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
|
+
}
|
|
4539
4566
|
if (!doc) {
|
|
4540
4567
|
return {
|
|
4541
4568
|
canCommand() {
|
|
@@ -4548,17 +4575,18 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4548
4575
|
},
|
|
4549
4576
|
destroy() {
|
|
4550
4577
|
options.viewport.classList.remove("ofv-center");
|
|
4551
|
-
documentTask
|
|
4578
|
+
documentTask?.destroy?.();
|
|
4552
4579
|
if (options.revokeUrlOnDestroy) {
|
|
4553
4580
|
revokeObjectUrl(options.fileUrl, Boolean(options.isExternal));
|
|
4554
4581
|
}
|
|
4555
4582
|
}
|
|
4556
4583
|
};
|
|
4557
4584
|
}
|
|
4585
|
+
const pdfDocument = doc;
|
|
4558
4586
|
const pagesMeta = [];
|
|
4559
|
-
for (let pageNumber = 1; pageNumber <=
|
|
4587
|
+
for (let pageNumber = 1; pageNumber <= pdfDocument.numPages; pageNumber += 1) {
|
|
4560
4588
|
try {
|
|
4561
|
-
const page = await
|
|
4589
|
+
const page = await pdfDocument.getPage(pageNumber);
|
|
4562
4590
|
const baseViewport = page.getViewport({ scale: 1 });
|
|
4563
4591
|
pagesMeta.push({
|
|
4564
4592
|
width: baseViewport.width,
|
|
@@ -4574,7 +4602,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4574
4602
|
let zoomFactor = 1;
|
|
4575
4603
|
let rotation = 0;
|
|
4576
4604
|
const updateSummary = () => {
|
|
4577
|
-
renderPdfSummary(summary,
|
|
4605
|
+
renderPdfSummary(summary, pdfDocument.numPages, pagesMeta, options.fit, zoomFactor);
|
|
4578
4606
|
options.toolbar?.setZoom(zoomFactor);
|
|
4579
4607
|
};
|
|
4580
4608
|
const clearPage = (pageIdx) => {
|
|
@@ -4597,7 +4625,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4597
4625
|
if (!state || state.rendered) return;
|
|
4598
4626
|
state.rendered = true;
|
|
4599
4627
|
try {
|
|
4600
|
-
const page = await
|
|
4628
|
+
const page = await pdfDocument.getPage(pageIdx + 1);
|
|
4601
4629
|
const meta = pagesMeta[pageIdx];
|
|
4602
4630
|
const scale = options.fit === "actual" ? zoomFactor : Math.max(0.05, Math.min(5, getPdfAvailableWidth(size.width) / rotatedPdfWidth(meta, rotation) * zoomFactor));
|
|
4603
4631
|
const viewport = page.getViewport({ scale, rotation });
|
|
@@ -4684,7 +4712,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4684
4712
|
if (!state.rendered) {
|
|
4685
4713
|
void renderPage(pageIdx, size);
|
|
4686
4714
|
}
|
|
4687
|
-
} else if (state.rendered &&
|
|
4715
|
+
} else if (state.rendered && pdfDocument.numPages > 8) {
|
|
4688
4716
|
clearPage(pageIdx);
|
|
4689
4717
|
}
|
|
4690
4718
|
});
|
|
@@ -4695,7 +4723,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4695
4723
|
}
|
|
4696
4724
|
);
|
|
4697
4725
|
}
|
|
4698
|
-
for (let i = 0; i <
|
|
4726
|
+
for (let i = 0; i < pdfDocument.numPages; i++) {
|
|
4699
4727
|
const meta = pagesMeta[i];
|
|
4700
4728
|
const rotatedWidth = rotatedPdfWidth(meta, rotation);
|
|
4701
4729
|
const rotatedHeight = rotatedPdfHeight(meta, rotation);
|
|
@@ -4723,7 +4751,7 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4723
4751
|
}
|
|
4724
4752
|
if (observer) {
|
|
4725
4753
|
window.setTimeout(() => {
|
|
4726
|
-
const eagerPages =
|
|
4754
|
+
const eagerPages = pdfDocument.numPages > 8 ? 2 : pdfDocument.numPages;
|
|
4727
4755
|
for (let i = 0; i < eagerPages; i++) {
|
|
4728
4756
|
void renderPage(i, size);
|
|
4729
4757
|
}
|
|
@@ -4780,10 +4808,10 @@ async function renderPdfDocumentPreview(options) {
|
|
|
4780
4808
|
}
|
|
4781
4809
|
});
|
|
4782
4810
|
pageStates.length = 0;
|
|
4811
|
+
void pdfDocument.destroy?.();
|
|
4783
4812
|
if (options.revokeUrlOnDestroy) {
|
|
4784
4813
|
revokeObjectUrl(options.fileUrl, Boolean(options.isExternal));
|
|
4785
4814
|
}
|
|
4786
|
-
void doc.destroy();
|
|
4787
4815
|
}
|
|
4788
4816
|
};
|
|
4789
4817
|
}
|
|
@@ -4846,6 +4874,13 @@ function normalizePdfOptions(options) {
|
|
|
4846
4874
|
}
|
|
4847
4875
|
return options;
|
|
4848
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
|
+
}
|
|
4849
4884
|
function isCanvasVisuallyBlank(canvas, context) {
|
|
4850
4885
|
if (canvas.width === 0 || canvas.height === 0 || typeof context.getImageData !== "function") {
|
|
4851
4886
|
return false;
|