@prose-reader/enhancer-pdf 1.180.0 → 1.185.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 +10 -10
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +10 -10
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -138,15 +138,15 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
138
138
|
}) {
|
|
139
139
|
const frameElement = this.getFrameElement();
|
|
140
140
|
const canvas = this.getCanvas();
|
|
141
|
-
if (!frameElement || !canvas) return of(
|
|
141
|
+
if (!frameElement || !canvas) return of(void 0);
|
|
142
142
|
const { height: pageHeight, width: pageWidth } = this.context.getPageSize();
|
|
143
143
|
layoutContainer(this.documentContainer, this.context, spreadPosition);
|
|
144
144
|
const context = canvas?.getContext("2d");
|
|
145
145
|
const pixelRatioScale = window.devicePixelRatio || 1;
|
|
146
|
-
if (!this.pageProxy || !context) return of(
|
|
146
|
+
if (!this.pageProxy || !context) return of(void 0);
|
|
147
147
|
if (this.renderTask) {
|
|
148
148
|
this.renderTask.cancel();
|
|
149
|
-
this.renderTask =
|
|
149
|
+
this.renderTask = void 0;
|
|
150
150
|
}
|
|
151
151
|
layoutCanvas(this.pageProxy, canvas, this.context);
|
|
152
152
|
const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 });
|
|
@@ -165,11 +165,11 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
165
165
|
map(() => {
|
|
166
166
|
const frameDoc = frameElement?.contentDocument;
|
|
167
167
|
if (!frameDoc || !frameElement) {
|
|
168
|
-
return
|
|
168
|
+
return void 0;
|
|
169
169
|
}
|
|
170
170
|
frameDoc.body.innerHTML = ``;
|
|
171
171
|
const pdfPage = this.pageProxy;
|
|
172
|
-
if (!pdfPage) return
|
|
172
|
+
if (!pdfPage) return void 0;
|
|
173
173
|
const textLayerElement = frameDoc.createElement(`div`);
|
|
174
174
|
textLayerElement.setAttribute("class", "textLayer");
|
|
175
175
|
frameDoc.body.appendChild(textLayerElement);
|
|
@@ -194,13 +194,13 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
194
194
|
});
|
|
195
195
|
return from(this.textLayer.render());
|
|
196
196
|
}),
|
|
197
|
-
map(() =>
|
|
197
|
+
map(() => void 0),
|
|
198
198
|
catchError((e) => {
|
|
199
199
|
if (!(e instanceof RenderingCancelledException)) console.error(e);
|
|
200
|
-
return of(
|
|
200
|
+
return of(void 0);
|
|
201
201
|
}),
|
|
202
202
|
finalize(() => {
|
|
203
|
-
this.renderTask =
|
|
203
|
+
this.renderTask = void 0;
|
|
204
204
|
})
|
|
205
205
|
);
|
|
206
206
|
}
|
|
@@ -304,10 +304,10 @@ const pdfEnhancer = (next) => (options) => {
|
|
|
304
304
|
},
|
|
305
305
|
getResource: (item) => options.pdf.getArchiveForItem(item).pipe(
|
|
306
306
|
mergeMap((archive) => {
|
|
307
|
-
if (!archive) return of(
|
|
307
|
+
if (!archive) return of(void 0);
|
|
308
308
|
if (!isPdfJsArchive(archive)) {
|
|
309
309
|
console.warn(`You provided an invalid pdf archive`);
|
|
310
|
-
return of(
|
|
310
|
+
return of(void 0);
|
|
311
311
|
}
|
|
312
312
|
const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
|
|
313
313
|
return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(
|
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 type { Reader } from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutContainer = (\n container: HTMLElement | undefined,\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n if (!container) return\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 container.style.width = `${pageWidth}px`\n container.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n container.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n container.style.justifyContent = `flex-end`\n } else {\n container.style.justifyContent = `center`\n }\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n context: Reader[\"context\"],\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n 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 {\n catchError,\n EMPTY,\n finalize,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n DocumentRenderer,\n injectCSS,\n removeCSS,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutContainer } 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.documentContainer?.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.documentContainer?.children[1].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.detach()\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<HTMLElement> {\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 =\n 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\n frameContainer.appendChild(frameElement)\n\n const rootElement = this.containerElement.ownerDocument.createElement(`div`)\n rootElement.style.cssText = `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n\n rootElement.appendChild(canvas)\n rootElement.appendChild(frameContainer)\n\n this.documentContainer = rootElement\n\n return of(rootElement)\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.attach()\n }),\n waitForFrameLoad,\n tap(() => {\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 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 layoutContainer(this.documentContainer, 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 } =\n this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : 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(\n frameElement,\n \"pdf-scale-scale\",\n `:root { --scale-factor: ${canvasScale}; }`,\n )\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 type { 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 (\n file: Blob,\n filename: string,\n): 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,\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 type { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { 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>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\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) =>\n 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 =\n archive.files.findIndex((file) => item.href.endsWith(file.uri)) -\n 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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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutContainer = (\n container: HTMLElement | undefined,\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n if (!container) return\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 container.style.width = `${pageWidth}px`\n container.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n container.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n container.style.justifyContent = `flex-end`\n } else {\n container.style.justifyContent = `center`\n }\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n context: Reader[\"context\"],\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n 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 {\n catchError,\n EMPTY,\n finalize,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n DocumentRenderer,\n injectCSS,\n removeCSS,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutContainer } 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.documentContainer?.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.documentContainer?.children[1].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.detach()\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<HTMLElement> {\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 =\n 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\n frameContainer.appendChild(frameElement)\n\n const rootElement = this.containerElement.ownerDocument.createElement(`div`)\n rootElement.style.cssText = `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n\n rootElement.appendChild(canvas)\n rootElement.appendChild(frameContainer)\n\n this.documentContainer = rootElement\n\n return of(rootElement)\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.attach()\n }),\n waitForFrameLoad,\n tap(() => {\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 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 layoutContainer(this.documentContainer, 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 } =\n this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : 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(\n frameElement,\n \"pdf-scale-scale\",\n `:root { --scale-factor: ${canvasScale}; }`,\n )\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 type { 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 (\n file: Blob,\n filename: string,\n): 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,\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 type { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { 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>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\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) =>\n 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 =\n archive.files.findIndex((file) => item.href.endsWith(file.uri)) -\n 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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"}
|
package/dist/index.umd.cjs
CHANGED
|
@@ -158,15 +158,15 @@
|
|
|
158
158
|
}) {
|
|
159
159
|
const frameElement = this.getFrameElement();
|
|
160
160
|
const canvas = this.getCanvas();
|
|
161
|
-
if (!frameElement || !canvas) return rxjs.of(
|
|
161
|
+
if (!frameElement || !canvas) return rxjs.of(void 0);
|
|
162
162
|
const { height: pageHeight, width: pageWidth } = this.context.getPageSize();
|
|
163
163
|
layoutContainer(this.documentContainer, this.context, spreadPosition);
|
|
164
164
|
const context = canvas?.getContext("2d");
|
|
165
165
|
const pixelRatioScale = window.devicePixelRatio || 1;
|
|
166
|
-
if (!this.pageProxy || !context) return rxjs.of(
|
|
166
|
+
if (!this.pageProxy || !context) return rxjs.of(void 0);
|
|
167
167
|
if (this.renderTask) {
|
|
168
168
|
this.renderTask.cancel();
|
|
169
|
-
this.renderTask =
|
|
169
|
+
this.renderTask = void 0;
|
|
170
170
|
}
|
|
171
171
|
layoutCanvas(this.pageProxy, canvas, this.context);
|
|
172
172
|
const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 });
|
|
@@ -185,11 +185,11 @@
|
|
|
185
185
|
rxjs.map(() => {
|
|
186
186
|
const frameDoc = frameElement?.contentDocument;
|
|
187
187
|
if (!frameDoc || !frameElement) {
|
|
188
|
-
return
|
|
188
|
+
return void 0;
|
|
189
189
|
}
|
|
190
190
|
frameDoc.body.innerHTML = ``;
|
|
191
191
|
const pdfPage = this.pageProxy;
|
|
192
|
-
if (!pdfPage) return
|
|
192
|
+
if (!pdfPage) return void 0;
|
|
193
193
|
const textLayerElement = frameDoc.createElement(`div`);
|
|
194
194
|
textLayerElement.setAttribute("class", "textLayer");
|
|
195
195
|
frameDoc.body.appendChild(textLayerElement);
|
|
@@ -214,13 +214,13 @@
|
|
|
214
214
|
});
|
|
215
215
|
return rxjs.from(this.textLayer.render());
|
|
216
216
|
}),
|
|
217
|
-
rxjs.map(() =>
|
|
217
|
+
rxjs.map(() => void 0),
|
|
218
218
|
rxjs.catchError((e) => {
|
|
219
219
|
if (!(e instanceof pdfjsLib.RenderingCancelledException)) console.error(e);
|
|
220
|
-
return rxjs.of(
|
|
220
|
+
return rxjs.of(void 0);
|
|
221
221
|
}),
|
|
222
222
|
rxjs.finalize(() => {
|
|
223
|
-
this.renderTask =
|
|
223
|
+
this.renderTask = void 0;
|
|
224
224
|
})
|
|
225
225
|
);
|
|
226
226
|
}
|
|
@@ -324,10 +324,10 @@
|
|
|
324
324
|
},
|
|
325
325
|
getResource: (item) => options.pdf.getArchiveForItem(item).pipe(
|
|
326
326
|
rxjs.mergeMap((archive) => {
|
|
327
|
-
if (!archive) return rxjs.of(
|
|
327
|
+
if (!archive) return rxjs.of(void 0);
|
|
328
328
|
if (!isPdfJsArchive(archive)) {
|
|
329
329
|
console.warn(`You provided an invalid pdf archive`);
|
|
330
|
-
return rxjs.of(
|
|
330
|
+
return rxjs.of(void 0);
|
|
331
331
|
}
|
|
332
332
|
const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
|
|
333
333
|
return rxjs.from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -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 type { Reader } from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutContainer = (\n container: HTMLElement | undefined,\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n if (!container) return\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 container.style.width = `${pageWidth}px`\n container.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n container.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n container.style.justifyContent = `flex-end`\n } else {\n container.style.justifyContent = `center`\n }\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n context: Reader[\"context\"],\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n 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 {\n catchError,\n EMPTY,\n finalize,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n DocumentRenderer,\n injectCSS,\n removeCSS,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutContainer } 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.documentContainer?.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.documentContainer?.children[1].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.detach()\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<HTMLElement> {\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 =\n 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\n frameContainer.appendChild(frameElement)\n\n const rootElement = this.containerElement.ownerDocument.createElement(`div`)\n rootElement.style.cssText = `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n\n rootElement.appendChild(canvas)\n rootElement.appendChild(frameContainer)\n\n this.documentContainer = rootElement\n\n return of(rootElement)\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.attach()\n }),\n waitForFrameLoad,\n tap(() => {\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 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 layoutContainer(this.documentContainer, 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 } =\n this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : 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(\n frameElement,\n \"pdf-scale-scale\",\n `:root { --scale-factor: ${canvasScale}; }`,\n )\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 type { 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 (\n file: Blob,\n filename: string,\n): 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,\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 type { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { 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>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\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) =>\n 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 =\n archive.files.findIndex((file) => item.href.endsWith(file.uri)) -\n 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","waitForFrameLoad","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 type { Reader } from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutContainer = (\n container: HTMLElement | undefined,\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n if (!container) return\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 container.style.width = `${pageWidth}px`\n container.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n container.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n container.style.justifyContent = `flex-end`\n } else {\n container.style.justifyContent = `center`\n }\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n context: Reader[\"context\"],\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n 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 {\n catchError,\n EMPTY,\n finalize,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n DocumentRenderer,\n injectCSS,\n removeCSS,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutContainer } 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.documentContainer?.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.documentContainer?.children[1].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.detach()\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<HTMLElement> {\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 =\n 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\n frameContainer.appendChild(frameElement)\n\n const rootElement = this.containerElement.ownerDocument.createElement(`div`)\n rootElement.style.cssText = `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n\n rootElement.appendChild(canvas)\n rootElement.appendChild(frameContainer)\n\n this.documentContainer = rootElement\n\n return of(rootElement)\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.attach()\n }),\n waitForFrameLoad,\n tap(() => {\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 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 layoutContainer(this.documentContainer, 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 } =\n this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\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 =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : 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(\n frameElement,\n \"pdf-scale-scale\",\n `:root { --scale-factor: ${canvasScale}; }`,\n )\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 type { 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 (\n file: Blob,\n filename: string,\n): 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,\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 type { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { 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>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\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) =>\n 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 =\n archive.files.findIndex((file) => item.href.endsWith(file.uri)) -\n 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","waitForFrameLoad","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.
|
|
3
|
+
"version": "1.185.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.umd.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"pdfjs-dist": "4.x",
|
|
27
27
|
"rxjs": "*"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "8a1b7236ea277b81b31801ce31f3771fd2240048"
|
|
30
30
|
}
|