Files
deckcraft/crates/pdf
dependabot[bot] 2f93b2a78c chore(deps): bump the cargo-dependencies group across 1 directory with 9 updates
Bumps the cargo-dependencies group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [skrifa](https://github.com/googlefonts/fontations) | `0.47.0` | `0.49.0` |
| [harfrust](https://github.com/harfbuzz/harfrust) | `0.13.3` | `0.15.0` |
| [vello_cpu](https://github.com/linebender/vello) | `0.2.0` | `0.3.0` |
| [vello_common](https://github.com/linebender/vello) | `0.2.0` | `0.3.0` |
| [quick-xml](https://github.com/tafia/quick-xml) | `0.41.0` | `0.42.0` |
| [zip](https://github.com/zip-rs/zip2) | `3.0.0` | `9.0.5` |
| [symphonia](https://github.com/pdeljanov/Symphonia) | `0.5.5` | `0.6.1` |
| [hayro-syntax](https://github.com/LaurenzV/hayro) | `0.7.2` | `0.8.0` |
| [cpal](https://github.com/RustAudio/cpal) | `0.16.0` | `0.18.2` |



Updates `skrifa` from 0.47.0 to 0.49.0
- [Release notes](https://github.com/googlefonts/fontations/releases)
- [Changelog](https://github.com/googlefonts/fontations/blob/main/docs/RELEASE.md)
- [Commits](https://github.com/googlefonts/fontations/compare/skrifa-v0.47.0...skrifa-v0.49.0)

Updates `harfrust` from 0.13.3 to 0.15.0
- [Release notes](https://github.com/harfbuzz/harfrust/releases)
- [Changelog](https://github.com/harfbuzz/harfrust/blob/main/CHANGELOG.md)
- [Commits](https://github.com/harfbuzz/harfrust/compare/0.13.3...0.15.0)

Updates `vello_cpu` from 0.2.0 to 0.3.0
- [Release notes](https://github.com/linebender/vello/releases)
- [Changelog](https://github.com/linebender/vello/blob/v0.3.0/CHANGELOG.md)
- [Commits](https://github.com/linebender/vello/compare/v0.2.0...v0.3.0)

Updates `vello_common` from 0.2.0 to 0.3.0
- [Release notes](https://github.com/linebender/vello/releases)
- [Changelog](https://github.com/linebender/vello/blob/v0.3.0/CHANGELOG.md)
- [Commits](https://github.com/linebender/vello/compare/v0.2.0...v0.3.0)

Updates `quick-xml` from 0.41.0 to 0.42.0
- [Release notes](https://github.com/tafia/quick-xml/releases)
- [Changelog](https://github.com/tafia/quick-xml/blob/master/Changelog.md)
- [Commits](https://github.com/tafia/quick-xml/compare/v0.41.0...v0.42.0)

Updates `zip` from 3.0.0 to 9.0.5
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v3.0.0...v9.0.5)

Updates `symphonia` from 0.5.5 to 0.6.1
- [Release notes](https://github.com/pdeljanov/Symphonia/releases)
- [Commits](https://github.com/pdeljanov/Symphonia/compare/v0.5.5...v0.6.1)

Updates `hayro-syntax` from 0.7.2 to 0.8.0
- [Commits](https://github.com/LaurenzV/hayro/commits/hayro-syntax-v0.8.0)

Updates `cpal` from 0.16.0 to 0.18.2
- [Release notes](https://github.com/RustAudio/cpal/releases)
- [Changelog](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md)
- [Commits](https://github.com/RustAudio/cpal/compare/v0.16.0...v0.18.2)

---
updated-dependencies:
- dependency-name: cpal
  dependency-version: 0.18.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: harfrust
  dependency-version: 0.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: hayro-syntax
  dependency-version: 0.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: quick-xml
  dependency-version: 0.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: skrifa
  dependency-version: 0.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: symphonia
  dependency-version: 0.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: vello_common
  dependency-version: 0.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: vello_cpu
  dependency-version: 0.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-dependencies
- dependency-name: zip
  dependency-version: 9.0.5
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: cargo-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-26 10:17:58 +00:00
..

DeckCraft PDF export

DeckCraft uses craft-pdf for writer construction, metadata, fallible font preparation and final serialization. Slide rasterization, the selectable text overlay, font discovery and shaping, hyperlinks, bookmarks, notes and handout layout remain app-owned. The existing renderer also resolves and rasterizes WMF/EMF pictures before export.

Only the shared write feature is enabled, with default features disabled. Krilla retains its raster-image and simple-text features, including notes/footer shaping. PDF embedding is disabled: DeckCraft does not use it. The production exporter has no Hayro parser, interpreter, image-decoder, fallback-font or CMap dependencies. Tests use hayro-syntax 0.7.2 directly, with only std enabled, to inspect the generated PDFs.

The exporter runs inside a native unwind guard. Writer failures return PdfError::Write. A font that cannot be prepared for embedding now produces an error instead of silently omitting its selectable text or notes. The shared Krilla 0.8.2 patch avoids a second panic in page/surface cleanup while unwinding and permanently poisons a document after cleanup failure, so a retained writer cannot serialize it. Successful serialization paths are unchanged. Native unwind guards cannot catch WASM aborts or process-wide allocation failures.

Building and validation

Rust 1.95 or newer is required. The workspace pins craft-pdf 0.1.0 and its Krilla 0.8.2 patch to https://github.com/storytold/craft-libs revision 39adbdf756569c8e03adb747d5e063f468ca98c1. Both packages resolve from that immutable Git source; a sibling checkout is unnecessary. Publish and review this shared-library prerequisite before publishing the app migration, so fresh CI and release builds can fetch it.

Run cargo test -p deckcraft-pdf for export contracts and cargo xtask ci for all workspace gates. PDF contract tests also run with wasm-bindgen-test-runner on wasm32-unknown-unknown. The pdf-deps gate verifies the two writer source pins, retained Krilla image/text features and the development-only parser boundary.

This migration does not add vector slide artwork or change text-shaping/ToUnicode policy.