@file-viewer/renderer-pdf 2.1.16 → 2.1.18

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.
Files changed (2) hide show
  1. package/dist/pdf.js +86 -11
  2. package/package.json +3 -3
package/dist/pdf.js CHANGED
@@ -1,6 +1,6 @@
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
- import { registerFileViewerSearchProvider, registerFileViewerZoomProvider, unregisterFileViewerSearchProvider, unregisterFileViewerZoomProvider, registerFileViewerViewStateProvider, unregisterFileViewerViewStateProvider, createFileViewerZoomChangeEmitter, createFileViewerViewStateChange, createFileViewerViewStateChangeEmitter, createFileViewerTranslator, buildPrintPageStyle, formatCssPixels, DEFAULT_PDF_RANGE_CHUNK_SIZE, resolveFileViewerLocale, } from '@file-viewer/core';
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
4
  import { DEFAULT_FILE_VIEWER_PDF_WORKER_PATH, resolveFileViewerPdfAssetUrls, } from '@file-viewer/core/assets';
5
5
  import { pdfViewerStyle } from './pdfStyles.js';
6
6
  export const DEFAULT_FILE_VIEWER_PDF_WORKER_URL = DEFAULT_FILE_VIEWER_PDF_WORKER_PATH;
@@ -242,6 +242,7 @@ export default async function renderPdf(buffer, target, context) {
242
242
  let viewStateApplyVersion = 0;
243
243
  let activeViewStateApplyVersion = 0;
244
244
  let pendingInitialViewState = initialViewState;
245
+ let pendingFitRequest = null;
245
246
  let suppressScrollEventUntil = 0;
246
247
  let scrollStateFrame = 0;
247
248
  let pdfSearchState = createPdfSearchState();
@@ -902,21 +903,33 @@ export default async function renderPdf(buffer, target, context) {
902
903
  emitViewStateChange(action, source);
903
904
  }
904
905
  };
905
- const getPageWidthAtScaleOne = (pdfViewer) => {
906
- var _a;
907
- const pageView = pdfViewer.getPageView(0);
906
+ const getPageSizeAtScaleOne = (pdfViewer) => {
907
+ var _a, _b;
908
+ const pageIndex = Math.max(0, Math.min(pageCount - 1, currentPage - 1));
909
+ const pageView = pdfViewer.getPageView(pageIndex) || pdfViewer.getPageView(0);
908
910
  const pdfPage = pageView === null || pageView === void 0 ? void 0 : pageView.pdfPage;
909
911
  if (pdfPage) {
910
- return pdfPage.getViewport({
912
+ const viewportAtScaleOne = pdfPage.getViewport({
911
913
  scale: PixelsPerInch.PDF_TO_CSS_UNITS,
912
914
  rotation: currentRotation,
913
- }).width;
915
+ });
916
+ return {
917
+ width: viewportAtScaleOne.width,
918
+ height: viewportAtScaleOne.height,
919
+ };
914
920
  }
915
921
  const viewportWidth = (_a = pageView === null || pageView === void 0 ? void 0 : pageView.viewport) === null || _a === void 0 ? void 0 : _a.width;
916
- if (viewportWidth && currentScale) {
917
- return viewportWidth / currentScale;
918
- }
919
- return 0;
922
+ const viewportHeight = (_b = pageView === null || pageView === void 0 ? void 0 : pageView.viewport) === null || _b === void 0 ? void 0 : _b.height;
923
+ if (viewportWidth && viewportHeight && currentScale) {
924
+ return {
925
+ width: viewportWidth / currentScale,
926
+ height: viewportHeight / currentScale,
927
+ };
928
+ }
929
+ return { width: 0, height: 0 };
930
+ };
931
+ const getPageWidthAtScaleOne = (pdfViewer) => {
932
+ return getPageSizeAtScaleOne(pdfViewer).width;
920
933
  };
921
934
  const getFitWidthScale = (pdfViewer) => {
922
935
  const pageWidth = getPageWidthAtScaleOne(pdfViewer);
@@ -935,6 +948,59 @@ export default async function renderPdf(buffer, target, context) {
935
948
  (_a = pdfContext.viewer) === null || _a === void 0 ? void 0 : _a.update();
936
949
  });
937
950
  };
