@prose-reader/enhancer-pdf 1.164.0 → 1.166.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/createArchiveFromPdf.d.ts +1 -1
- package/dist/index.js +29 -20
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +29 -20
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +3 -5
|
@@ -10,5 +10,5 @@ export declare const isPdfJsArchive: (archive: Archive) => archive is PdfJsArchi
|
|
|
10
10
|
* Make sure the urls are on the same origin or the cors header is set otherwise
|
|
11
11
|
* the resource cannot be consumed as it is on the web.
|
|
12
12
|
*/
|
|
13
|
-
export declare const createArchiveFromPdf: (file: Blob) => Promise<Archive>;
|
|
13
|
+
export declare const createArchiveFromPdf: (file: Blob, filename: string) => Promise<Archive>;
|
|
14
14
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,10 @@ const layoutCanvas = (pageProxy, canvas, context) => {
|
|
|
23
23
|
const pixelRatioScale = window.devicePixelRatio || 1;
|
|
24
24
|
const { height: pageHeight, width: pageWidth } = context.getPageSize();
|
|
25
25
|
const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 });
|
|
26
|
-
const pageScale = Math.max(
|
|
26
|
+
const pageScale = Math.max(
|
|
27
|
+
pageWidth / viewportWidth,
|
|
28
|
+
pageHeight / viewportHeight
|
|
29
|
+
);
|
|
27
30
|
const viewport = pageProxy.getViewport({ scale: pageScale });
|
|
28
31
|
const viewportRatio = viewport.width / viewport.height;
|
|
29
32
|
const pageRatio = pageWidth / pageHeight;
|
|
@@ -32,8 +35,8 @@ const layoutCanvas = (pageProxy, canvas, context) => {
|
|
|
32
35
|
const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight;
|
|
33
36
|
canvas.width = Math.floor(viewport.width * pixelRatioScale);
|
|
34
37
|
canvas.height = Math.floor(viewport.height * pixelRatioScale);
|
|
35
|
-
canvas.style.width = Math.floor(canvasWidth)
|
|
36
|
-
canvas.style.height = Math.floor(canvasHeight)
|
|
38
|
+
canvas.style.width = `${Math.floor(canvasWidth)}px`;
|
|
39
|
+
canvas.style.height = `${Math.floor(canvasHeight)}px`;
|
|
37
40
|
};
|
|
38
41
|
|
|
39
42
|
class PdfRenderer extends DocumentRenderer {
|
|
@@ -145,25 +148,27 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
145
148
|
})
|
|
146
149
|
);
|
|
147
150
|
}
|
|
148
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
149
151
|
onLayout({
|
|
150
152
|
spreadPosition
|
|
151
153
|
}) {
|
|
152
154
|
const frameElement = this.getFrameElement();
|
|
153
155
|
const canvas = this.getCanvas();
|
|
154
|
-
if (!frameElement || !canvas) return of(
|
|
156
|
+
if (!frameElement || !canvas) return of(undefined);
|
|
155
157
|
const { height: pageHeight, width: pageWidth } = this.context.getPageSize();
|
|
156
158
|
layoutLayers(this.layers, this.context, spreadPosition);
|
|
157
159
|
const context = canvas?.getContext("2d");
|
|
158
160
|
const pixelRatioScale = window.devicePixelRatio || 1;
|
|
159
|
-
if (!this.pageProxy || !context) return of(
|
|
161
|
+
if (!this.pageProxy || !context) return of(undefined);
|
|
160
162
|
if (this.renderTask) {
|
|
161
163
|
this.renderTask.cancel();
|
|
162
|
-
this.renderTask =
|
|
164
|
+
this.renderTask = undefined;
|
|
163
165
|
}
|
|
164
166
|
layoutCanvas(this.pageProxy, canvas, this.context);
|
|
165
167
|
const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 });
|
|
166
|
-
const pageScale = Math.max(
|
|
168
|
+
const pageScale = Math.max(
|
|
169
|
+
pageWidth / viewportWidth,
|
|
170
|
+
pageHeight / viewportHeight
|
|
171
|
+
);
|
|
167
172
|
const viewport = this.pageProxy.getViewport({ scale: pageScale });
|
|
168
173
|
const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null;
|
|
169
174
|
this.renderTask = this.pageProxy?.render({
|
|
@@ -175,21 +180,25 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
175
180
|
map(() => {
|
|
176
181
|
const frameDoc = frameElement?.contentDocument;
|
|
177
182
|
if (!frameDoc || !frameElement) {
|
|
178
|
-
return
|
|
183
|
+
return undefined;
|
|
179
184
|
}
|
|
180
185
|
frameDoc.body.innerHTML = ``;
|
|
181
186
|
const pdfPage = this.pageProxy;
|
|
182
|
-
if (!pdfPage) return
|
|
187
|
+
if (!pdfPage) return undefined;
|
|
183
188
|
const textLayerElement = frameDoc.createElement(`div`);
|
|
184
189
|
textLayerElement.setAttribute("class", "textLayer");
|
|
185
190
|
frameDoc.body.appendChild(textLayerElement);
|
|
186
191
|
const canvasScale = canvas.clientWidth / viewportWidth;
|
|
187
|
-
textLayerElement.style.top = canvas.offsetTop
|
|
188
|
-
textLayerElement.style.left = canvas.offsetLeft
|
|
192
|
+
textLayerElement.style.top = `${canvas.offsetTop}px`;
|
|
193
|
+
textLayerElement.style.left = `${canvas.offsetLeft}px`;
|
|
189
194
|
textLayerElement.style.height = canvas.style.height;
|
|
190
195
|
textLayerElement.style.width = canvas.style.width;
|
|
191
196
|
removeCSS(frameElement, "pdf-scale-scale");
|
|
192
|
-
injectCSS(
|
|
197
|
+
injectCSS(
|
|
198
|
+
frameElement,
|
|
199
|
+
"pdf-scale-scale",
|
|
200
|
+
`:root { --scale-factor: ${canvasScale}; }`
|
|
201
|
+
);
|
|
193
202
|
if (this.textLayer) {
|
|
194
203
|
this.textLayer.cancel();
|
|
195
204
|
}
|
|
@@ -200,13 +209,13 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
200
209
|
});
|
|
201
210
|
return from(this.textLayer.render());
|
|
202
211
|
}),
|
|
203
|
-
map(() =>
|
|
212
|
+
map(() => undefined),
|
|
204
213
|
catchError((e) => {
|
|
205
214
|
if (!(e instanceof RenderingCancelledException)) console.error(e);
|
|
206
|
-
return of(
|
|
215
|
+
return of(undefined);
|
|
207
216
|
}),
|
|
208
217
|
finalize(() => {
|
|
209
|
-
this.renderTask =
|
|
218
|
+
this.renderTask = undefined;
|
|
210
219
|
})
|
|
211
220
|
);
|
|
212
221
|
}
|
|
@@ -236,7 +245,7 @@ class PdfRenderer extends DocumentRenderer {
|
|
|
236
245
|
|
|
237
246
|
const PDF_SYMBOL = Symbol(`pdfjs`);
|
|
238
247
|
const isPdfJsArchive = (archive) => "_symbol" in archive && archive._symbol === PDF_SYMBOL;
|
|
239
|
-
const createArchiveFromPdf = async (file) => {
|
|
248
|
+
const createArchiveFromPdf = async (file, filename) => {
|
|
240
249
|
const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer());
|
|
241
250
|
const pdf = await loadingTask.promise;
|
|
242
251
|
const pages = Array.from({ length: pdf.numPages });
|
|
@@ -264,7 +273,7 @@ const createArchiveFromPdf = async (file) => {
|
|
|
264
273
|
string: async () => opfFileData
|
|
265
274
|
};
|
|
266
275
|
const archive = {
|
|
267
|
-
filename
|
|
276
|
+
filename,
|
|
268
277
|
proxyDocument: pdf,
|
|
269
278
|
_symbol: PDF_SYMBOL,
|
|
270
279
|
files: [
|
|
@@ -310,10 +319,10 @@ const pdfEnhancer = (next) => (options) => {
|
|
|
310
319
|
},
|
|
311
320
|
getResource: (item) => options.pdf.getArchiveForItem(item).pipe(
|
|
312
321
|
mergeMap((archive) => {
|
|
313
|
-
if (!archive) return of(
|
|
322
|
+
if (!archive) return of(undefined);
|
|
314
323
|
if (!isPdfJsArchive(archive)) {
|
|
315
324
|
console.warn(`You provided an invalid pdf archive`);
|
|
316
|
-
return of(
|
|
325
|
+
return of(undefined);
|
|
317
326
|
}
|
|
318
327
|
const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
|
|
319
328
|
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 { 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, waitForFrameLoad, 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 }),\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 // 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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"}
|
|
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 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 = (\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, 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 =\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 const canvasContainer =\n 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 }),\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 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 } =\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
|
@@ -43,7 +43,10 @@
|
|
|
43
43
|
const pixelRatioScale = window.devicePixelRatio || 1;
|
|
44
44
|
const { height: pageHeight, width: pageWidth } = context.getPageSize();
|
|
45
45
|
const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 });
|
|
46
|
-
const pageScale = Math.max(
|
|
46
|
+
const pageScale = Math.max(
|
|
47
|
+
pageWidth / viewportWidth,
|
|
48
|
+
pageHeight / viewportHeight
|
|
49
|
+
);
|
|
47
50
|
const viewport = pageProxy.getViewport({ scale: pageScale });
|
|
48
51
|
const viewportRatio = viewport.width / viewport.height;
|
|
49
52
|
const pageRatio = pageWidth / pageHeight;
|
|
@@ -52,8 +55,8 @@
|
|
|
52
55
|
const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight;
|
|
53
56
|
canvas.width = Math.floor(viewport.width * pixelRatioScale);
|
|
54
57
|
canvas.height = Math.floor(viewport.height * pixelRatioScale);
|
|
55
|
-
canvas.style.width = Math.floor(canvasWidth)
|
|
56
|
-
canvas.style.height = Math.floor(canvasHeight)
|
|
58
|
+
canvas.style.width = `${Math.floor(canvasWidth)}px`;
|
|
59
|
+
canvas.style.height = `${Math.floor(canvasHeight)}px`;
|
|
57
60
|
};
|
|
58
61
|
|
|
59
62
|
class PdfRenderer extends core.DocumentRenderer {
|
|
@@ -165,25 +168,27 @@
|
|
|
165
168
|
})
|
|
166
169
|
);
|
|
167
170
|
}
|
|
168
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
169
171
|
onLayout({
|
|
170
172
|
spreadPosition
|
|
171
173
|
}) {
|
|
172
174
|
const frameElement = this.getFrameElement();
|
|
173
175
|
const canvas = this.getCanvas();
|
|
174
|
-
if (!frameElement || !canvas) return rxjs.of(
|
|
176
|
+
if (!frameElement || !canvas) return rxjs.of(undefined);
|
|
175
177
|
const { height: pageHeight, width: pageWidth } = this.context.getPageSize();
|
|
176
178
|
layoutLayers(this.layers, this.context, spreadPosition);
|
|
177
179
|
const context = canvas?.getContext("2d");
|
|
178
180
|
const pixelRatioScale = window.devicePixelRatio || 1;
|
|
179
|
-
if (!this.pageProxy || !context) return rxjs.of(
|
|
181
|
+
if (!this.pageProxy || !context) return rxjs.of(undefined);
|
|
180
182
|
if (this.renderTask) {
|
|
181
183
|
this.renderTask.cancel();
|
|
182
|
-
this.renderTask =
|
|
184
|
+
this.renderTask = undefined;
|
|
183
185
|
}
|
|
184
186
|
layoutCanvas(this.pageProxy, canvas, this.context);
|
|
185
187
|
const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 });
|
|
186
|
-
const pageScale = Math.max(
|
|
188
|
+
const pageScale = Math.max(
|
|
189
|
+
pageWidth / viewportWidth,
|
|
190
|
+
pageHeight / viewportHeight
|
|
191
|
+
);
|
|
187
192
|
const viewport = this.pageProxy.getViewport({ scale: pageScale });
|
|
188
193
|
const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null;
|
|
189
194
|
this.renderTask = this.pageProxy?.render({
|
|
@@ -195,21 +200,25 @@
|
|
|
195
200
|
rxjs.map(() => {
|
|
196
201
|
const frameDoc = frameElement?.contentDocument;
|
|
197
202
|
if (!frameDoc || !frameElement) {
|
|
198
|
-
return
|
|
203
|
+
return undefined;
|
|
199
204
|
}
|
|
200
205
|
frameDoc.body.innerHTML = ``;
|
|
201
206
|
const pdfPage = this.pageProxy;
|
|
202
|
-
if (!pdfPage) return
|
|
207
|
+
if (!pdfPage) return undefined;
|
|
203
208
|
const textLayerElement = frameDoc.createElement(`div`);
|
|
204
209
|
textLayerElement.setAttribute("class", "textLayer");
|
|
205
210
|
frameDoc.body.appendChild(textLayerElement);
|
|
206
211
|
const canvasScale = canvas.clientWidth / viewportWidth;
|
|
207
|
-
textLayerElement.style.top = canvas.offsetTop
|
|
208
|
-
textLayerElement.style.left = canvas.offsetLeft
|
|
212
|
+
textLayerElement.style.top = `${canvas.offsetTop}px`;
|
|
213
|
+
textLayerElement.style.left = `${canvas.offsetLeft}px`;
|
|
209
214
|
textLayerElement.style.height = canvas.style.height;
|
|
210
215
|
textLayerElement.style.width = canvas.style.width;
|
|
211
216
|
core.removeCSS(frameElement, "pdf-scale-scale");
|
|
212
|
-
core.injectCSS(
|
|
217
|
+
core.injectCSS(
|
|
218
|
+
frameElement,
|
|
219
|
+
"pdf-scale-scale",
|
|
220
|
+
`:root { --scale-factor: ${canvasScale}; }`
|
|
221
|
+
);
|
|
213
222
|
if (this.textLayer) {
|
|
214
223
|
this.textLayer.cancel();
|
|
215
224
|
}
|
|
@@ -220,13 +229,13 @@
|
|
|
220
229
|
});
|
|
221
230
|
return rxjs.from(this.textLayer.render());
|
|
222
231
|
}),
|
|
223
|
-
rxjs.map(() =>
|
|
232
|
+
rxjs.map(() => undefined),
|
|
224
233
|
rxjs.catchError((e) => {
|
|
225
234
|
if (!(e instanceof pdfjsLib.RenderingCancelledException)) console.error(e);
|
|
226
|
-
return rxjs.of(
|
|
235
|
+
return rxjs.of(undefined);
|
|
227
236
|
}),
|
|
228
237
|
rxjs.finalize(() => {
|
|
229
|
-
this.renderTask =
|
|
238
|
+
this.renderTask = undefined;
|
|
230
239
|
})
|
|
231
240
|
);
|
|
232
241
|
}
|
|
@@ -256,7 +265,7 @@
|
|
|
256
265
|
|
|
257
266
|
const PDF_SYMBOL = Symbol(`pdfjs`);
|
|
258
267
|
const isPdfJsArchive = (archive) => "_symbol" in archive && archive._symbol === PDF_SYMBOL;
|
|
259
|
-
const createArchiveFromPdf = async (file) => {
|
|
268
|
+
const createArchiveFromPdf = async (file, filename) => {
|
|
260
269
|
const loadingTask = pdfjsLib__namespace.getDocument(await file.arrayBuffer());
|
|
261
270
|
const pdf = await loadingTask.promise;
|
|
262
271
|
const pages = Array.from({ length: pdf.numPages });
|
|
@@ -284,7 +293,7 @@
|
|
|
284
293
|
string: async () => opfFileData
|
|
285
294
|
};
|
|
286
295
|
const archive = {
|
|
287
|
-
filename
|
|
296
|
+
filename,
|
|
288
297
|
proxyDocument: pdf,
|
|
289
298
|
_symbol: PDF_SYMBOL,
|
|
290
299
|
files: [
|
|
@@ -330,10 +339,10 @@
|
|
|
330
339
|
},
|
|
331
340
|
getResource: (item) => options.pdf.getArchiveForItem(item).pipe(
|
|
332
341
|
rxjs.mergeMap((archive) => {
|
|
333
|
-
if (!archive) return rxjs.of(
|
|
342
|
+
if (!archive) return rxjs.of(undefined);
|
|
334
343
|
if (!isPdfJsArchive(archive)) {
|
|
335
344
|
console.warn(`You provided an invalid pdf archive`);
|
|
336
|
-
return rxjs.of(
|
|
345
|
+
return rxjs.of(undefined);
|
|
337
346
|
}
|
|
338
347
|
const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
|
|
339
348
|
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 { 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, waitForFrameLoad, 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 }),\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 // 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","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 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 = (\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, 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 =\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 const canvasContainer =\n 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 }),\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 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 } =\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.166.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.umd.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -16,9 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
18
|
"start": "vite build --watch --mode development",
|
|
19
|
-
"build": "tsc && vite build"
|
|
20
|
-
"lint:read": "prettier --check . && eslint . --ext .ts,.tsx,.js,.jsx",
|
|
21
|
-
"lint:write": "prettier --write . && eslint --fix . --ext .ts,.tsx,.js,.jsx"
|
|
19
|
+
"build": "tsc && vite build"
|
|
22
20
|
},
|
|
23
21
|
"devDependencies": {
|
|
24
22
|
"pdfjs-dist": "^4.8.69"
|
|
@@ -28,5 +26,5 @@
|
|
|
28
26
|
"pdfjs-dist": "^4.8.69",
|
|
29
27
|
"rxjs": "*"
|
|
30
28
|
},
|
|
31
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "949886f6d3d44e3b3034bf8d71bbb1abe7e76fb4"
|
|
32
30
|
}
|