github storytold/pdfcraft v0.7.1
PdfCraft v0.7.1

4 hours ago

What's Changed

  • Adopt shared panel docking with document-aware visibility by @skylartaylor in #966
  • Print: Windows lists its printers and spools jobs by @Mawfyy in #847
  • M10: Windows printing prints at actual size, off the UI thread (follow-up to #847) by @echelon in #1007
  • ci: refactor workflows to use storytold/craft-common-actions by @dylanmtaylor in #1073
  • Text extraction: word gaps follow position on the line, not drawing order (#1062) by @pauliusiv123-rgb in #1074
  • M7: watermark offset from the page centre (edit.watermark-appearance) by @Byxis in #1076
  • M12: XFA script time limits start when the engine is ready by @arcanii in #1081
  • Linux: draw on the GPU the Wayland compositor draws with by @atoslins in #1088
  • doc_create from text refuses characters Helvetica can't draw (#959) by @sibrash4 in #1030
  • Linux: StartupWMClass is the window's app id by @atoslins in #1087
  • M4, #569: Combine files takes images and text files by @mlkonrad in #1032
  • Return renderer initialization errors to the OpenGL startup fallback by @huferyliu in #1042
  • Forms: encode appearances with the existing simple font by @piero-83 in #1044
  • Forms: keep the accepted value when Tab wraps to the same field by @piero-83 in #1045
  • CLI: reject malformed --root options before dispatch by @piero-83 in #1048
  • Edit images: moving or resizing a clipped image moves its own clip too (#1022) by @MarekSpodBiedry in #1049
  • M2: stream page content past the 256 MiB cap (item 1 of #623) by @cyfung1031 in #797
  • XFA: single-block forms paginate, open in their saved state, and show their signatures by @EULArule in #1098
  • UI: a tool chosen with no document open asks for a file and runs on it by @michelleDeko in #1100
  • M14: Enumerate form fields once on open by @cyfung1031 in #1011
  • Top bar: the Save button names its shortcut instead of "(M4)" (#962) by @DWAA1660 in #1013
  • M14: correct Taiwan Traditional Chinese accessibility and form terms by @MaxTheHaters in #1023
  • M10: Enhance camera image finds the document's edges; rotate, crop or organize after Enhance page (part 3 of #1008) by @magdale76 in #1027
  • M9: stream structure-tree checks without a total-element cutoff by @cyfung1031 in #926
  • fix(macos): close the empty main window with Command-W by @Ni-zav in #930
  • fix(xfdf): combine imported annotation flags with bitwise OR by @Ni-zav in #931
  • feat(macos): declare document icon file for PDFs in Info.plist by @Totopo27 in #933
  • macOS: the tab strip is the 28 pt band the traffic lights are centred in (#789) by @ch0kemeister in #1055
  • Issues #444, #186: a mouse wheel scroll speed preference, faster by default on Windows and Linux by @AutoHenry in #514
  • fix(ui): bookmark, comment and command filters match Turkish İ/ı in any case by @snipeTR in #937
  • fix(annot): create mailto links for bare email addresses by @Ni-zav in #941
  • Fix/noissue hyphenated print label ranges s20261010 t220019 z f82d4 by @Ni-zav in #942
  • macOS: "Reopen the files that were open" starts from the system reopen-windows setting (#871) by @ch0kemeister in #1053
  • Keep Border and Fill color palettes independent in field Properties by @sanyamsingh001 in #1054
  • M2, #1060: axial and radial shadings draw as native gradients (InDesign fades 10× faster) by @mlkonrad in #1061
  • UI: theme picker with light and dark theme cards by @luniiya in #1082
  • Docs: sync the progress docs with issues closed on 2026-10-10 by @Ridzzz0Alam in #1064
  • Fix plural forms for recent document page counts by @neronek22 in #1065
  • Read mode: the rail's Bookmarks and other pane buttons open their panels (#932) by @DWAA1660 in #947
  • Issue #948: the root-confinement test tries the symbolic-link escape only when the link was made by @pauliusiv123-rgb in #949
  • fix(measure): include closing edges of every filled PDF subpath by @Ni-zav in #952
  • demo-pdf: two fixes so xtask demo-pdf and xtask screenshots work on Windows by @pechnikov2026-star in #954
  • M7: shard Japanese Type 3 fallback fonts across large edits by @cyfung1031 in #958
  • Typed signatures draw Cyrillic and Greek letters (#846) by @DWAA1660 in #963
  • M7: shard Arabic generated glyph fonts instead of rejecting large text by @cyfung1031 in #967
  • M9: sign with CAC/PIV smart cards through the macOS Keychain by @sfv9 in #968
  • M10: stream Create Multiple sources without a fixed file-count cutoff by @cyfung1031 in #978
  • M11: strip redundant ASCII stream wrappers during optimization by @cyfung1031 in #989
  • text_find stops reading pages once its limit is reached (#971) by @DWAA1660 in #990
  • M14: a chosen interface size is absolute, as in PhotoCraft by @mitul72 in #1005
  • docs(ocr): add model download step to build instructions by @mjohnson7cd in #1006
  • M2: keep non-interpolated minified images sharp by @cyfung1031 in #635
  • docs: register the MCP server from an installed release by @sawizzle in #643
  • M12: add deterministic snap property tests to the measure crate by @cyfung1031 in #714
  • Windows: Save asks where to keep an Outlook attachment instead of writing its temporary copy by @art804 in #601
  • Chinese UI: draw with an installed Chinese face when the build has none (#826) by @YingQiu0871 in #925
  • fix(ui): preserve scroll position when collapsing or resizing sidebars (#1056) by @omarelders in #1069
  • render: don't let a hostile page-tree /Count abort inspection by @pechnikov2026-star in #956
  • xfa, xfdf: refuse XML nested past 1024 levels instead of aborting the process by @pkibiego in #987
  • M2: overlapping text runs stay whole; placement in arrange, bounded checks by @cyfung1031 in #748
  • pt-BR: lowercase month names in the date picker by @WladmirJunior in #1089
  • M9: visible digital signatures can show a drawn, typed or image graphic (#193) by @kestrel99 in #934
  • Issue #568: honour the document's copy permission (Table 22, bit 5) by @jay-tau in #914
  • Viewer: Continuous scrolling is an independent checkbox over the base layout (#752) by @justinjohn0306 in #896
  • M4: open Organize Pages as a selectable thumbnail overview by @lukashold in #1004
  • Add an opt-in low-disk Cargo profile by @cyfung1031 in #951
  • Select tool: trigger multi-click text selection on pointer press (#1024) by @krinry in #1040
  • M14: scan PdfCraft page-content markers once per document refresh by @cyfung1031 in #1016
  • Open dialog: allow selecting several files at once by @LucasT-dev in #1086
  • Issue #431: reload a document when its file changes on disk by @pauliusiv123-rgb in #459
  • fix(annot): validate finite link areas before add or edit by @Ni-zav in #940
  • Add faux-redaction audit (paint-order and colour-aware, fail-closed) by @ejbarraza in #110
  • fix(ui): prevent translated tool labels from overflowing and align German terminology by @Ni-zav in #939
  • chore: bump github actions to fix Node 20 deprecation warnings by @dylanmtaylor in #641
  • On-page text boxes keep a dark caret on their white backgrounds in the dark theme (#655) by @MarekSpodBiedry in #734
  • Render visible pages before thumbnails and text extraction by @gyurix in #950
  • Print: start PowerShell on Windows by its full path by @jcl-bit in #1106
  • Comments: line breaks saved as CR show in comment text by @nicholasyoannou in #1113
  • Cap unbounded editing and text caches; index form fields once by @chiranjeevi-max in #1115
  • Fix text selection cursor on all tools toggle(View More - View Less Button) by @oussama-dalhi in #1121
  • Print: architectural paper presets and PDF scale controls (#599 follow-up) by @durtyrobbin in #1123
  • M10: Enhance camera image cleans the photo up and chooses its look (part 4 of #1008, closes #1034) by @magdale76 in #1038
  • Security: fix 10 verified audit findings in redaction, signature validation, and untrusted-input handling by @JeremyYao in #1099
  • feat: Scale down large signature images instead of rejecting (#1075) by @mjohnson7cd in #1124
  • Forms: keep tiles and render unbaked field values during page re-render by @Piohrun in #636
  • Issue #995 & #1077: unlock a restricted document with its permissions password by @Ridzzz0Alam in #1127
  • Tests: consolidate safe ui-egui integration targets by @cyfung1031 in #992
  • fix(theme): complete Linux System appearance tracking by @coygeek in #1017
  • Issue #432: global Units preference (mm, cm, in, pt), defaulting to the system region by @bulgariamitko in #463
  • Give dialogs roomier text fields and padding by @bartalos86 in #487
  • i18n: let the layers below hand their sentences over, so they can be translated by @feraremag2680 in #478
  • Improve PDF Navigation with Cursor-Anchored Zoom and Mouse Panning by @mhadidi06 in #504
  • M14: complete the Czech (cs) interface catalog by @Losminek in #1066
  • M14: Italian catalog review: meaning, agreement, consistency (47 entries) by @magdale76 in #1025
  • M14: Slovenian (Slovenščina) interface language by @spacekomet in #1091
  • Add Greek (el) interface localization by @Camthalion77 in #994
  • M14: Kazakh interface language by @pechnikov2026-star in #955
  • feat(i18n): add complete Turkish interface language support by @yeniufuklar-com in #1057
  • Content edits on heavy documents: narrow refresh, cached appearances, per-page invalidation by @MaksPV in #1122
  • M7: Hebrew in Edit text (reading order, writing order, Hebrew glyphs) by @tzagim in #521
  • Heavy pages: cull off-tile images, cache decodes, preview backdrops, calmer queues by @MaksPV in #1117
  • M14: text the fonts can't draw is kept and reported, never written as ? silently by @kekeandzeyu in #1112
  • M7: support shaped Thai text in Add Text and UI fallback fonts by @PuemMTH in #767
  • M7: preserve overlapping text when dragging paragraphs (#594) by @FredApps in #1052
  • Bound materialized text search matches (#971) by @rp6186030 in #1164
  • XFA: import and export data files, and pictures for image fields by @ysrdevs in #1175
  • docs(contributors): add Ufuk Efe to people.toml by @yeniufuklar-com in #1177
  • Issue #1185: Protect refuses passwords that encryption would make empty or equal by @jay-tau in #1186
  • M14: keep structural page order through inspection by @cyfung1031 in #1182
  • Raise workspace rust-version to 1.95 to match the UI crate (#1169) by @MarekSpodBiedry in #1188
  • M5: preserve comment identities during partial XFDF and FDF imports by @MMexicann in #1144
  • Test PDF viewer trackpad pinch zoom by @earlvanze in #1148
  • M4: replace selected pages from organize toolbar and context menus (#786) by @Hathor875 in #1149
  • UI: checkboxes and radio buttons are outlined, and checkboxes are square by @Toddpe in #1173
  • M14: "Edit with PdfCraft" on the File Explorer menu of PDF files (#682) by @jcl-bit in #1180
  • M2: bound the total size of page-label prefixes by @ymote in #1146
  • Windows printing: two-sided binds on the chosen edge; note drivers that ignore Two-sided by @bulgariamitko in #1154
  • Issue #1028: OCR can read pictures on pages that already have text by @rp6186030 in #1184
  • M14: choose Tools panel side in Preferences by @earlvanze in #1130
  • Show annotation actions beside selected text by @earlvanze in #1133
  • i18n(es): add 84 missing rows, consistent tú register by @diegozpy in #1134
  • Linux: prefer server DPI over panel physical DPI in vendored winit by @gyurix in #1150
  • M2: keep doubled short text runs from interleaving by @cyfung1031 in #1198
  • docs: sync Earl Co contributor name from GitHub by @earlvanze in #1199
  • Accessibility: identify structure objects in checker findings by @earlvanze in #1207
  • Accessibility: edit structure tag properties through tools by @earlvanze in #1210
  • Accessibility: export before-and-after review record by @earlvanze in #1204
  • M10.5: Adopt craft-print spooler with Windows printing fixes by @skylartaylor in #1015
  • Preserve source fonts in text editing and resize clipped artwork by @komo1iddin in #1116
  • Polish chrome hover, press, and selection by @bartalos86 in #457
  • Edit text: support Devanagari system font fallback and Indic pre-base matra reordering by @krinry in #1033
  • Fix Word invoice layout and pagination (#773) by @lollinoo in #1126
  • M5.7: Fill & Sign Scan tab for photographed signatures (#1110) by @Bjorneseth in #1111
  • M4: rename colliding form field names when combining (organize.field-name-conflicts) by @edurbs in #1155
  • M10: Create separate PDFs from multiple files by @earlvanze in #1183
  • Comments panel: show Persian and Arabic comments in reading order (#1079) by @itrycodinganditsbad in #1138
  • M10: Presentation (.pptx) export (#1137) by @Hathor875 in #1162
  • Add editable page-range selection to Organize Pages (#1092) by @DWAA1660 in #1174
  • M14: edits let go of the previous working file before writing the next (gap 13) by @rp6186030 in #1279
  • Accessibility: show figure findings on the page by @earlvanze in #1280
  • Fix viewport jitter when annotating with search active (#1254) by @omarelders in #1283
  • Automation tests: isolate workdirs by call site by @cyfung1031 in #1223
  • M0: validate the committed parity manifest in xtask tests by @srt8hellcat2-ui in #1214
  • M7: report unsupported document link actions accurately by @cyfung1031 in #1242
  • M5: Insert text snaps its caret to the text (#345) by @diegozpy in #1249
  • Accessibility: compare checker results after each recheck by @earlvanze in #1250
  • M5: quick-bar colour recolours the selected comment (#1191) by @rp6186030 in #1255
  • Redaction: add case-sensitive and whole-word search options by @earlvanze in #1258
  • control: close the connection on malformed input before auth by @SteamSmith in #1259
  • M10.5: load driver options for CUPS printer instances by @srt8hellcat2-ui in #1226
  • Units: read the Windows measurement system from the registry, not reg.exe by @jcl-bit in #1227
  • Accessibility: reorder sibling structure tags through an undoable tool by @earlvanze in #1229
  • Accessibility: export before-and-after review as HTML by @earlvanze in #1234
  • Refine Greek localization and May abbreviation by @Camthalion77 in #1262
  • Resize exclusive image crops across nested states and content streams by @komo1iddin in #1269
  • honour the /Lab colour space /WhitePoint (#1203) by @Hathor875 in #1237
  • Accessibility: persist human review decisions for an exact PDF revision by @earlvanze in #1239
  • Accessibility: add visual tag properties panel by @earlvanze in #1216
  • M10: print from the web build through the browser's print dialog (gap 4) by @rp6186030 in #1243
  • M7: open local GoToR PDF links natively by @cyfung1031 in #1265
  • M3: follow Windows' Animation effects setting; add an Animation effects preference by @JeremyYao in #1235
  • Reading colours: replace document colours for reading comfort (#897) by @edurbs in #1270
  • Accessibility: keep manual review visible in checker summaries by @earlvanze in #1224
  • Tests: normalize generated streams in Arabic output golden by @earlvanze in #1275
  • Comments: "Other colour…" picker and recent custom colours under the swatches (#1193) by @ngrafton2006 in #1261
  • M3: add PDF tab context menu (fixes #1233) by @srt8hellcat2-ui in #1266
  • M14: tune Windows low-DPI JetBrains Mono hinting by @cyfung1031 in #1264
  • Text extraction: honour /ActualText, so Thai from Chrome PDFs is searchable by @git-monchiant in #1217
  • feat(edit): remove all links command and context menu (#539) by @Hathor875 in #1213
  • M12: say when a form's scripts were turned off by @arcanii in #1251
  • XFA: one script thread per event, and the live form kept up to date in place by @ysrdevs in #1355
  • xtask: stop headless Chrome leaving macOS code-sign clones (#1196) by @MarekSpodBiedry in #1292
  • Issue #1296: hayro-syntax applies SASLprep to AES-256 passwords (PdfCraft patch 16) by @jay-tau in #1345
  • M3: match Greek final sigma in case-insensitive search by @nevicia2010-hub in #1349
  • Clean form tag references by @not-a-feature in #1351
  • M12: accept literal digits in date formats (dd.mm.26) by @aparcar in #1352
  • CI: keep craft-fonts enabled across Linux Rust gates by @cyfung1031 in #1284
  • CI: run dependency layering once per workflow by @cyfung1031 in #1286
  • CI: keep line tables instead of full workspace debug info by @cyfung1031 in #1298
  • test(cli): reject unknown MCP options by @mhmdeve in #1342
  • Refine search match selection and text failure jitter handling by @omarelders in #1291
  • Fill & Sign: choose text and date font size by @earlvanze in #1285
  • fix(xfdf): text data from a one-field form keeps its commas (#1321) by @marcoarnulfo in #1371
  • CLI: audit rejects unknown options before reading the file (fixes #1332) by @umesh429 in #1372
  • fix(preflight): find colour operators after any PDF whitespace (#1334) by @marcoarnulfo in #1373
  • fix(sign): a signature field with a null /V can be signed by name (#1328) by @marcoarnulfo in #1374
  • fix(redact): removing comments keeps non-comment annotations (#1325) by @marcoarnulfo in #1375
  • fix(print): refuse huge posters at the sheet limit instead of overflowing (#1335) by @marcoarnulfo in #1376
  • M7: preserve Arabic text order in copy, search and editing by @YouseifUS in #1369
  • M2: snap shrunk interpolated images to whole pixels so scans stay sharp by @philip-tam in #1377
  • M14: Preserve recovery snapshots without readable metadata by @LabDennis in #1378
  • fix(fonts): a composite /W run past the last CID stops there (#1313) by @marcoarnulfo in #1389
  • fix(ui): the Fields panel lists a field on a missing page as unplaced (#1307) by @marcoarnulfo in #1390
  • fix(automation): content_update refuses text styling on an image (#1331) by @marcoarnulfo in #1391
  • fix(forms): a whole look keeps the rest of an indirect /MK (#1322) by @marcoarnulfo in #1392
  • fix(forms): a literal Off value reads as Off outside buttons (#1320) by @marcoarnulfo in #1393
  • fix(fonts): a /Differences code past 255 no longer encodes as its last byte (#1314) by @marcoarnulfo in #1394
  • Issue #1368: keep text a dragged paragraph passed over by @Ridzzz0Alam in #1381
  • M7: Preserve explicit page ranges across dialog redraws (#1304) by @LabDennis in #1382
  • M3: select an image on the page and copy it by @FrancescoClemeno in #1363
  • fix(cli): edit refuses move/insert destinations past the end (#1330) by @umesh429 in #1400
  • fix(sign): refuse to sign a field whose /V is not a signature (#1328) by @marcoarnulfo in #1402
  • fix(forms): keep a whitespace-only value in a text field without a format (#1323) by @marcoarnulfo in #1403
  • fix(content): skip an inline image with an unreadable key to its EI (#1318) by @marcoarnulfo in #1404
  • fix(automation): doc_save reports a required full rewrite as not incremental (#1329) by @marcoarnulfo in #1405
  • fix(audit): an identity cm between re and fill no longer hides a cover (#1333) by @umesh429 in #1410
  • fix(ui): Current page prints the viewed page, not a page labelled with its number (#1308) by @marcoarnulfo in #1411
  • fix(render): draw Turkish Ğ İ Ş ğ ş in non-embedded fonts by @TheLastRoadRunner in #1409
  • M10: edit OCR text on scanned pages so the change shows by @TanguAchilis in #1397
  • Edit text: support per-font visual-order Indic text and nukta reordering by @krinry in #1380
  • M12: preview text structure proposals for auto-tagging by @earlvanze in #1383
  • M10: Test current-page print previews and saved output by @LabDennis in #1415
  • fix(content): count an unreadable inline image with no EI as skipped (#1318) by @marcoarnulfo in #1418
  • feat(ui): add command palette arrow-key navigation by @Morpheus004 in #1419
  • M4: Fix Combine duplicate warnings and cache their computation by @LabDennis in #1420
  • feat(preflight): verify image resolution and bleed without rewriting the file by @Baltsar in #1408
  • M14: add Lithuanian interface and date localization by @tdslot in #1401
  • M1: write a valid xref when an incremental save has no objects (#1339) by @bartalos86 in #1424
  • Release workflow: pass the Azure signing secrets by @echelon in #1194

New Contributors

  • @dylanmtaylor made their first contribution in #1073
  • @arcanii made their first contribution in #1081
  • @atoslins made their first contribution in #1088
  • @sibrash4 made their first contribution in #1030
  • @huferyliu made their first contribution in #1042
  • @piero-83 made their first contribution in #1044
  • @EULArule made their first contribution in #1098
  • @michelleDeko made their first contribution in #1100
  • @MaxTheHaters made their first contribution in #1023
  • @magdale76 made their first contribution in #1027
  • @Totopo27 made their first contribution in #933
  • @luniiya made their first contribution in #1082
  • @Ridzzz0Alam made their first contribution in #1064
  • @neronek22 made their first contribution in #1065
  • @pechnikov2026-star made their first contribution in #954
  • @sfv9 made their first contribution in #968
  • @mjohnson7cd made their first contribution in #1006
  • @sawizzle made their first contribution in #643
  • @art804 made their first contribution in #601
  • @YingQiu0871 made their first contribution in #925
  • @omarelders made their first contribution in #1069
  • @pkibiego made their first contribution in #987
  • @WladmirJunior made their first contribution in #1089
  • @kestrel99 made their first contribution in #934
  • @lukashold made their first contribution in #1004
  • @krinry made their first contribution in #1040
  • @LucasT-dev made their first contribution in #1086
  • @ejbarraza made their first contribution in #110
  • @nicholasyoannou made their first contribution in #1113
  • @durtyrobbin made their first contribution in #1123
  • @JeremyYao made their first contribution in #1099
  • @Piohrun made their first contribution in #636
  • @coygeek made their first contribution in #1017
  • @mhadidi06 made their first contribution in #504
  • @Losminek made their first contribution in #1066
  • @spacekomet made their first contribution in #1091
  • @Camthalion77 made their first contribution in #994
  • @yeniufuklar-com made their first contribution in #1057
  • @tzagim made their first contribution in #521
  • @kekeandzeyu made their first contribution in #1112
  • @PuemMTH made their first contribution in #767
  • @FredApps made their first contribution in #1052
  • @rp6186030 made their first contribution in #1164
  • @MMexicann made their first contribution in #1144
  • @earlvanze made their first contribution in #1148
  • @ymote made their first contribution in #1146
  • @diegozpy made their first contribution in #1134
  • @komo1iddin made their first contribution in #1116
  • @lollinoo made their first contribution in #1126
  • @Bjorneseth made their first contribution in #1111
  • @itrycodinganditsbad made their first contribution in #1138
  • @srt8hellcat2-ui made their first contribution in #1214
  • @SteamSmith made their first contribution in #1259
  • @ngrafton2006 made their first contribution in #1261
  • @git-monchiant made their first contribution in #1217
  • @nevicia2010-hub made their first contribution in #1349
  • @not-a-feature made their first contribution in #1351
  • @aparcar made their first contribution in #1352
  • @mhmdeve made their first contribution in #1342
  • @marcoarnulfo made their first contribution in #1371
  • @umesh429 made their first contribution in #1372
  • @YouseifUS made their first contribution in #1369
  • @philip-tam made their first contribution in #1377
  • @LabDennis made their first contribution in #1378
  • @FrancescoClemeno made their first contribution in #1363
  • @TheLastRoadRunner made their first contribution in #1409
  • @TanguAchilis made their first contribution in #1397
  • @Morpheus004 made their first contribution in #1419
  • @Baltsar made their first contribution in #1408
  • @tdslot made their first contribution in #1401

Full Changelog: v0.6.0...v0.7.1

Don't miss a new pdfcraft release

NewReleases is sending notifications on new releases.