@prose-reader/enhancer-pdf 1.137.0 → 1.139.0

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.js CHANGED
@@ -236,22 +236,49 @@ const isPdfJsArchive = (archive) => "_symbol" in archive && archive._symbol ===
236
236
  const createArchiveFromPdf = async (file) => {
237
237
  const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer());
238
238
  const pdf = await loadingTask.promise;
239
+ const pages = Array.from({ length: pdf.numPages });
240
+ const opfFileData = `
241
+ <?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
242
+ <metadata>
243
+ <meta property="rendition:layout">pre-paginated</meta>
244
+ </metadata>
245
+ <manifest>
246
+ ${pages.map((_, index) => `<item id="${index}" href="${index}.pdf" />`).join(`
247
+ `)}
248
+ </manifest>
249
+ <spine>
250
+ ${pages.map((_, index) => `<itemref idref="${index}" />`).join(`
251
+ `)}
252
+ </spine>
253
+ </package>
254
+ `;
255
+ const opfFile = {
256
+ dir: false,
257
+ basename: `content.opf`,
258
+ uri: `content.opf`,
259
+ size: 0,
260
+ blob: async () => new Blob(),
261
+ string: async () => opfFileData
262
+ };
239
263
  const archive = {
240
264
  filename: file.name,
241
265
  proxyDocument: pdf,
242
266
  _symbol: PDF_SYMBOL,
243
- files: Array.from(Array(pdf.numPages)).map((_, index) => ({
244
- dir: false,
245
- blob: async () => {
246
- throw new Error("Unable to get blob from pdf");
247
- },
248
- basename: `${index}.pdf`,
249
- size: 0,
250
- string: () => {
251
- throw new Error("Unable to get blob from pdf");
252
- },
253
- uri: `${index}.pdf`
254
- })),
267
+ files: [
268
+ opfFile,
269
+ ...pages.map((_, index) => ({
270
+ dir: false,
271
+ blob: async () => {
272
+ throw new Error("Unable to get blob from pdf");
273
+ },
274
+ basename: `${index}.pdf`,
275
+ size: 0,
276
+ string: () => {
277
+ throw new Error("Unable to get blob from pdf");
278
+ },
279
+ uri: `${index}.pdf`
280
+ }))
281
+ ],
255
282
  close: () => {
256
283
  return pdf.cleanup();
257
284
  }
@@ -285,7 +312,7 @@ const pdfEnhancer = (next) => (options) => {
285
312
  console.warn(`You provided an invalid pdf archive`);
286
313
  return of(void 0);
287
314
  }
288
- const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri));
315
+ const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
289
316
  return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(
290
317
  map((pageProxy) => ({
291
318
  custom: true,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import { Reader } from \"@prose-reader/core\"\nimport { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (pageProxy: PDFPageProxy, canvas: HTMLCanvasElement, context: Reader[\"context\"]) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = Math.floor(canvasWidth) + \"px\"\n canvas.style.height = Math.floor(canvasHeight) + \"px\"\n}\n","import { catchError, EMPTY, finalize, from, map, Observable, of, switchMap, tap } from \"rxjs\"\nimport { PDFPageProxy, RenderingCancelledException, RenderTask, TextLayer } from \"pdfjs-dist\"\nimport { DocumentRenderer, injectCSS, removeCSS, waitForFrameReady, waitForSwitch } from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer = this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer = this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n // frame will instantly load, no need to wait for event\n\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = canvas.offsetTop + \"px\"\n textLayerElement.style.left = canvas.offsetLeft + \"px\"\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(frameElement, \"pdf-scale-scale\", `:root { --scale-factor: ${canvasScale}; }`)\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (file: Blob): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const archive = {\n filename: file.name,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: Array.from(Array(pdf.numPages)).map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(next: (options: InheritOptions) => InheritOutput) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) => new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri))\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import { Reader } from \"@prose-reader/core\"\nimport { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (pageProxy: PDFPageProxy, canvas: HTMLCanvasElement, context: Reader[\"context\"]) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = Math.floor(canvasWidth) + \"px\"\n canvas.style.height = Math.floor(canvasHeight) + \"px\"\n}\n","import { catchError, EMPTY, finalize, from, map, Observable, of, switchMap, tap } from \"rxjs\"\nimport { PDFPageProxy, RenderingCancelledException, RenderTask, TextLayer } from \"pdfjs-dist\"\nimport { DocumentRenderer, injectCSS, removeCSS, waitForFrameReady, waitForSwitch } from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer = this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer = this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n // frame will instantly load, no need to wait for event\n\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = canvas.offsetTop + \"px\"\n textLayerElement.style.left = canvas.offsetLeft + \"px\"\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(frameElement, \"pdf-scale-scale\", `:root { --scale-factor: ${canvasScale}; }`)\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (file: Blob): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pages.map((_, index) => `<item id=\"${index}\" href=\"${index}.pdf\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pages.map((_, index) => `<itemref idref=\"${index}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n blob: async () => new Blob(),\n string: async () => opfFileData,\n }\n\n const archive = {\n filename: file.name,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n ],\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(next: (options: InheritOptions) => InheritOutput) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) => new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":[],"mappings":"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"}
@@ -256,22 +256,49 @@
256
256
  const createArchiveFromPdf = async (file) => {
257
257
  const loadingTask = pdfjsLib__namespace.getDocument(await file.arrayBuffer());
258
258
  const pdf = await loadingTask.promise;
259
+ const pages = Array.from({ length: pdf.numPages });
260
+ const opfFileData = `
261
+ <?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
262
+ <metadata>
263
+ <meta property="rendition:layout">pre-paginated</meta>
264
+ </metadata>
265
+ <manifest>
266
+ ${pages.map((_, index) => `<item id="${index}" href="${index}.pdf" />`).join(`
267
+ `)}
268
+ </manifest>
269
+ <spine>
270
+ ${pages.map((_, index) => `<itemref idref="${index}" />`).join(`
271
+ `)}
272
+ </spine>
273
+ </package>
274
+ `;
275
+ const opfFile = {
276
+ dir: false,
277
+ basename: `content.opf`,
278
+ uri: `content.opf`,
279
+ size: 0,
280
+ blob: async () => new Blob(),
281
+ string: async () => opfFileData
282
+ };
259
283
  const archive = {
260
284
  filename: file.name,
261
285
  proxyDocument: pdf,
262
286
  _symbol: PDF_SYMBOL,
263
- files: Array.from(Array(pdf.numPages)).map((_, index) => ({
264
- dir: false,
265
- blob: async () => {
266
- throw new Error("Unable to get blob from pdf");
267
- },
268
- basename: `${index}.pdf`,
269
- size: 0,
270
- string: () => {
271
- throw new Error("Unable to get blob from pdf");
272
- },
273
- uri: `${index}.pdf`
274
- })),
287
+ files: [
288
+ opfFile,
289
+ ...pages.map((_, index) => ({
290
+ dir: false,
291
+ blob: async () => {
292
+ throw new Error("Unable to get blob from pdf");
293
+ },
294
+ basename: `${index}.pdf`,
295
+ size: 0,
296
+ string: () => {
297
+ throw new Error("Unable to get blob from pdf");
298
+ },
299
+ uri: `${index}.pdf`
300
+ }))
301
+ ],
275
302
  close: () => {
276
303
  return pdf.cleanup();
277
304
  }
@@ -305,7 +332,7 @@
305
332
  console.warn(`You provided an invalid pdf archive`);
306
333
  return rxjs.of(void 0);
307
334
  }
308
- const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri));
335
+ const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
309
336
  return rxjs.from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(
310
337
  rxjs.map((pageProxy) => ({
311
338
  custom: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import { Reader } from \"@prose-reader/core\"\nimport { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (pageProxy: PDFPageProxy, canvas: HTMLCanvasElement, context: Reader[\"context\"]) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = Math.floor(canvasWidth) + \"px\"\n canvas.style.height = Math.floor(canvasHeight) + \"px\"\n}\n","import { catchError, EMPTY, finalize, from, map, Observable, of, switchMap, tap } from \"rxjs\"\nimport { PDFPageProxy, RenderingCancelledException, RenderTask, TextLayer } from \"pdfjs-dist\"\nimport { DocumentRenderer, injectCSS, removeCSS, waitForFrameReady, waitForSwitch } from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer = this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer = this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n // frame will instantly load, no need to wait for event\n\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = canvas.offsetTop + \"px\"\n textLayerElement.style.left = canvas.offsetLeft + \"px\"\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(frameElement, \"pdf-scale-scale\", `:root { --scale-factor: ${canvasScale}; }`)\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (file: Blob): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const archive = {\n filename: file.name,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: Array.from(Array(pdf.numPages)).map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(next: (options: InheritOptions) => InheritOutput) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) => new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri))\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":["DocumentRenderer","of","from","switchMap","EMPTY","waitForSwitch","tap","injectCSS","waitForFrameReady","map","removeCSS","TextLayer","catchError","RenderingCancelledException","finalize","pdfjsLib","mergeMap"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.cjs","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import { Reader } from \"@prose-reader/core\"\nimport { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (pageProxy: PDFPageProxy, canvas: HTMLCanvasElement, context: Reader[\"context\"]) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = Math.floor(canvasWidth) + \"px\"\n canvas.style.height = Math.floor(canvasHeight) + \"px\"\n}\n","import { catchError, EMPTY, finalize, from, map, Observable, of, switchMap, tap } from \"rxjs\"\nimport { PDFPageProxy, RenderingCancelledException, RenderTask, TextLayer } from \"pdfjs-dist\"\nimport { DocumentRenderer, injectCSS, removeCSS, waitForFrameReady, waitForSwitch } from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer = this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer = this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n // frame will instantly load, no need to wait for event\n\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = canvas.offsetTop + \"px\"\n textLayerElement.style.left = canvas.offsetLeft + \"px\"\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(frameElement, \"pdf-scale-scale\", `:root { --scale-factor: ${canvasScale}; }`)\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (file: Blob): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pages.map((_, index) => `<item id=\"${index}\" href=\"${index}.pdf\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pages.map((_, index) => `<itemref idref=\"${index}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n blob: async () => new Blob(),\n string: async () => opfFileData,\n }\n\n const archive = {\n filename: file.name,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n ],\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(next: (options: InheritOptions) => InheritOutput) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) => new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":["DocumentRenderer","of","from","switchMap","EMPTY","waitForSwitch","tap","injectCSS","waitForFrameReady","map","removeCSS","TextLayer","catchError","RenderingCancelledException","finalize","pdfjsLib","mergeMap"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prose-reader/enhancer-pdf",
3
- "version": "1.137.0",
3
+ "version": "1.139.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.umd.cjs",
6
6
  "module": "./dist/index.js",
@@ -28,5 +28,5 @@
28
28
  "pdfjs-dist": "^4.8.69",
29
29
  "rxjs": "*"
30
30
  },
31
- "gitHead": "0fc1dde216d76c88ec2f10e0046d0d296f30fe84"
31
+ "gitHead": "d1d5f1dfdb4c576a2cdbf1645ddc3944afb7c4b0"
32
32
  }