@build-qube/papyra-native-wasm32-wasi 0.0.4 → 0.2.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/package.json +1 -1
- package/papyra.wasi-browser.js +4 -0
- package/papyra.wasi.cjs +5 -1
- package/papyra.wasi.d.cts +195 -0
- package/papyra.wasm32-wasi.wasm +0 -0
package/package.json
CHANGED
package/papyra.wasi-browser.js
CHANGED
|
@@ -601,8 +601,12 @@ try {
|
|
|
601
601
|
throw __attachCleanupErrors(error, cleanupErrors)
|
|
602
602
|
}
|
|
603
603
|
export default __napiModule.exports
|
|
604
|
+
export const PageImage = __napiModule.exports.PageImage
|
|
604
605
|
export const PdfDocument = __napiModule.exports.PdfDocument
|
|
605
606
|
export const backendName = __napiModule.exports.backendName
|
|
606
607
|
export const configureThreadPool = __napiModule.exports.configureThreadPool
|
|
608
|
+
export const encodeBitmap = __napiModule.exports.encodeBitmap
|
|
609
|
+
export const encodeBitmapSync = __napiModule.exports.encodeBitmapSync
|
|
610
|
+
export const ImageFormat = __napiModule.exports.ImageFormat
|
|
607
611
|
export const reserveMemory = __napiModule.exports.reserveMemory
|
|
608
612
|
export const runtime = __napiModule.exports.runtime
|
package/papyra.wasi.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// napi-rs-artifact-metadata:{"version":2,"rootEntry":"index.js","exports":["PdfDocument","backendName","configureThreadPool","reserveMemory","runtime"],"managedRootEntries":["browser.js","index.js","papyra.wasm","papyra.debug.wasm"]}
|
|
1
|
+
// napi-rs-artifact-metadata:{"version":2,"rootEntry":"index.js","exports":["PageImage","PdfDocument","backendName","configureThreadPool","encodeBitmap","encodeBitmapSync","ImageFormat","reserveMemory","runtime"],"managedRootEntries":["browser.js","index.js","papyra.wasm","papyra.debug.wasm"]}
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
/* prettier-ignore */
|
|
4
4
|
|
|
@@ -921,8 +921,12 @@ try {
|
|
|
921
921
|
throw rollback.error
|
|
922
922
|
}
|
|
923
923
|
module.exports = __napiModule.exports
|
|
924
|
+
module.exports.PageImage = __napiModule.exports.PageImage
|
|
924
925
|
module.exports.PdfDocument = __napiModule.exports.PdfDocument
|
|
925
926
|
module.exports.backendName = __napiModule.exports.backendName
|
|
926
927
|
module.exports.configureThreadPool = __napiModule.exports.configureThreadPool
|
|
928
|
+
module.exports.encodeBitmap = __napiModule.exports.encodeBitmap
|
|
929
|
+
module.exports.encodeBitmapSync = __napiModule.exports.encodeBitmapSync
|
|
930
|
+
module.exports.ImageFormat = __napiModule.exports.ImageFormat
|
|
927
931
|
module.exports.reserveMemory = __napiModule.exports.reserveMemory
|
|
928
932
|
module.exports.runtime = __napiModule.exports.runtime
|
package/papyra.wasi.d.cts
CHANGED
|
@@ -1,16 +1,83 @@
|
|
|
1
1
|
/* auto-generated by NAPI-RS */
|
|
2
2
|
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* A rendered page kept in Rust, encoded on demand.
|
|
5
|
+
*
|
|
6
|
+
* The pixels deliberately never cross into JS. A 42x30in drawing at 150 DPI is 6.5 MB
|
|
7
|
+
* raw and a fraction of that encoded, so for export the raw buffer is pure overhead.
|
|
8
|
+
* There is no accessor for it: use `renderPageAsync` when you want the pixels, this
|
|
9
|
+
* when you want a file.
|
|
10
|
+
*/
|
|
11
|
+
export declare class PageImage {
|
|
12
|
+
get width(): number
|
|
13
|
+
get height(): number
|
|
14
|
+
/** Size of the *raw* bitmap held in Rust. Encoded output is much smaller. */
|
|
15
|
+
get byteLength(): number
|
|
16
|
+
/** Encode off the JS thread. */
|
|
17
|
+
encode(format: ImageFormat, quality?: number | undefined | null, signal?: AbortSignal | undefined | null): Promise<Uint8Array>
|
|
18
|
+
/**
|
|
19
|
+
* Blocks the calling thread. Routed through the same `Task` as the async path so
|
|
20
|
+
* the two cannot drift.
|
|
21
|
+
*/
|
|
22
|
+
encodeSync(format: ImageFormat, quality?: number | undefined | null): Uint8Array
|
|
23
|
+
/**
|
|
24
|
+
* Encode straight to a `data:` URL, so neither the pixels nor the encoded bytes
|
|
25
|
+
* cross the boundary — only the finished string does.
|
|
26
|
+
*/
|
|
27
|
+
toDataUrl(format: ImageFormat, quality?: number | undefined | null, signal?: AbortSignal | undefined | null): Promise<string>
|
|
28
|
+
}
|
|
29
|
+
|
|
3
30
|
export declare class PdfDocument {
|
|
4
31
|
/** Load a PDF from raw bytes. */
|
|
5
32
|
static load(data: Uint8Array): PdfDocument
|
|
6
33
|
/** Load an encrypted PDF. */
|
|
7
34
|
static loadWithPassword(data: Uint8Array, password: string): PdfDocument
|
|
8
35
|
get pageCount(): number
|
|
36
|
+
/** The PDF specification version the file declares, e.g. `"1.7"`. */
|
|
37
|
+
get pdfVersion(): string | null
|
|
9
38
|
pageSize(index: number): PageDimensions
|
|
10
39
|
/** Render one page on the calling thread. Blocks; prefer `renderPageAsync`. */
|
|
11
40
|
renderPage(index: number, dpi?: number | undefined | null): RenderedPage
|
|
12
41
|
/** Render one page off the JS thread. Several of these run concurrently. */
|
|
13
42
|
renderPageAsync(index: number, dpi?: number | undefined | null): Promise<RenderedPage>
|
|
43
|
+
/** Render one page and keep it in Rust, for encoding. The pixels never reach JS. */
|
|
44
|
+
renderPageImageAsync(index: number, dpi?: number | undefined | null, signal?: AbortSignal | undefined | null): Promise<PageImage>
|
|
45
|
+
/**
|
|
46
|
+
* Convert one page to a standalone SVG document, off the JS thread.
|
|
47
|
+
*
|
|
48
|
+
* There is no DPI: an SVG carries the page's own point dimensions and rasterises at
|
|
49
|
+
* whatever size it is drawn.
|
|
50
|
+
*/
|
|
51
|
+
renderPageSvgAsync(index: number, whiteBackground?: boolean | undefined | null, signal?: AbortSignal | undefined | null): Promise<string>
|
|
52
|
+
/** Extract the text of one page, off the JS thread. */
|
|
53
|
+
pageTextAsync(index: number): Promise<PageText>
|
|
54
|
+
/** Extract `[start, end)` in one async task, parallelised internally with rayon. */
|
|
55
|
+
pageTextsAsync(start: number, end: number): Promise<Array<PageText>>
|
|
56
|
+
/**
|
|
57
|
+
* Read the document outline (bookmarks), in pre-order.
|
|
58
|
+
*
|
|
59
|
+
* Resolves to an empty array when the document has no outline, which is the
|
|
60
|
+
* common case.
|
|
61
|
+
*/
|
|
62
|
+
outline(): Promise<Array<OutlineEntry>>
|
|
63
|
+
/**
|
|
64
|
+
* Read the document information dictionary.
|
|
65
|
+
*
|
|
66
|
+
* Synchronous: hayro parses it while loading, so this only decodes eight strings.
|
|
67
|
+
*/
|
|
68
|
+
info(): DocumentInfo
|
|
69
|
+
/**
|
|
70
|
+
* Read the links on one page.
|
|
71
|
+
*
|
|
72
|
+
* Resolves to an empty array for a page with no links, which is most pages.
|
|
73
|
+
*/
|
|
74
|
+
pageLinks(index: number): Promise<Array<PageLink>>
|
|
75
|
+
/**
|
|
76
|
+
* Read the label printed on each page, one entry per page.
|
|
77
|
+
*
|
|
78
|
+
* Resolves to an empty array when the document defines no `/PageLabels`.
|
|
79
|
+
*/
|
|
80
|
+
pageLabels(): Promise<Array<string>>
|
|
14
81
|
/** Render `[start, end)` in one async task, parallelised internally with rayon. */
|
|
15
82
|
renderPagesAsync(start: number, end: number, dpi?: number | undefined | null): Promise<Array<RenderedPage>>
|
|
16
83
|
}
|
|
@@ -27,6 +94,70 @@ export declare function backendName(): string
|
|
|
27
94
|
*/
|
|
28
95
|
export declare function configureThreadPool(threads: number, stackSizeMb?: number | undefined | null): number
|
|
29
96
|
|
|
97
|
+
/** The document information dictionary. Every field is independently optional. */
|
|
98
|
+
export interface DocumentInfo {
|
|
99
|
+
title?: string
|
|
100
|
+
author?: string
|
|
101
|
+
subject?: string
|
|
102
|
+
keywords?: string
|
|
103
|
+
/** The application that authored the original document, e.g. `AutoCAD`. */
|
|
104
|
+
creator?: string
|
|
105
|
+
/** The application that wrote the PDF itself, e.g. `Ghostscript`. */
|
|
106
|
+
producer?: string
|
|
107
|
+
/** ISO 8601, converted from the PDF's own date form. */
|
|
108
|
+
created?: string
|
|
109
|
+
modified?: string
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Encode a raw RGBA8 buffer off the JS thread. */
|
|
113
|
+
export declare function encodeBitmap(data: Uint8Array, width: number, height: number, stride: number, format: ImageFormat, quality?: number | undefined | null, signal?: AbortSignal | undefined | null): Promise<Uint8Array>
|
|
114
|
+
|
|
115
|
+
/** Blocks the calling thread. Same `Task` as [`encode_bitmap`]. */
|
|
116
|
+
export declare function encodeBitmapSync(data: Uint8Array, width: number, height: number, stride: number, format: ImageFormat, quality?: number | undefined | null): Uint8Array
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Container for encoded output. Every encoder here is pure Rust, which is what keeps
|
|
120
|
+
* the wasm target buildable — so there is no lossy WebP and no AVIF.
|
|
121
|
+
*/
|
|
122
|
+
export declare const enum ImageFormat {
|
|
123
|
+
/** Lossless VP8L. ~3x smaller than PNG on page content, for about the same cost. */
|
|
124
|
+
WebP = 'webp',
|
|
125
|
+
/** Lossless, universally supported. */
|
|
126
|
+
Png = 'png',
|
|
127
|
+
/** The only lossy option, and the only one with a quality knob. No alpha. */
|
|
128
|
+
Jpeg = 'jpeg'
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Where an outline entry points. Coordinates are PDF points from the page's
|
|
133
|
+
* bottom-left; `null` means "leave this axis unchanged".
|
|
134
|
+
*/
|
|
135
|
+
export interface OutlineDestination {
|
|
136
|
+
/** 0-based page index. */
|
|
137
|
+
page: number
|
|
138
|
+
/** `"XYZ"`, `"Fit"`, `"FitH"`, `"FitV"`, `"FitR"`, `"FitB"`, `"FitBH"` or `"FitBV"`. */
|
|
139
|
+
kind: string
|
|
140
|
+
left?: number
|
|
141
|
+
top?: number
|
|
142
|
+
right?: number
|
|
143
|
+
bottom?: number
|
|
144
|
+
/** Absent for every kind but `"XYZ"`, where a zoom of 0 also reads as absent. */
|
|
145
|
+
zoom?: number
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** One outline entry. Flat and in pre-order; `level` carries the tree. */
|
|
149
|
+
export interface OutlineEntry {
|
|
150
|
+
title: string
|
|
151
|
+
/** Nesting depth. Top-level bookmarks are 0. */
|
|
152
|
+
level: number
|
|
153
|
+
/** `null` for a container with no destination, or one that leaves this document. */
|
|
154
|
+
dest?: OutlineDestination
|
|
155
|
+
bold: boolean
|
|
156
|
+
italic: boolean
|
|
157
|
+
/** The entry should start expanded. */
|
|
158
|
+
open: boolean
|
|
159
|
+
}
|
|
160
|
+
|
|
30
161
|
export interface PageDimensions {
|
|
31
162
|
/** Width in PDF points (1/72 inch). */
|
|
32
163
|
width: number
|
|
@@ -34,6 +165,43 @@ export interface PageDimensions {
|
|
|
34
165
|
height: number
|
|
35
166
|
}
|
|
36
167
|
|
|
168
|
+
/**
|
|
169
|
+
* One link annotation.
|
|
170
|
+
*
|
|
171
|
+
* The rectangle is in the page-as-rendered space — pixels from the top-left at
|
|
172
|
+
* 72 DPI, rotation and crop box applied — so it is the same space as `PageText` and
|
|
173
|
+
* scales to any render with one multiply.
|
|
174
|
+
*/
|
|
175
|
+
export interface PageLink {
|
|
176
|
+
x0: number
|
|
177
|
+
y0: number
|
|
178
|
+
x1: number
|
|
179
|
+
y1: number
|
|
180
|
+
/** Set when the link points into this document; `uri` is then absent. */
|
|
181
|
+
dest?: OutlineDestination
|
|
182
|
+
/** Set when the link points at a URI; `dest` is then absent. */
|
|
183
|
+
uri?: string
|
|
184
|
+
/** The annotation's `/Contents` — its tooltip. Usually absent. */
|
|
185
|
+
alt?: string
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* The text of one page.
|
|
190
|
+
*
|
|
191
|
+
* Coordinates are the page as rendered at 72 DPI — pixels from the top-left with y
|
|
192
|
+
* increasing downwards, rotation and crop box applied — so scaling to any other
|
|
193
|
+
* render is one multiply.
|
|
194
|
+
*/
|
|
195
|
+
export interface PageText {
|
|
196
|
+
lines: Array<TextLine>
|
|
197
|
+
/**
|
|
198
|
+
* Glyphs drawn that no encoding could map back to Unicode. Non-zero with no lines
|
|
199
|
+
* means the page has text that cannot be searched, which is a different answer
|
|
200
|
+
* than a page with no text at all.
|
|
201
|
+
*/
|
|
202
|
+
undecodedGlyphs: number
|
|
203
|
+
}
|
|
204
|
+
|
|
37
205
|
export interface RenderedPage {
|
|
38
206
|
width: number
|
|
39
207
|
height: number
|
|
@@ -56,3 +224,30 @@ export declare function reserveMemory(megabytes: number): number
|
|
|
56
224
|
|
|
57
225
|
/** `"native"` or `"wasm"`. The wrapper uses this to pick a concurrency strategy. */
|
|
58
226
|
export declare function runtime(): string
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* A run of glyphs sharing one baseline.
|
|
230
|
+
*
|
|
231
|
+
* Geometry runs along the baseline rather than being a rectangle per character: a
|
|
232
|
+
* page is thousands of glyphs, and four numbers each is far more than a search needs.
|
|
233
|
+
* One origin, one direction and a list of distances reconstructs any substring's
|
|
234
|
+
* quadrilateral exactly, rotated text included.
|
|
235
|
+
*/
|
|
236
|
+
export interface TextLine {
|
|
237
|
+
text: string
|
|
238
|
+
/**
|
|
239
|
+
* Distance along the baseline to the start of each character, plus the end of the
|
|
240
|
+
* last — one more entry than the string has characters.
|
|
241
|
+
*/
|
|
242
|
+
offsets: Float32Array
|
|
243
|
+
/** Start of the baseline. */
|
|
244
|
+
x: number
|
|
245
|
+
y: number
|
|
246
|
+
/** Unit vector along the baseline. `(1, 0)` for ordinary horizontal text. */
|
|
247
|
+
dx: number
|
|
248
|
+
dy: number
|
|
249
|
+
/** Extent above the baseline, perpendicular to it. */
|
|
250
|
+
ascent: number
|
|
251
|
+
/** Extent below the baseline. */
|
|
252
|
+
descent: number
|
|
253
|
+
}
|
package/papyra.wasm32-wasi.wasm
CHANGED
|
Binary file
|