From a37a9917d46976a67e114a4df8226222b0bbd85b Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 25 Jul 2026 01:13:52 -0700 Subject: [PATCH 1/5] Add plan for searchable PDF generation with RTR text overlay --- plans/rtr-searchable-pdf.md | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 plans/rtr-searchable-pdf.md diff --git a/plans/rtr-searchable-pdf.md b/plans/rtr-searchable-pdf.md new file mode 100644 index 0000000..3542e3b --- /dev/null +++ b/plans/rtr-searchable-pdf.md @@ -0,0 +1,53 @@ +# Plan: Add a `toPdf()` API that renders searchable PDFs with an invisible RTR text layer + +## Context for the implementing agent + +This is `supernote-typescript`, a parser/renderer for Ratta Supernote `.note` files. Relevant facts already established: + +- **Exports** (`src/index.ts`): `SupernoteX` (parser), `toImage` (rasterizes pages to `image-js` `Image` objects, see `src/conversion.ts`), `fetchMirrorFrame`. +- **No PDF code exists anywhere in the repo.** `package.json` dependencies are just `color`, `fs-extra`, `image-js` — no PDF library. +- **RTR** = "Real Time Recognition" (Supernote's on-device handwriting recognition). Confirmed by test fixture `tests/input/rtr.note` and its expected text `'Real time recognition paragraph test'`. +- **Data model** (`src/format.ts:132`): `IRecognitionElement { label, type, words: [{ label, "bounding-box"?: { x, y, width, height } }] }`. Populated per-page at `page.recognitionElements` (`src/format.ts:181`) by `SupernoteX._parseRecognition` (`src/parsing.ts:357`). +- Existing helpers `_extractText` (`src/parsing.ts:377`) and `_extractParagraphs` (`src/parsing.ts:385`) already show the pattern for walking `type === 'Text'` elements and reading `e.words[0]['bounding-box']`, but they discard position info once flattened to a string — the new code needs to keep per-word boxes. +- Page pixel size is `note.pageWidth` / `note.pageHeight` (`src/format.ts:3-6`), the same dimensions `toImage()` rasterizes to (`src/conversion.ts:94-97`). +- Useful test fixtures already in the repo: `tests/input/rtr.note` (has paragraph/text expectations in `tests/main.test.ts:149-174`) and `tests/input/nomad-3.15.27-blank-shapes-and-RTR.note`. + +## Goal + +Add a public API, e.g. `toPdf(note: SupernoteX, options?): Promise`, that produces a multi-page PDF per Supernote note where: +1. Each PDF page shows the rasterized page image (from `toImage`) as the visible content. +2. Each recognized word is drawn as **invisible** text (PDF text-rendering mode 3) positioned directly over the handwriting that produced it, so PDF viewers/search/copy-paste find the right word in the right place — the standard "OCR text layer" technique used by scanned-PDF tools. + +## Step-by-step plan + +1. **Spike: verify the coordinate space before writing real code.** This is the biggest risk in the task. Write a throwaway script that loads `tests/input/rtr.note`, calls `toImage`, and dumps `page.recognitionElements[*].words[*]['bounding-box']` alongside `note.pageWidth`/`pageHeight` and the actual rendered image dimensions. Confirm bounding boxes are already in page-pixel space (same origin/scale as the raster image) with no separate DPI/scale factor. If they're not 1:1, work out the correct scale/offset here before proceeding — don't guess in the main implementation. + +2. **Add dependencies.** Add `pdf-lib` for PDF construction, and `@pdf-lib/fontkit` for embedding a Unicode-capable TTF (the standard 14 PDF fonts don't cover most recognized text, and Supernote recognition may include non-Latin scripts). Pick and vendor/bundle a permissively-licensed Unicode font (e.g. Noto Sans) or accept a font path via options. + +3. **New module `src/pdf.ts`** exporting `toPdf(note: SupernoteX, options?: { fontBytes?: Uint8Array }): Promise`: + - For each page: call `toImage`-equivalent per-page rendering (check whether `toImage` needs to run once for the whole note or supports per-page — read `src/conversion.ts` signature), embed the resulting PNG/bitmap into a new `PDFPage` sized to `pageWidth`/`pageHeight` (convert pixels → PDF points using a fixed assumed DPI, e.g. 96 or whatever matches Supernote's real DPI — confirm this too, since it affects physical print size, not searchability). + - For each `page.recognitionElements` entry with `type === 'Text'`, for each `word` with a `bounding-box`: compute PDF coordinates. PDF origin is bottom-left, so `pdfY = pageHeightPts - (box.y + box.height) * scale`. Set font size from `box.height * scale`. + - Draw invisible text. `pdf-lib`'s high-level `drawText` doesn't expose text-rendering mode, so use `page.pushOperators` with raw operators (`BT`, `Tr 3` to set invisible mode, `Tf`, `Td`, `Tj`, `ET`) — or check if a newer `pdf-lib` version added a `renderMode` option to `drawText` and prefer that if available. + - Decode word labels the same way `_extractText` does (`decodeURIComponent(escape(e.label))`) before drawing. + - Handle pages with `RECOGNSTATUS === RecognitionStatuses.NONE` (or missing `recognitionElements`) by emitting the image with no text layer — not an error case. + +4. **Export from `src/index.ts`**: `export { toPdf } from './pdf';` + +5. **Tests** (`tests/main.test.ts` or a new `tests/pdf.test.ts`): + - Generate a PDF from `tests/input/rtr.note`, write it to `tests/output/` like the existing image tests do. + - Use a PDF text-extraction library (e.g. `pdf-parse` or `pdfjs-dist`, dev dependency only) to assert the extracted text matches (or is a superset of) the known-good text from the existing `rtr.note` test (`tests/main.test.ts:152-174`). + - Optionally assert extracted text *item positions* (if the chosen extraction library exposes them) fall within the page bounds and in roughly the expected reading order, as a sanity check on the coordinate mapping from step 1. + - Also run against `nomad-3.15.27-blank-shapes-and-RTR.note` and a note with no recognition data, to confirm the no-text-layer path doesn't throw. + +6. **Docs**: add a short usage example to `README.md` alongside the existing `toImage` example (check `README.md` for the existing example format and match its style). + +## Non-goals + +- No reflowed/native PDF text (this is an image-plus-invisible-text overlay, not a real text document). +- No attempt to lay out shapes/drawings/other layer types as vector PDF content — only the rasterized page image plus the text layer. + +## Open questions the implementing agent should resolve early, not assume + +- Exact page-pixel → PDF-point DPI conversion (affects only physical page size, not searchability, but should be correct). +- Whether `toImage` can be called per-page or only for the whole note (affects the render loop structure). +- Confirm license terms before bundling any font file. From 2ad5251d776b3ec7238be36f2175417708ccf3d2 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 25 Jul 2026 01:29:02 -0700 Subject: [PATCH 2/5] Implement toPdf(): searchable PDF export with invisible RTR text overlay Renders each page's raster image into a PDF page and draws recognized handwriting (RTR) words as invisible (render mode 3) text at their source location, so PDF viewers can search/select/copy handwritten text. The word bounding boxes in the recognition JSON are stored in a coordinate space divided by a fixed 11.9 scale factor relative to the raster pixel space; this was verified empirically (cropping the raster image at candidate scales and visually confirming word alignment) and cross-checked against an independent reverse-engineering of the same Supernote file format. --- .gitignore | 1 + README.md | 17 +++ package-lock.json | 285 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 7 +- src/index.ts | 2 + src/pdf.ts | 113 ++++++++++++++++++ tests/pdf.test.ts | 50 ++++++++ 7 files changed, 472 insertions(+), 3 deletions(-) create mode 100644 src/pdf.ts create mode 100644 tests/pdf.test.ts diff --git a/.gitignore b/.gitignore index 06c8cac..38f0905 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ lib/* node_modules/ tests/output/*.png tests/output/*.jpg +tests/output/*.pdf tests/output/*.cpuprofile *.DS_Store* .aider* diff --git a/README.md b/README.md index 5e6a921..42d8c4f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,23 @@ Ratta Supernote has often commented that the file-format is yet unstable and sho For some quick snippets, take a look at the [smoke tests](./tests/main.test.ts). +### Generating searchable PDFs + +`toPdf` renders each page's raster image into a PDF page and overlays the recognized handwriting (RTR) text invisibly at the location it was written, so the PDF is searchable and words can be selected/copied from the image. See [tests/pdf.test.ts](./tests/pdf.test.ts) for a full example. + +```ts +import { SupernoteX, toPdf } from 'supernote-typescript'; + +const note = new SupernoteX(buffer); +const pdfBytes = await toPdf(note); +``` + +The default font (Helvetica) only supports Latin text. Pass `fontBytes` with a Unicode TTF/OTF to support other scripts: + +```ts +const pdfBytes = await toPdf(note, { fontBytes: await fs.readFile('NotoSans-Regular.ttf') }); +``` + ## Developer Notes ### Test Individual Suite diff --git a/package-lock.json b/package-lock.json index 72ed482..6e705cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,11 @@ "version": "0.4.2", "license": "GPL-3.0-or-later", "dependencies": { + "@pdf-lib/fontkit": "^1.1.1", "color": "^5.0.3", "fs-extra": "^11.4.0", - "image-js": "^1.7.0" + "image-js": "^1.7.0", + "pdf-lib": "^1.17.1" }, "devDependencies": { "@eslint/js": "10.0.1", @@ -22,6 +24,7 @@ "@vitest/coverage-v8": "4.1.10", "eslint": "10.8.0", "globals": "17.7.0", + "pdf-parse": "^2.4.5", "prettier": "3.9.6", "typescript": "6.0.3", "vitest": "4.1.10" @@ -330,6 +333,201 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz", + "integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==", + "dev": true, + "license": "MIT", + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.80", + "@napi-rs/canvas-darwin-arm64": "0.1.80", + "@napi-rs/canvas-darwin-x64": "0.1.80", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.80", + "@napi-rs/canvas-linux-arm64-musl": "0.1.80", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.80", + "@napi-rs/canvas-linux-x64-gnu": "0.1.80", + "@napi-rs/canvas-linux-x64-musl": "0.1.80", + "@napi-rs/canvas-win32-x64-msvc": "0.1.80" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz", + "integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz", + "integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz", + "integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz", + "integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz", + "integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz", + "integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz", + "integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz", + "integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz", + "integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz", + "integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", @@ -359,6 +557,33 @@ "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@pdf-lib/fontkit": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/fontkit/-/fontkit-1.1.1.tgz", + "integrity": "sha512-KjMd7grNapIWS/Dm0gvfHEilSyAmeLvrEGVcqLGi0VYebuqqzTbgF29efCx7tvx+IEbG3zQciRSWl3GkUSvjZg==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.10" + } + }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", @@ -2631,6 +2856,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/parenthesis": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", @@ -2665,6 +2896,58 @@ "dev": true, "license": "MIT" }, + "node_modules/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "license": "MIT", + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/pdf-lib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/pdf-parse": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-2.4.5.tgz", + "integrity": "sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@napi-rs/canvas": "0.1.80", + "pdfjs-dist": "5.4.296" + }, + "bin": { + "pdf-parse": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.16.0 <21 || >=22.3.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/mehmet-kozan" + } + }, + "node_modules/pdfjs-dist": { + "version": "5.4.296", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz", + "integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=20.16.0 || >=22.3.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.80" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", diff --git a/package.json b/package.json index 7a01e54..f033c56 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ ], "scripts": { "build": "tsc", - "clean": "rm -f tests/output/*.png tests/output/*.jpg tests/output/*.cpuprofile", + "clean": "rm -f tests/output/*.png tests/output/*.jpg tests/output/*.pdf tests/output/*.cpuprofile", "lint": "eslint .", "test": "vitest run", "test-watch": "vitest", @@ -43,13 +43,16 @@ "@vitest/coverage-v8": "4.1.10", "eslint": "10.8.0", "globals": "17.7.0", + "pdf-parse": "^2.4.5", "prettier": "3.9.6", "typescript": "6.0.3", "vitest": "4.1.10" }, "dependencies": { + "@pdf-lib/fontkit": "^1.1.1", "color": "^5.0.3", "fs-extra": "^11.4.0", - "image-js": "^1.7.0" + "image-js": "^1.7.0", + "pdf-lib": "^1.17.1" } } diff --git a/src/index.ts b/src/index.ts index b2f31ab..07c46f6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,5 @@ export { SupernoteX } from './parsing'; export { toImage } from './conversion'; export { fetchMirrorFrame } from './mirror'; +export { toPdf } from './pdf'; +export type { ToPdfOptions } from './pdf'; diff --git a/src/pdf.ts b/src/pdf.ts new file mode 100644 index 0000000..7cb2961 --- /dev/null +++ b/src/pdf.ts @@ -0,0 +1,113 @@ +import { + PDFDocument, + PDFFont, + StandardFonts, + TextRenderingMode, + beginText, + endText, + moveText, + setFontAndSize, + setTextRenderingMode, + showText, +} from 'pdf-lib'; +import fontkit from '@pdf-lib/fontkit'; +import { encodePng } from 'image-js'; +import { toImage } from './conversion'; +import { ISupernote } from './format'; + +// Empirically-verified constant used by Supernote's own recognition format: +// recognized word bounding boxes are stored in raster-pixel units divided by +// this factor. See plans/rtr-searchable-pdf.md for how this was confirmed. +const RECOGNITION_COORDINATE_SCALE = 11.9; + +export interface ToPdfOptions { + /** Page numbers to export (1-indexed). Defaults to all pages. */ + pageNumbers?: number[]; + /** Bytes of a Unicode-capable TTF/OTF font to embed for the invisible text + * layer. Defaults to the standard Helvetica font, which only supports + * Latin (WinAnsi) text and will throw for other scripts. */ + fontBytes?: Uint8Array; + /** Assumed pixel density of the source page raster, used to size PDF + * pages in points. Supernote doesn't record this in the file; 300 matches + * known device screen densities. Only affects the physical/print page + * size, not searchability. */ + dpi?: number; +} + +/** + * Render a Supernote note to a PDF where each page shows the rasterized + * page image with the recognized handwriting (RTR) text drawn invisibly on + * top of it, at the position it was written, so PDF viewers can search for + * and select the handwritten words. + */ +export async function toPdf(note: ISupernote, options: ToPdfOptions = {}): Promise { + const { pageNumbers, fontBytes, dpi = 300 } = options; + const pages = pageNumbers ? pageNumbers.map((n) => note.pages[n - 1]) : note.pages; + const images = await toImage(note, pageNumbers); + const pointsPerPixel = 72 / dpi; + + const pdfDoc = await PDFDocument.create(); + + let font: PDFFont; + if (fontBytes) { + pdfDoc.registerFontkit(fontkit); + font = await pdfDoc.embedFont(fontBytes, { subset: true }); + } else { + font = await pdfDoc.embedFont(StandardFonts.Helvetica); + } + + for (let i = 0; i < pages.length; i++) { + const page = pages[i]; + const image = images[i]; + + const widthPts = image.width * pointsPerPixel; + const heightPts = image.height * pointsPerPixel; + + const pdfPage = pdfDoc.addPage([widthPts, heightPts]); + const fontKey = pdfPage.node.newFontDictionary(font.name, font.ref); + + const pngImage = await pdfDoc.embedPng(encodePng(image)); + pdfPage.drawImage(pngImage, { x: 0, y: 0, width: widthPts, height: heightPts }); + + for (const element of page.recognitionElements) { + if (element.type !== 'Text') continue; + + for (const word of element.words) { + const box = word['bounding-box']; + if (!box) continue; + + const label = decodeURIComponent(escape(word.label)); + if (!label) continue; + + const xPx = box.x * RECOGNITION_COORDINATE_SCALE; + const yPx = box.y * RECOGNITION_COORDINATE_SCALE; + const widthPx = box.width * RECOGNITION_COORDINATE_SCALE; + const heightPx = box.height * RECOGNITION_COORDINATE_SCALE; + + const boxWidthPts = widthPx * pointsPerPixel; + const boxHeightPts = heightPx * pointsPerPixel; + const x = xPx * pointsPerPixel; + // PDF's y-axis runs bottom-up; recognition boxes are top-down. + const y = heightPts - (yPx * pointsPerPixel + boxHeightPts); + + // Shrink the font to fit the recognized word's box width, since + // cursive handwriting compresses to a narrower printed word. + const naturalWidth = font.widthOfTextAtSize(label, boxHeightPts); + const fontSize = naturalWidth > boxWidthPts && naturalWidth > 0 + ? boxHeightPts * (boxWidthPts / naturalWidth) + : boxHeightPts; + + pdfPage.pushOperators( + beginText(), + setTextRenderingMode(TextRenderingMode.Invisible), + setFontAndSize(fontKey, fontSize), + moveText(x, y), + showText(font.encodeText(label)), + endText(), + ); + } + } + } + + return pdfDoc.save(); +} diff --git a/tests/pdf.test.ts b/tests/pdf.test.ts new file mode 100644 index 0000000..e63ed99 --- /dev/null +++ b/tests/pdf.test.ts @@ -0,0 +1,50 @@ +import * as fs from "fs-extra" +import { toPdf } from "../src/pdf" +import { SupernoteX } from "../src/parsing" +import { PDFParse } from "pdf-parse" +import { describe, test, expect } from 'vitest' + +function readFileToUint8Array(filePath: string): Promise { + return new Promise((resolve, reject) => { + fs.readFile(`tests/input/${filePath}`, (err, data) => { + if (err) { + reject(err); + } else { + resolve(new Uint8Array(data.buffer)); + } + }); + }); +} + +describe("pdf", () => { + test("generates a searchable PDF with an RTR text layer", { timeout: 30000 }, async () => { + const sn = new SupernoteX(await readFileToUint8Array("rtr.note")) + const pdfBytes = await toPdf(sn) + await fs.writeFile("tests/output/rtr.note.pdf", pdfBytes) + + const parser = new PDFParse({ data: pdfBytes }) + const result = await parser.getText() + await parser.destroy() + + for (const word of ["Real", "time", "recognition", "paragraph", "reflow", "together"]) { + expect(result.text).toContain(word) + } + }) + + test("handles a note with recognition data from a nomad device", { timeout: 30000 }, async () => { + const sn = new SupernoteX(await readFileToUint8Array("nomad-3.15.27-blank-shapes-and-RTR.note")) + const pdfBytes = await toPdf(sn) + expect(pdfBytes.byteLength).toBeGreaterThan(0) + + const parser = new PDFParse({ data: pdfBytes }) + const result = await parser.getText() + await parser.destroy() + expect(result.text).not.toBeUndefined() + }) + + test("handles a note with no recognition data without throwing", { timeout: 30000 }, async () => { + const sn = new SupernoteX(await readFileToUint8Array("test.note")) + const pdfBytes = await toPdf(sn) + expect(pdfBytes.byteLength).toBeGreaterThan(0) + }) +}) From b1e422d0a874e5644b5872c36f1344a0cd4697de Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 25 Jul 2026 01:49:39 -0700 Subject: [PATCH 3/5] Add plan for worker-parallel PDF page rendering --- plans/rtr-searchable-pdf-workers.md | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 plans/rtr-searchable-pdf-workers.md diff --git a/plans/rtr-searchable-pdf-workers.md b/plans/rtr-searchable-pdf-workers.md new file mode 100644 index 0000000..8e7ab87 --- /dev/null +++ b/plans/rtr-searchable-pdf-workers.md @@ -0,0 +1,46 @@ +# Plan: Worker-parallel page rendering for `toPdf()` + +## Context + +`toPdf()` (`src/pdf.ts:43`) currently does everything on one thread, in a loop over `pages`: call `toImage(note, pageNumbers)` (`src/conversion.ts:71`) once up front for all pages, then per page, embed the PNG and push invisible-text operators. The CPU-heavy part is inside `toImage` — `RattaRLEDecoder.decode()` and `compositeImages()` — which is pure, page-independent, synchronous pixel work. The PDF-assembly part (`embedPng`, `drawImage`, `pushOperators` for text) is comparatively cheap. `toImage` already accepts a `pageNumbers` array (`src/conversion.ts:73-75`), so per-page rendering is already a well-defined unit of work — the missing piece is a way to hand that unit to a worker and feed the result back into PDF assembly, since `toPdf` currently couples render and assemble into one inseparable loop. + +## Goal + +Let an application render pages in parallel across Web Workers (browser) or `worker_threads` (Node), without duplicating this library's PDF-assembly logic in application code, by splitting `toPdf` into a render step (worker-safe, already mostly exists) and an assemble step (main-thread only, since `pdf-lib` document objects aren't transferable). + +## Step-by-step plan + +1. **Spike: profile the split before committing to it.** Measure wall-clock time spent in `toImage` vs. the rest of `toPdf`'s per-page loop (PNG embed + text operators) on a multi-page fixture. This determines whether parallelizing render-only (Option A below) captures most of the win, or whether PDF assembly is expensive enough to also need offloading (Option B). Don't guess — the earlier coordinate-scale spike (see `plans/rtr-searchable-pdf.md`) showed assumptions here are easy to get wrong. + +2. **Refactor `toPdf` into three pieces**, keeping its existing public signature and behavior unchanged (backward compatible): + - `createPdfContext(options?: ToPdfOptions): Promise<{ pdfDoc: PDFDocument, font: PDFFont }>` — the current setup code (`src/pdf.ts:49-57`): creates the `PDFDocument`, embeds the font (default Helvetica or custom `fontBytes`). Runs once, main thread only. + - `addPdfPage(ctx: { pdfDoc, font }, page: IPage, image: Image | Uint8Array, options?: { dpi?: number }): Promise` — the current per-page body (`src/pdf.ts:59-109`): sizes the page from the image, embeds it (accept either an `Image` or already-encoded PNG bytes, so a worker can hand back raw PNG bytes without the main thread needing an `Image` reconstruction step), and draws the invisible text layer from `page.recognitionElements`. Main thread only, since `pdfDoc`/`font` are `pdf-lib` objects. + - `toPdf(note, options)` stays as the convenience wrapper: `createPdfContext` → loop calling `toImage` + `addPdfPage` → `pdfDoc.save()`. Single-threaded, unchanged from the caller's perspective. + +3. **Confirm (don't assume) that per-page render input is structured-clone-safe.** `toImage(note, [n])` only touches `note.pageWidth`, `note.pageHeight`, and `page.LAYERSEQ`-referenced layers' `bitmapBuffer` (`src/conversion.ts:80-95`). A worker doesn't need the whole `SupernoteX` instance (which also carries methods that won't clone, and every other page's buffers, wasteful for large notebooks) — it needs a minimal plain-object slice per page. Add a small extraction helper, e.g. `extractPageRenderData(note: ISupernote, pageNumber: number): IPageRenderData` returning just `{ pageWidth, pageHeight, layers }`, so applications don't need to reach into internals to build a transferable payload. Write a real `node:worker_threads` round-trip test that posts this slice to a worker, renders it, and posts PNG bytes back — this is the actual risk area (something not surviving structured clone), not something to assume works. + +4. **Document the application-side pattern** (README + example), since the worker orchestration itself is the app's responsibility, not this library's: + ```ts + const note = new SupernoteX(buffer); + const ctx = await createPdfContext(); + const pngBuffers = await Promise.all( + note.pages.map((_, i) => renderInWorker(extractPageRenderData(note, i + 1))) + ); // each worker: toImage(sliceAsNote, [1]) + encodePng, both already exported + for (let i = 0; i < note.pages.length; i++) { + await addPdfPage(ctx, note.pages[i], pngBuffers[i]); + } + const pdfBytes = await ctx.pdfDoc.save(); + ``` + Note `toImage` and `encodePng` (from `image-js`, already a dependency) are sufficient for the worker side today — no new export needed there, only documentation that they're safe to call off-main-thread. + +5. **Tests**: unit-test that `addPdfPage` given a pre-rendered `Image` vs. given pre-encoded PNG bytes produces equivalent output; unit-test that `toPdf` built from the three pieces still produces byte-identical (or search-equivalent, via the existing `pdf-parse` check) output to the current implementation, so the refactor is provably behavior-preserving; add the `worker_threads` round-trip test from step 3. + +## Non-goals + +- No bundled Worker/browser glue code or a full example app — orchestration is application-specific. +- Not parallelizing the invisible-text-drawing loop itself (cheap relative to RLE decode; not worth the complexity per the spike in step 1, pending its result). +- Not pursuing per-page PDF merge (Option B: build single-page PDFs in workers, merge via `PDFDocument.copyPages`) unless step 1's profiling shows assembly is a meaningful fraction of total time — it adds real complexity (duplicated embedded fonts inflate file size unless deduped). + +## Open question for whoever implements this + +Step 1's profiling result decides whether this plan is even the right shape — if PDF assembly turns out to be non-trivial too, Option B needs its own design pass before implementation starts. From 4e21f25e8c573ab41f964958cdc173c740a590e0 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 25 Jul 2026 08:58:16 -0700 Subject: [PATCH 4/5] Fix two toPdf()/toImage() failures on real-world notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - compositeImages() requires 8-bit RGBA on both layers, but user-uploaded background templates are arbitrary PNGs and can decode to other formats (e.g. 8-bit RGB with no alpha). Normalize via convertBitDepth(8).convertColor(RGBA) after decodePng(). - toPdf() aborted the entire PDF if any recognized word contained a character the active font couldn't encode (e.g. "→", which isn't in WinAnsi/Helvetica). Skip just that word instead of failing the whole page. Adds a 275KB fixture (tests/input/moonchild-user-bg-and-bad-glyph.note) trimmed from a real 23MB note that hit both bugs on the same page, by directly repacking the minimal set of address-referenced blocks the Supernote container format needs (see the file's structure notes in src/parsing.ts) rather than committing the full original file. --- src/conversion.ts | 8 +++- src/pdf.ts | 35 +++++++++++------- .../moonchild-user-bg-and-bad-glyph.note | Bin 0 -> 281544 bytes tests/pdf.test.ts | 20 ++++++++++ 4 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 tests/input/moonchild-user-bg-and-bad-glyph.note diff --git a/src/conversion.ts b/src/conversion.ts index f1ffae7..999410c 100644 --- a/src/conversion.ts +++ b/src/conversion.ts @@ -87,7 +87,13 @@ export function toImage(note: ISupernote, pageNumbers?: number[]) { layer.LAYERNAME == 'BGLAYER' && page.PAGESTYLE.startsWith('user_') ) { - return decodePng(layer.bitmapBuffer as Uint8Array); + // User-uploaded background templates are arbitrary PNGs and may + // decode to any bit depth/color model (e.g. 8-bit RGB with no + // alpha channel). compositeImages() requires 8-bit RGBA on both + // sides, so normalize regardless of the source PNG's format. + return decodePng(layer.bitmapBuffer as Uint8Array) + .convertBitDepth(8) + .convertColor(ImageColorModel.RGBA); } const buffer = decoder.decode( layer.bitmapBuffer as Uint8Array, diff --git a/src/pdf.ts b/src/pdf.ts index 7cb2961..28e200d 100644 --- a/src/pdf.ts +++ b/src/pdf.ts @@ -92,19 +92,28 @@ export async function toPdf(note: ISupernote, options: ToPdfOptions = {}): Promi // Shrink the font to fit the recognized word's box width, since // cursive handwriting compresses to a narrower printed word. - const naturalWidth = font.widthOfTextAtSize(label, boxHeightPts); - const fontSize = naturalWidth > boxWidthPts && naturalWidth > 0 - ? boxHeightPts * (boxWidthPts / naturalWidth) - : boxHeightPts; - - pdfPage.pushOperators( - beginText(), - setTextRenderingMode(TextRenderingMode.Invisible), - setFontAndSize(fontKey, fontSize), - moveText(x, y), - showText(font.encodeText(label)), - endText(), - ); + try { + const naturalWidth = font.widthOfTextAtSize(label, boxHeightPts); + const fontSize = naturalWidth > boxWidthPts && naturalWidth > 0 + ? boxHeightPts * (boxWidthPts / naturalWidth) + : boxHeightPts; + + pdfPage.pushOperators( + beginText(), + setTextRenderingMode(TextRenderingMode.Invisible), + setFontAndSize(fontKey, fontSize), + moveText(x, y), + showText(font.encodeText(label)), + endText(), + ); + } catch { + // The active font (Helvetica by default) can't encode every + // character recognition may produce (e.g. superscripts, smart + // punctuation). Skip this word rather than losing the whole + // PDF over one unsearchable word; pass a Unicode `fontBytes` + // font via ToPdfOptions to cover more characters. + continue; + } } } } diff --git a/tests/input/moonchild-user-bg-and-bad-glyph.note b/tests/input/moonchild-user-bg-and-bad-glyph.note new file mode 100644 index 0000000000000000000000000000000000000000..e0e4a8651932fb62dceeaeb37c650478913a4f3e GIT binary patch literal 281544 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 NYIXa+zy9>6{{g|-l#BoX literal 0 HcmV?d00001 diff --git a/tests/pdf.test.ts b/tests/pdf.test.ts index e63ed99..422b834 100644 --- a/tests/pdf.test.ts +++ b/tests/pdf.test.ts @@ -47,4 +47,24 @@ describe("pdf", () => { const pdfBytes = await toPdf(sn) expect(pdfBytes.byteLength).toBeGreaterThan(0) }) + + test("handles a user-uploaded background template and unencodable recognition glyphs", { timeout: 30000 }, async () => { + // Regression fixture trimmed from a real note that hit two bugs together: + // (1) a user-uploaded PNG background template that decodes to 8-bit RGB + // with no alpha channel, which compositeImages() previously rejected + // (it requires 8-bit RGBA); and + // (2) recognized handwriting containing characters (e.g. "→") the default + // Helvetica font can't encode, which previously aborted the whole PDF. + const sn = new SupernoteX(await readFileToUint8Array("moonchild-user-bg-and-bad-glyph.note")) + const pdfBytes = await toPdf(sn) + expect(pdfBytes.byteLength).toBeGreaterThan(0) + + const parser = new PDFParse({ data: pdfBytes }) + const result = await parser.getText() + await parser.destroy() + + for (const word of ["Saturn", "Mercury", "Moon", "MAGUS"]) { + expect(result.text).toContain(word) + } + }) }) From d4de6bbcd270ae906b3a0e52b7bc80dab542bc59 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 25 Jul 2026 09:36:47 -0700 Subject: [PATCH 5/5] Use horizontal text scaling so search highlights match recognition boxes Previously the font was only shrunk when text overflowed the box width, so narrower words (e.g. "I", short words, or compressed cursive) left the invisible text run's advance width smaller than the actual handwriting, throwing off the search-hit highlight rectangle PDF viewers draw. Now font size is set to the box height and the `Tz` horizontal-scaling operator stretches or squeezes the text run to exactly match the box width in both directions. Verified with pdfjs-dist: the generated text item width now matches the expected box width (in points) to five decimal places. --- src/pdf.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/pdf.ts b/src/pdf.ts index 28e200d..30cf4fb 100644 --- a/src/pdf.ts +++ b/src/pdf.ts @@ -6,6 +6,7 @@ import { beginText, endText, moveText, + setCharacterSqueeze, setFontAndSize, setTextRenderingMode, showText, @@ -90,18 +91,23 @@ export async function toPdf(note: ISupernote, options: ToPdfOptions = {}): Promi // PDF's y-axis runs bottom-up; recognition boxes are top-down. const y = heightPts - (yPx * pointsPerPixel + boxHeightPts); - // Shrink the font to fit the recognized word's box width, since - // cursive handwriting compresses to a narrower printed word. + // Size the font to the box height, then use horizontal scaling + // (the PDF `Tz` operator) to stretch or squeeze the text to + // exactly match the box width in both directions — handwriting + // is rarely the same width as print at a given height (cursive + // runs narrower, print can run wider) — so that PDF viewers' + // search-hit highlight rectangle lines up with the ink instead + // of just not overflowing it. try { - const naturalWidth = font.widthOfTextAtSize(label, boxHeightPts); - const fontSize = naturalWidth > boxWidthPts && naturalWidth > 0 - ? boxHeightPts * (boxWidthPts / naturalWidth) - : boxHeightPts; + const fontSize = boxHeightPts; + const naturalWidth = font.widthOfTextAtSize(label, fontSize); + const horizontalScale = naturalWidth > 0 ? (boxWidthPts / naturalWidth) * 100 : 100; pdfPage.pushOperators( beginText(), setTextRenderingMode(TextRenderingMode.Invisible), setFontAndSize(fontKey, fontSize), + setCharacterSqueeze(horizontalScale), moveText(x, y), showText(font.encodeText(label)), endText(),