@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/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 documentTask = pdf.getDocument({
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
- return void 0;
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.destroy?.();
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 <= doc.numPages; pageNumber += 1) {
4587
+ for (let pageNumber = 1; pageNumber <= pdfDocument.numPages; pageNumber += 1) {
4573
4588
  try {
4574
- const page = await doc.getPage(pageNumber);
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, doc.numPages, pagesMeta, options.fit, zoomFactor);
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 doc.getPage(pageIdx + 1);
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 && doc.numPages > 8) {
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 < doc.numPages; 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 = doc.numPages > 8 ? 2 : doc.numPages;
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;