postext-pdf 0.1.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/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/__bench__/render.bench.test.d.ts +2 -0
- package/dist/__bench__/render.bench.test.d.ts.map +1 -0
- package/dist/__bench__/render.bench.test.js +86 -0
- package/dist/__bench__/render.bench.test.js.map +1 -0
- package/dist/__tests__/accessibility.test.d.ts +2 -0
- package/dist/__tests__/accessibility.test.d.ts.map +1 -0
- package/dist/__tests__/accessibility.test.js +364 -0
- package/dist/__tests__/accessibility.test.js.map +1 -0
- package/dist/__tests__/contentsLinks.test.d.ts +2 -0
- package/dist/__tests__/contentsLinks.test.d.ts.map +1 -0
- package/dist/__tests__/contentsLinks.test.js +131 -0
- package/dist/__tests__/contentsLinks.test.js.map +1 -0
- package/dist/__tests__/fontCache.test.d.ts +2 -0
- package/dist/__tests__/fontCache.test.d.ts.map +1 -0
- package/dist/__tests__/fontCache.test.js +42 -0
- package/dist/__tests__/fontCache.test.js.map +1 -0
- package/dist/__tests__/headerFooter.test.d.ts +2 -0
- package/dist/__tests__/headerFooter.test.d.ts.map +1 -0
- package/dist/__tests__/headerFooter.test.js +68 -0
- package/dist/__tests__/headerFooter.test.js.map +1 -0
- package/dist/__tests__/rotatedTable.test.d.ts +2 -0
- package/dist/__tests__/rotatedTable.test.d.ts.map +1 -0
- package/dist/__tests__/rotatedTable.test.js +112 -0
- package/dist/__tests__/rotatedTable.test.js.map +1 -0
- package/dist/__tests__/svgVector.test.d.ts +2 -0
- package/dist/__tests__/svgVector.test.d.ts.map +1 -0
- package/dist/__tests__/svgVector.test.js +322 -0
- package/dist/__tests__/svgVector.test.js.map +1 -0
- package/dist/__tests__/toUnicode.test.d.ts +2 -0
- package/dist/__tests__/toUnicode.test.d.ts.map +1 -0
- package/dist/__tests__/toUnicode.test.js +57 -0
- package/dist/__tests__/toUnicode.test.js.map +1 -0
- package/dist/colors.d.ts +23 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +47 -0
- package/dist/colors.js.map +1 -0
- package/dist/fontCache.d.ts +41 -0
- package/dist/fontCache.d.ts.map +1 -0
- package/dist/fontCache.js +154 -0
- package/dist/fontCache.js.map +1 -0
- package/dist/fontString.d.ts +14 -0
- package/dist/fontString.d.ts.map +1 -0
- package/dist/fontString.js +43 -0
- package/dist/fontString.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/pdf-backend/blockRender.d.ts +15 -0
- package/dist/pdf-backend/blockRender.d.ts.map +1 -0
- package/dist/pdf-backend/blockRender.js +244 -0
- package/dist/pdf-backend/blockRender.js.map +1 -0
- package/dist/pdf-backend/fontHelpers.d.ts +6 -0
- package/dist/pdf-backend/fontHelpers.d.ts.map +1 -0
- package/dist/pdf-backend/fontHelpers.js +81 -0
- package/dist/pdf-backend/fontHelpers.js.map +1 -0
- package/dist/pdf-backend/headerFooter.d.ts +15 -0
- package/dist/pdf-backend/headerFooter.d.ts.map +1 -0
- package/dist/pdf-backend/headerFooter.js +145 -0
- package/dist/pdf-backend/headerFooter.js.map +1 -0
- package/dist/pdf-backend/index.d.ts +47 -0
- package/dist/pdf-backend/index.d.ts.map +1 -0
- package/dist/pdf-backend/index.js +227 -0
- package/dist/pdf-backend/index.js.map +1 -0
- package/dist/pdf-backend/links.d.ts +44 -0
- package/dist/pdf-backend/links.d.ts.map +1 -0
- package/dist/pdf-backend/links.js +110 -0
- package/dist/pdf-backend/links.js.map +1 -0
- package/dist/pdf-backend/outlines.d.ts +8 -0
- package/dist/pdf-backend/outlines.d.ts.map +1 -0
- package/dist/pdf-backend/outlines.js +145 -0
- package/dist/pdf-backend/outlines.js.map +1 -0
- package/dist/pdf-backend/pageDecorations.d.ts +13 -0
- package/dist/pdf-backend/pageDecorations.d.ts.map +1 -0
- package/dist/pdf-backend/pageDecorations.js +88 -0
- package/dist/pdf-backend/pageDecorations.js.map +1 -0
- package/dist/pdf-backend/pageLabels.d.ts +8 -0
- package/dist/pdf-backend/pageLabels.d.ts.map +1 -0
- package/dist/pdf-backend/pageLabels.js +61 -0
- package/dist/pdf-backend/pageLabels.js.map +1 -0
- package/dist/pdf-backend/primitives.d.ts +46 -0
- package/dist/pdf-backend/primitives.d.ts.map +1 -0
- package/dist/pdf-backend/primitives.js +162 -0
- package/dist/pdf-backend/primitives.js.map +1 -0
- package/dist/pdf-backend/renderResourceBlock.d.ts +87 -0
- package/dist/pdf-backend/renderResourceBlock.d.ts.map +1 -0
- package/dist/pdf-backend/renderResourceBlock.js +753 -0
- package/dist/pdf-backend/renderResourceBlock.js.map +1 -0
- package/dist/pdf-backend/structureFlow.d.ts +55 -0
- package/dist/pdf-backend/structureFlow.d.ts.map +1 -0
- package/dist/pdf-backend/structureFlow.js +180 -0
- package/dist/pdf-backend/structureFlow.js.map +1 -0
- package/dist/pdf-backend/svgVector.d.ts +144 -0
- package/dist/pdf-backend/svgVector.d.ts.map +1 -0
- package/dist/pdf-backend/svgVector.js +1455 -0
- package/dist/pdf-backend/svgVector.js.map +1 -0
- package/dist/pdf-backend/tagging.d.ts +136 -0
- package/dist/pdf-backend/tagging.d.ts.map +1 -0
- package/dist/pdf-backend/tagging.js +296 -0
- package/dist/pdf-backend/tagging.js.map +1 -0
- package/dist/woff2.d.ts +11 -0
- package/dist/woff2.d.ts.map +1 -0
- package/dist/woff2.js +47 -0
- package/dist/woff2.js.map +1 -0
- package/dist/worker/client.d.ts +30 -0
- package/dist/worker/client.d.ts.map +1 -0
- package/dist/worker/client.js +112 -0
- package/dist/worker/client.js.map +1 -0
- package/dist/worker/pdf.worker.d.ts +2 -0
- package/dist/worker/pdf.worker.d.ts.map +1 -0
- package/dist/worker/pdf.worker.js +67 -0
- package/dist/worker/pdf.worker.js.map +1 -0
- package/dist/worker/protocol.d.ts +49 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +2 -0
- package/dist/worker/protocol.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF rendering of resource blocks (issue #49 §7).
|
|
3
|
+
*
|
|
4
|
+
* Draws an embedded `Resource` (bitmap / svg / table) plus its caption into a
|
|
5
|
+
* pdf-lib page. Image payloads live out-of-band (IndexedDB in the sandbox); the
|
|
6
|
+
* host supplies their raw bytes via {@link RenderToPdfOptions.resourceBytes},
|
|
7
|
+
* which {@link preloadResourceImages} embeds into the document up front (PDF
|
|
8
|
+
* embedding is async; page rendering is sync).
|
|
9
|
+
*
|
|
10
|
+
* The bytes are sniffed, so the host never has to say what it hands over:
|
|
11
|
+
* - `%PDF` → the first page is embedded as a form XObject and drawn
|
|
12
|
+
* verbatim (vector print masters, `Resource.svg.pdfFileId`);
|
|
13
|
+
* - SVG → single-ink recolouring when `diagramStyle.singleInk` is on,
|
|
14
|
+
* then vector emission through {@link svgToVectorDrawing}, with
|
|
15
|
+
* `text` set in fonts loaded through the document's
|
|
16
|
+
* {@link FontCache} (same provider as the body text); SVGs
|
|
17
|
+
* outside the supported subset are rasterised (browser only) at
|
|
18
|
+
* {@link RASTER_DPI} for their largest placement;
|
|
19
|
+
* - PNG / JPEG / WebP / GIF → `embedPng` / `embedJpg` (WebP is decoded to
|
|
20
|
+
* PNG via a canvas first; browser only).
|
|
21
|
+
* A missing or undecodable payload leaves the map entry absent and the
|
|
22
|
+
* renderer draws a neutral placeholder.
|
|
23
|
+
*
|
|
24
|
+
* Inline `:ref` segments render in the link colour and, via {@link LinkRegistry},
|
|
25
|
+
* become clickable link annotations targeting the resource embed's destination.
|
|
26
|
+
*/
|
|
27
|
+
import { type PDFImage, type PDFDocument, type PDFEmbeddedPage } from 'pdf-lib';
|
|
28
|
+
import type { VDTBlock, VDTDocument } from 'postext';
|
|
29
|
+
import { FontCache, type PdfFontProvider } from '../fontCache';
|
|
30
|
+
import { type PageCtx } from './primitives';
|
|
31
|
+
import { LinkRegistry } from './links';
|
|
32
|
+
import type { StructureFlow } from './structureFlow';
|
|
33
|
+
import { type VectorDrawing } from './svgVector';
|
|
34
|
+
/** Raw bytes of a resource binary, keyed by `fileId`. */
|
|
35
|
+
export type ResourceBytesProvider = (fileId: string) => Uint8Array | undefined;
|
|
36
|
+
/** One embedded resource payload, ready to draw on any page. */
|
|
37
|
+
export type EmbeddedResource = {
|
|
38
|
+
kind: 'image';
|
|
39
|
+
image: PDFImage;
|
|
40
|
+
} | {
|
|
41
|
+
kind: 'page';
|
|
42
|
+
page: PDFEmbeddedPage;
|
|
43
|
+
} | {
|
|
44
|
+
kind: 'vector';
|
|
45
|
+
drawing: VectorDrawing;
|
|
46
|
+
};
|
|
47
|
+
/** Embedded resources keyed by `fileId`, shared across pages. */
|
|
48
|
+
export type ResourceImageMap = Map<string, EmbeddedResource>;
|
|
49
|
+
/** Resolution of the raster fallback for SVGs the vector path cannot emit,
|
|
50
|
+
* relative to the figure's largest placement on the page. Diagrams are line
|
|
51
|
+
* art with small type, so this sits above the 300 dpi photographs need. */
|
|
52
|
+
export declare const RASTER_DPI = 600;
|
|
53
|
+
type Sniffed = 'pdf' | 'svg' | 'png' | 'jpeg' | 'webp' | 'gif' | 'unknown';
|
|
54
|
+
/** Identify a payload from its leading bytes. */
|
|
55
|
+
export declare function sniffBytes(bytes: Uint8Array): Sniffed;
|
|
56
|
+
/** Rasterises SVG markup to PNG bytes at a pixel size; null when it cannot. */
|
|
57
|
+
export type SvgRasterizer = (svgText: string, widthPx: number, heightPx: number) => Promise<Uint8Array | null>;
|
|
58
|
+
/** Rasterise SVG markup to PNG bytes at the given pixel size, through an
|
|
59
|
+
* `Image` and a canvas of the document. Browser main thread only (a
|
|
60
|
+
* worker cannot decode SVG); returns null elsewhere or when the SVG does
|
|
61
|
+
* not decode. The default {@link SvgRasterizer}. */
|
|
62
|
+
export declare function rasterizeSvgWithDom(svgText: string, widthPx: number, heightPx: number): Promise<Uint8Array | null>;
|
|
63
|
+
/** Before an SVG with text is rasterised through an `<img>` — which cannot
|
|
64
|
+
* see any page font — embed the faces its runs ask for as `@font-face` data
|
|
65
|
+
* URIs, fetched from the same provider the body text uses. Families the
|
|
66
|
+
* provider cannot supply are skipped (the image falls back to a system
|
|
67
|
+
* face, as the screen preview would). */
|
|
68
|
+
export declare function inlineSvgFontsForRaster(svgText: string, fontStrings: string[], provider: PdfFontProvider): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* Embed every bitmap / svg / print-master resource referenced in the
|
|
71
|
+
* document. Returns a map of `fileId → EmbeddedResource` consumed by
|
|
72
|
+
* {@link renderResourceBlock} and the design-overlay image blocks. A missing or
|
|
73
|
+
* undecodable payload is simply absent from the map and the renderer draws a
|
|
74
|
+
* placeholder.
|
|
75
|
+
*/
|
|
76
|
+
export declare function preloadResourceImages(pdfDoc: PDFDocument, doc: VDTDocument, bytesProvider: ResourceBytesProvider | undefined, fontCache?: FontCache, fontProvider?: PdfFontProvider,
|
|
77
|
+
/** Map to add to (a book renders several documents into one PDF; a
|
|
78
|
+
* resource is embedded once for all of them). */
|
|
79
|
+
into?: ResourceImageMap,
|
|
80
|
+
/** How to rasterise an SVG outside the vector subset; the document's
|
|
81
|
+
* own `Image` by default (a worker hands the job to its host). */
|
|
82
|
+
rasterizeSvg?: SvgRasterizer): Promise<ResourceImageMap>;
|
|
83
|
+
/** Draw an embedded resource fitted to a box in document pixels (top-down). */
|
|
84
|
+
export declare function drawEmbeddedResource(ctx: PageCtx, res: EmbeddedResource, xPx: number, yPx: number, wPx: number, hPx: number): void;
|
|
85
|
+
export declare function renderResourceBlock(ctx: PageCtx, block: VDTBlock, fontCache: FontCache, images: ResourceImageMap, linkRegistry: LinkRegistry | undefined, structure?: StructureFlow): void;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=renderResourceBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderResourceBlock.d.ts","sourceRoot":"","sources":["../../src/pdf-backend/renderResourceBlock.ts"],"names":[],"mappings":"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"}
|