951
+ const applyPdfFit = async (request) => {
952
+ var _a, _b, _c;
953
+ if (!pdfContext.viewer || loadStatus !== 'ready') {
954
+ pendingFitRequest = request;
955
+ return {
956
+ applied: false,
957
+ mode: request.mode,
958
+ resize: request.resize,
959
+ source: request.source,
960
+ reason: 'pending',
961
+ provider: 'view-state',
962
+ };
963
+ }
964
+ const pageSize = getPageSizeAtScaleOne(pdfContext.viewer);
965
+ const mode = request.mode === 'auto' ? 'width' : request.mode;
966
+ const scale = resolveFileViewerFitScale({
967
+ mode,
968
+ viewportWidth: Math.max(96, (request.viewportWidth || container.clientWidth || targetWindow.innerWidth) -
969
+ FIT_HORIZONTAL_PADDING -
970
+ PAGE_BORDER_WIDTH),
971
+ viewportHeight: Math.max(96, (container.clientHeight || request.viewportHeight || targetWindow.innerHeight) -
972
+ PAGE_BORDER_WIDTH),
973
+ contentWidth: pageSize.width,
974
+ contentHeight: pageSize.height,
975
+ currentScale,
976
+ minScale: (_a = request.minScale) !== null && _a !== void 0 ? _a : MIN_SCALE,
977
+ maxScale: (_b = request.maxScale) !== null && _b !== void 0 ? _b : MAX_SCALE,
978
+ });
979
+ if (!scale) {
980
+ return {
981
+ applied: false,
982
+ mode: request.mode,
983
+ resize: request.resize,
984
+ source: request.source,
985
+ reason: 'unmeasurable',
986
+ provider: 'view-state',
987
+ };
988
+ }
989
+ autoFitWidth = request.mode === 'auto' || request.mode === 'width';
990
+ setScale(scale, 'fit', request.source);
991
+ await waitForPaint(targetWindow);
992
+ (_c = pdfContext.viewer) === null || _c === void 0 ? void 0 : _c.update();
993
+ const state = getPdfViewState();
994
+ return {
995
+ applied: true,
996
+ mode: request.mode,
997
+ resize: request.resize,
998
+ scale: state.scale,
999
+ source: request.source,
1000
+ provider: 'view-state',
1001
+ state,
1002
+ };
1003
+ };
938
1004
  const scheduleFitToWidth = () => {
939
1005
  if (!autoFitWidth || !pdfContext.viewer) {
940
1006
  return;
@@ -1207,7 +1273,14 @@ export default async function renderPdf(buffer, target, context) {
1207
1273
  });
1208
1274
  }
1209
1275
  else {
1210
- emitViewStateChange('init', 'viewer');
1276
+ const fitRequest = pendingFitRequest;
1277
+ pendingFitRequest = null;
1278
+ if (fitRequest) {
1279
+ void applyPdfFit(fitRequest);
1280
+ }
1281
+ else {
1282
+ emitViewStateChange('init', 'viewer');
1283
+ }
1211
1284
  }
1212
1285
  if (pdfContext.search) {
1213
1286
  eventBus.dispatch('find', { type: '', query: pdfContext.search });
@@ -1321,12 +1394,14 @@ export default async function renderPdf(buffer, target, context) {
1321
1394
  setScale(scale, 'zoom-change', 'api');
1322
1395
  return getPdfZoomState();
1323
1396
  },
1397
+ fit: applyPdfFit,
1324
1398
  getState: getPdfZoomState,
1325
1399
  subscribe: zoomEmitter.subscribe,
1326
1400
  });
1327
1401
  registerFileViewerViewStateProvider(root, {
1328
1402
  getState: getPdfViewState,
1329
1403
  applyState: applyPdfViewState,
1404
+ fit: applyPdfFit,
1330
1405
  subscribe: viewStateEmitter.subscribe,
1331
1406
  });
1332
1407
  navToggleButton.addEventListener('click', () => toggleNav('user'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@file-viewer/renderer-pdf",
3
- "version": "2.1.16",
3
+ "version": "2.1.18",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Standalone PDF renderer plugin for Flyfish File Viewer powered by PDF.js.",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "funding": {
36
36
  "type": "individual",
37
- "url": "https://dev.flyfish.group/shop"
37
+ "url": "https://dev.flyfish.group/donate?source=npm"
38
38
  },
39
39
  "main": "./dist/index.js",
40
40
  "module": "./dist/index.js",
@@ -54,7 +54,7 @@
54
54
  "LICENSE"
55
55
  ],
56
56
  "dependencies": {
57
- "@file-viewer/core": "^2.1.16",
57
+ "@file-viewer/core": "^2.1.18",
58
58
  "pdfjs-dist": "^6.0.227"
59
59
  },
60
60
  "devDependencies": {