Read, organize, combine, split and secure PDFs in a fast, native app written in Rust from the ground up. No account, no telemetry, no cloud.
Features
Read anything, beautifully
PdfCraft renders PDFs with care for the details that make a page feel right: kerning and ligatures, right-to-left and complex scripts, vertical CJK, colour emoji, shadings, blend modes, soft masks and optional content.
Search as you type
Instant find, and text selection that follows the document's real reading order.
Organize like cards
Rotate, delete, insert and reorder pages, with deep undo behind every change.
Combine, extract, split
Assemble and break apart documents while keeping links, form fields, layers and bookmarks intact.
Fearless saves
Incremental, atomic saves with autosave and crash recovery.
Built-in security
Opens everything from RC4 to AES-256 encryption and honors author permissions.
What's New
- Windows on ARM64: release builds, tested on ARM64 hardware (#61) by @echelon in #66
- Windows ARM64: fix the intermittent WARP crash in tests, remove the diagnostic job by @echelon in #71
- Fonts: use craft-fonts as an optional build input; move the Japanese fonts out by @echelon in #75
- View: next page in two-page view moves a whole spread (#70) by @bflatastic in #77
- Export to Word: files open in Word again (#72) by @bflatastic in #78
- ROADMAP: session 14 log by @echelon in #83
- UI: sharper, higher-contrast text, most visible on Windows (#76) by @bflatastic in #84
- macOS: open PDFs from Finder, Open With and the Dock (#73) by @bflatastic in #82
- Add text: clicking elsewhere keeps the text and starts a new box (#74) by @bflatastic in #86
- ROADMAP: session 15 log by @bflatastic in #88
- Prepare a form: Detect form fields in the panel, delete several fields at once (#93, #95) by @bflatastic in #116
- Forms: check box and radio button styles (#94) by @bflatastic in #118
- Docs: automation README, internal craftrules links, docs/releasing.md (#97, #98, #100) by @bflatastic in #120
- Windows: register PrintCraft as a PDF handler, so it can be the default (#107) by @bflatastic in #122
- Rename PrintCraft to PdfCraft by @echelon in #174
- Redact: operators split across a page's content streams are redacted whole by @EthanSuquet in #153
- Security: --root confinement leaks and escapes (#136, #137) by @jcl-bit in #164
- Security: ask before opening links from documents (#90, #91) by @jcl-bit in #104
- M1: validate object-number ranges before reading cross references by @storybored379 in #92
- fix: print: read lpstat untranslated so printers show on non-English macOS by @rutkk in #101
- macOS: declare PDF by UTI so Open With recommends PrintCraft by @ShauryaSwarup in #176
- Issue #96: on Linux, draw on the GPU that drives the monitors by @cmoro-deusto in #105
- Edit text: the graphics state carries over between a page's content streams by @Checkov23 in #150
- Edit text: keep the tokens a content stream shares with its neighbours by @EthanSuquet in #154
- Automation: file-writing tools no longer advertise read-only (#130) by @itsmunzir in #138
- CLI: text exits non-zero when a selected page cannot be read (#131) by @itsmunzir in #139
- Checkboxes with an indirect /AP /N state dictionary are drawn (#180) by @ebastos in #181
- Select all pages with Ctrl+A in Organize Pages by @Frumpy9 in #113
- Render: round page rasters up so the last partial row and column are drawn (#102) by @HEOJUNFO in #114
- M3: Add middle-click autoscroll on Linux by @Frumpy9 in #111
- Persist default workspace mode for newly opened PDFs by @mjshfrvstj-sys in #172
- macOS: File ▸ Open and file pickers no longer crash the app by @AutoHenry in #145
- Fix saved signature replacement and long-name clipping (#163) by @DWAA1660 in #178
- Forms: run show/hide-a-field button actions by @pauliusiv123-rgb in #192
- #143: Windows MSI desktop shortcut checkbox, Start Menu fix and install-complete dialog by @DWAA1660 in #183
- Print: add cut-and-stack page order by @excited-raccoon in #197
- CI: ARM64 smoke test writes its page render inside --root by @echelon in #198
- About: contributor and model credits compiled in (grab bag + table, self-submitted names) by @echelon in #196
- CI: tell actionlint about the macos-release runner label by @echelon in #202
- CLI: exit cleanly when stdout pipe closes by @excited-raccoon in #203
- M14: translation catalogs, same system as PhotoCraft by @leblanc-simon in #106
- i18n: add Brazilian Portuguese (pt-br) UI translation by @RicSchonfelder in #165
- i18n: Czech interface language by @petrleocompel in #68
- M14: complete Japanese dialogs, panels, shortcuts and diagnostics by @sakamoto824 in #141
- M14: expand Traditional Chinese UI, dialogs and language preferences by @sakamoto824 in #140
- i18n: Simplified Chinese UI language option by @shuiyue-cmyk in #112
- Signatures: RFC 3161 timestamps, document timestamps, DSS/VRI and revocation verification (non-network half) by @justinjohn0306 in #69
- Add DPI choices when creating PDFs from images by @DWAA1660 in #206
- #161: keep the Save-changes prompt inside the screen by @Mawfyy in #207
- XFA: lay dynamic forms out from their template and keep their data in step (#60) by @ysrdevs in #121
- M14: complete Simplified Chinese translation catalog by @CQMHV in #209
- Measure: add distance, perimeter and area tools by @excited-raccoon in #208
- fix(i18n): follow Windows display language for Chinese UI by @neavo in #216
- Fix theme controls with shared System, Light and Dark preferences by @CQMHV in #212
- Fix flaky picker tests: join the worker instead of polling by @echelon in #221
- #211: guard the macOS PDF file association with a packaging test by @chiranjeevi-max in #226
- Restore #196, #202, #203 and the macOS release-runner change, reverted by the i18n chain by @echelon in #229
- CLI: edit rejects unknown options instead of writing an unchanged copy (#133) by @wstock in #227
- Split: keep only the resources each part draws (#204) by @itsmunzir in #228
- XFA: run the forms' JavaScript: calculations, validation, rows, visibility (#60) by @ysrdevs in #230
- CLI: text fails when the document cannot be opened (#132) by @wstock in #233
- README: install on Gentoo from the ::snakebyte overlay by @switch87 in #237
- Desktop: write log records to standard error and a rotating log file by @switch87 in #239
- #214: wheel paging, Page display menu, default layout and zoom by @chiranjeevi-max in #241
- Automation: doc_info reports annotation and link rects in displayed-page coordinates (#129) by @wstock in #242
- Automation: doc_protect restrictions need a permissions password – say so, and refuse them without one (#134) by @wstock in #243
- Pin mixed-size Fit page behavior with regression tests by @chiranjeevi-max in #245
- Desktop: no eprintln! on the log and panic paths by @switch87 in #246
- Add Spanish (es) interface catalog by @viator1969 in #251
- Issue #253: comment_add anchors note and attachment icons at the displayed top-left on rotated pages by @wstock in #254
- Issue #248: pdfcraft-cli render writes the format its --out name says (.png, .jpg, .tif or .pam) by @wstock in #255
- Issue #249: pdfcraft-cli split creates --out-dir when it does not exist by @wstock in #256
- Issue #189: each document tab keeps its own scroll position by @wstock in #259
- Issue #185: arrow keys and Page Down / Up move through a scrolling document by @wstock in #261
- macOS: every file picker is non-blocking (Save As, exports, folders, Browse...) by @AutoHenry in #262
- Add my contributor name (viator1969) by @viator1969 in #264
- Issue #188: page steps in two-page view take every spread when several fit on screen by @wstock in #265
- Fix flaky CLI text tests: separate files per protected-PDF test by @echelon in #267
- Web: Insert/Replace edit the document they started on; Print ▸ Save as PDF downloads (#167, #170) by @AutoHenry in #270
- render: guard degenerate annotation appearance transforms by @cyfung1031 in #271
- render: synthesize missing Highlight appearances by @cyfung1031 in #274
- fonts: keep later widths and the embedded font when /Widths or /FirstChar is malformed by @cyfung1031 in #276
- render: map annotation appearance boxes onto /Rect corner to corner by @cyfung1031 in #277
- Release: Flatpak bundles, AppImage zsync updates, README Downloads by @echelon in #275
- README Downloads: where to get it, then builds (Windows first) by @echelon in #279

