What's Changed
- Make a missing external oracle loud instead of a silent pass by @tanish2k09 in #2266
- One way to write a synthetic PDF fixture by @tanish2k09 in #2275
- Measure rendering against Poppler, and turn the pixel test on by @tanish2k09 in #2286
- Say what the render-oracle score does and does not mean by @tanish2k09 in #2290
- Pin that every JBIG2 conformance fixture decodes to the same picture by @tanish2k09 in #2300
- The fonts README still called the standard-14 widths an estimate by @tanish2k09 in #2304
- The text oracle scored us zero for honouring a no-copy document by @tanish2k09 in #2312
- Fix oracle Clippy failure for four-byte pixel chunks by @sanyamsingh001 in #2342
- Preserve precision when writing page transforms by @sanyamsingh001 in #946
- Printing: a layer that is off in the document stays off on the sheets by @Byxis in #1135
- Clear image leftovers by @not-a-feature in #1151
- Tests: use 300 DPI synthetic scan for OCR searchability by @earlvanze in #1197
- M8: Bound and reuse repeated redaction overlays by @LabDennis in #1426
- M4: keep the last saved revision across undo (#1310, #1311, #1312) by @bartalos86 in #1435
- M5: add comment and reply submission shortcuts by @Luchsen in #1457
- M12: mark leaf tags as artifacts by @earlvanze in #1475
- COS: index cross-reference entries on demand by @cyfung1031 in #1505
- feat(ui): drop files on the Pages panel to insert pages by @tylerstoltz in #1547
- Clamp extracted Indexed image samples to the declared palette range by @FredApps in #1581
- Keep page labels and focused navigation consistent across reloads by @sanyamsingh001 in #1667
- Keep the full final spread reachable with unequal page heights by @FredApps in #1672
- Text selection: dragging to the top or bottom edge of the view scrolls it by @marcoarnulfo in #1675
- Edit text & images: a dragged image's pixels follow its frame instead of waiting for the release by @marcoarnulfo in #1677
- Text selection: a drag after a double- or triple-click extends by whole words or lines by @marcoarnulfo in #1689
- fix(render, ui): form-heavy documents draw and fill fast (spot-colour images, widget placement, Fields panel) by @Piohrun in #1691
- i18n(pt-br): fix 6 Brazilian Portuguese strings by @s17sh70x2jfl031ag in #1694
- Sinhala and Tamil interface: draw with an installed font (part of #1688) by @manchitmr in #1706
- M5: Fill & Sign text reads across on rotated pages by @alexanderalber in #1710
- M14: add Vietnamese interface and date localization by @duydev in #1712
- Edit text: the four-way arrow wherever a drag moves, and a sharp page while editing by @ch0kemeister in #1717
- macOS: the standard About panel shows the website and Discord links (#1287) by @ch0kemeister in #1718
- M6: detect form fields on scanned pages (#1721) by @alexanderalber in #1722
- M2: Make literal text search linear and tolerate missing layout metadata by @LabDennis in #1725
- fix(ui): clicking a theme card in Preferences picks that theme by @umesh429 in #1727
- Issue #1676: put fallback faces on the interface baseline by @mtlcl410 in #1743
- M7: fold repeated image transforms into one cm instead of nesting q by @komo1iddin in #1746
- i18n: Taiwan vocabulary and the missing entries in zh-hant by @mtlcl410 in #1750
- M7: keep the source operators of rows a text edit doesn't reach by @komo1iddin in #1754
- M7: draw new characters with the source font's own embedded program by @komo1iddin in #1760
- Automation: tell a tool name or an unknown id from a command without a tool in command_run by @marcoarnulfo in #1765
- M7: reuse a page's font resource and program when embedding again by @komo1iddin in #1779
- M2: Add word and character counts with optional content exclusions by @LabDennis in #1780
- M7: read the page once per keystroke when measuring a text draft by @komo1iddin in #1781
- M11: merge image fragments, and the Standard and Mobile optimizer presets (closes #1783) by @magdale76 in #1784
- M7: rewrap Chinese and Japanese text between characters by @komo1iddin in #1827
- M7: justify paragraphs whose font shows the space with another code by @komo1iddin in #1832
- Edit image: give each flip button the icon of its own mirror axis by @marcoarnulfo in #1841
- M10: A6 paper in the print dialog and doc_print by @marcoarnulfo in #1849
- M7: Add / Update / Remove menu on Header and footer, Watermark, Background by @Byxis in #1857
- fix(a11y): mark_decorative no longer panics on an unpaired ParentTree key (#1809) by @mtlcl410 in #1862
- M2: a /Rotate that isn't a quarter turn counts as 0, as the page is drawn by @pauliusiv123-rgb in #1863
- fix(cos): a nonpositive crypt-filter /Length no longer overflows (#1816) by @mtlcl410 in #1864
- fix(audit): find rectangle covers closed with h or painted with b/b* (#1817) by @mtlcl410 in #1865
- fix(sign): an unreadable extendedKeyUsage allows no purpose (#1807) by @mtlcl410 in #1866
- audit: harden finding classes with golden tests and docs by @ejbarraza in #1892
- fix(audit): an applied redaction at the end of a line is not a faux redaction by @CouchRiv in #1898
- fix(a11y): bookmarks from structure keep the words of glyph-by-glyph headings by @CouchRiv in #1899
- fix(audit): report faux-redaction rectangles in top-left page points by @CouchRiv in #1900
- fix: render CCITT Group 4 images that declare /Rows 0 by @ehinderer in #1903
- fix(automation): a missing path under --root says where it was looked for (#1890) by @mtlcl410 in #1907
- M3: touchpad swipes glide on after the fingers lift on Wayland (#531) by @mlkonrad in #1909
- fix(redact): the tail of a longer number is not a phone number (#1884) by @mtlcl410 in #1911
- fix(forms): new text and date fields take Acrobat's Auto font size (#1888) by @mtlcl410 in #1912
- feat(ui): a middle click closes a tab (#1853) by @mtlcl410 in #1920
- fix(organize): bound how deep an import follows the object graph (#1800) by @mtlcl410 in #1921
- M2: Bound page-tree traversal memory for repeated children (#1798) by @LabDennis in #1926
- Compare files: side by side, scrolled and zoomed together by @regendorf-ux in #1927
- M11: measure every use of an image drawn through deeply nested forms (#1811) by @mlkonrad in #1933
- fix(edit): flattening keeps a widget it cannot draw and an undrawn reply (#1794) by @mtlcl410 in #1934
- fix(control): a deadline and a cap for connections that have not authenticated (#1806) by @mtlcl410 in #1939
- Issue #305: an update keeps the File Explorer menu choices, and the image menu gets a switch by @jcl-bit in #1941
- fix(sign): a signed revision of a password-protected file opens with the document's key (#1808) by @mtlcl410 in #1945
- feat(organize): Insert pages from file brings the file's bookmarks by @CouchRiv in #1947
- XFA: flatten a form into a plain PDF, or convert it to a static form by @ysrdevs in #1948
- feat(cli): page lists take ranges, and a missing page is named as typed (#1923) by @mtlcl410 in #1950
- M9: signature labels follow the interface language, and one the font can't draw is refused, never written as ? by @kekeandzeyu in #1951
- Keep native open replies queued while dialogs and pickers are active by @sanyamsingh001 in #1953
- M2: bound ASCII85 decoding by the stream's output limit (#1796) by @Ridzzz0Alam in #1954
- M4: write each page label dictionary as an indirect object by @marcoarnulfo in #1959
- M6: auto-size text fields shrink and wrap typed text on screen, as on the page by @dsskaggs-ai in #1964
- Print: print as image (Advanced), with grayscale pictures by @regendorf-ux in #1965
- fix(automation): no top-level oneOf in form_set_props input schema (#1961) by @andreero0 in #1967
- CLI: run --script --report prints one JSON document for the run (#1891) by @vangel76 in #1974
- Issue #1910: Organize opens on the current page by @alehel in #1975
- Signature pad: Undo button and Ctrl/Cmd+Z take back the last stroke (#1963) by @vangel76 in #1978
- View: show page size when hovering the bottom-left of the page view (#1855) by @vangel76 in #1979
- Export to Word: show pictures on positioned pages, bound the pictures (#1936) by @vangel76 in #1981
- M2: keep the raw crop minimum in physical points by @sanyamsingh001 in #1982
- Comments: font size for text boxes in Comment Properties (#1908) by @vangel76 in #1984
- Viewer: a press on a page makes it the current page (#1956) by @vangel76 in #1985
- View: Single Page wheel turns to the next page at the edge of a zoomed-in page (#1924) by @vangel76 in #1986
- Draw: a released pen stroke stays on screen until the page raster has it (#1858) by @vangel76 in #1987
- Forms: simplified field notation written as real JavaScript, not AFMakeNumber(0) by @regendorf-ux in #1995
- Edit: crop an existing page image with its handles by @regendorf-ux in #2002
- Redaction Tool Properties: the mark's appearance, and Make properties default by @regendorf-ux in #2008
- fix(ui): wrap long filenames and metadata in Document Properties (#2011) by @Osaym in #2012
- M2: clip intersection starts its row walk at the first shared row by @cyfung1031 in #2026
- fix(render): a Multiply highlight inside a transparency group keeps the text (#1968) by @mtlcl410 in #2027
- M7: list Edit text & images first under Modify page by @lava in #2028
- Linux/BSD: open files from later launches in the running PdfCraft (#1726) by @tydude001 in #2037
- fix(forms): read each JavaScript name tree node once by @Dev-next-gen in #2040
- Wait for remote-link errors before asserting in UI tests by @sanyamsingh001 in #2041
- M2: heavy-sheet generator and page timing harness (item 8 of #623) by @cyfung1031 in #2042
- perf(xfa): make som index lookup linear by @osaidahmed in #2047
- i18n(es): translate the new print and Add text strings, Type on the signature pad, tú register by @txiki739 in #2049
- fix(ui): preserve Ctrl+Alt+Q during digital ID creation by @sampaiodias in #2055
- chore(contributors): credit mtlcl410 by display name by @mtlcl410 in #2065
- M4: read page transitions and display times (/Trans, /Dur) into DocInfo by @mtlcl410 in #2074
- M4: set page transitions and display times (/Trans, /Dur) through the engine and the tools by @mtlcl410 in #2083
- M12: the geometry of page transitions (ISO 32000-2 table 164) by @mtlcl410 in #2084
- M3: a document that asks to open in Full Screen mode asks first (/PageMode /FullScreen) by @mtlcl410 in #2086
- chore(packaging): give test-msi.ps1 a UTF-8 BOM so Windows PowerShell 5.1 parses it by @mtlcl410 in #2092
- fix(organize): keep page labels on their pages when pages are deleted by @marcoarnulfo in #2093
- fix(ui): check boxes over text should show the pointing hand, not the I-beam by @alehel in #2099
- M3: preserve coordinate clicks across slow frames by @sanyamsingh001 in #2100
- fix(a11y): mark_decorative finds MCIDs in named property lists (#1813) by @jonathanwxh-cell in #2106
- fix(ui): header, footer and watermark dialogs refuse undrawable text … by @jonathanwxh-cell in #2107
- M7: Hebrew in Add text (#128) by @michaelsh1 in #2109
- fix(sign): a signed page's resources are page content whatever keys a later revision writes (#1787) by @mtlcl410 in #2115
- fix: Space Audit lines up its columns and counts form fonts as fonts by @alehel in #2118
- test(ui): wait for the save to write the file instead of a fixed frame count by @lhymes in #2122
- fix(render): a soft mask fades a gradient fill again by @marcoarnulfo in #2132
- OCR: Downsample to shrinks a page box given in pixels by @marcoarnulfo in #2135
- Fix multi-select choice index ordering by @sanyamsingh001 in #2144
- M3: Improve Back/Forward page navigation (fixes #2080) by @srt8hellcat2-ui in #2151
- fix(fonts): keep a subset Type 0 font for glyphs /W leaves to /DW by @marcoarnulfo in #2153
- M1: every PDF leaves the engine checked, and every writer uses one staging-file writer (#2166) by @mtlcl410 in #2182
- M9: harden .p12 digital IDs (#1847) by @Ridzzz0Alam in #2201
- packaging: RPM requires library sonames, so openSUSE can install it by @tydude001 in #2205
- fix(edit): keep the runs of untouched text between two edits by @marcoarnulfo in #2209
- Forms: fields that share a name take the same value by @marcoarnulfo in #2217
- M3: Save asks before writing over a changed file, one tab per file, locked autosaves (#2166) by @mtlcl410 in #2218
- fix(redact): size image clearing with checked arithmetic (#2177) by @atahabilder1 in #2221
- fix(forms): open a text field on press so dragging over it selects text by @marcoarnulfo in #2226
- fix(test): reload tests pin the English interface like every other harness by @abc2cb in #2239
- M7: the Edit tab turns on Edit text & images, as in Acrobat by @abc2cb in #2241
- fix(edit): keep Edit text & images boxes drawn while page input waits by @abc2cb in #2242
- fix(organize): draw a rotated page large and centred in its grid cell by @abc2cb in #2243
- M4: lay out Organize pages as Acrobat's panel by @abc2cb in #2248
- feat(ui): Shift on a corner handle keeps proportions for comments, stamps, and form fields by @adrianiglesiass in #2252
- Refuse header/footer Bates numbers that would overflow u64 by @Silvertree2010 in #2253
- fix(preflight): read device colour from content operators, not whitespace-split bytes by @guillehr2 in #2260
- docs: catalog hashes in ATTRIBUTION.toml are updated by hand by @vangel76 in #2271
- Tabs: show the drop line in front of the first tab (#2225) by @vangel76 in #2278
- M0: the every-command test never opens a real file dialog by @abszar in #2281
- Export All Images: zero-pad the page number so files sort in page order (#2208) by @snipeTR in #2295
- edit: commit the open paragraph when a click switches text boxes by @midasmatterhorn in #2302
- Read WinAnsi 0xAD as a hyphen, so search and redaction can see it by @tanish2k09 in #2305
- fix(engine): give a host with no clock or time zone a real one (Session::with_wall_clock) by @bonfim6P in #2317
- feat(automation): Automation::render_pixels returns a page as RGBA, without the PNG round trip by @bonfim6P in #2318
- M14: Italian catalog: complete the missing entries by @kcobelli-pixel in #2320
- fix(ui): stop dropping cached tiles when zooming away and back (#2196) by @Hathor875 in #2323
- test(ui): wait for the text layer by state, not for a fixed second (#1277) by @mtlcl410 in #2327
- fix(print): the Print dialog waits for the printer list instead of offering Save as PDF (#160) by @mtlcl410 in #2332
- M3: arrow keys follow the Scroll speed preference (#985) by @mtlcl410 in #2333
- Requeue render requests after parse cancellation by @sanyamsingh001 in #2334
- feat(automation): accessibility_tags lists tags a page at a time, with filters by @CouchRiv in #2335
- feat(automation): bookmarks and links say where on the page they go by @CouchRiv in #2344
- fix(ui): on macOS, dragging a tab moves the tab, not the window by @tisca26 in #2347
- M10.5: convert print previews to grayscale by @earlvanze in #2351
- Preserve literal spaces in page-label prefixes by @sanyamsingh001 in #2355
- crypt: property tests for encrypted content, crypt filters and damaged ciphertext by @amoisttowe1 in #2358
- fix(ui): a shape just drawn resizes from its handles without the Select tool by @cortenburg28-arch in #2362
- fix(cli): render comments the app renders when /AP is missing by @earlvanze in #2382
- Fix util.printd panic on an escaped multi-byte character by @Silvertree2010 in #2386
- Reject impossible dates such as Feb 30 in FormCalc Date2Num and Parse by @Silvertree2010 in #2388
- M5: Make Properties Default in Comment Properties by @DCM4711 in #2031
- M1: keep unknown trailer entries on a full save (#1338) by @bartalos86 in #1431
- Tests: viewer find test waits by a deadline (flaky under load) by @echelon in #779
- Add permission-aware selected-text Copy to Edit and context menus by @FredApps in #1244
- M6: expose dropdown and list-box field alignment (#1208) by @DWAA1660 in #1263
- M14: correct localization and installer parity statuses (gap 24) by @rp6186030 in #1211
- M1: repair exhausted xref hints without object-number overflow (#1337) by @DWAA1660 in #1359
- M10: Windows print jobs show per-sheet progress; printers list faster (follow-up to #944) by @TKIPisalegacycipher in #1236
- Keep selected form values and page content through later edits (#1319, #1305, #1324, #1306) by @bartalos86 in #1452
- M7: keep line breaks when editing a multi-line paragraph (#1443) by @rp6186030 in #1486
- MCP: confine file access with --automation-read-root and --automation-write-root by @isaac-levine in #1448
- fix(macos): Cmd+Q asks about unsaved changes (#1136) by @Mahmud-Baspehlivan in #1533
- M3: scroll the view when drawing at an edge; take back a polygon's last point by @philip-tam in #1549
- M2: preserve inline-image pixels when rewriting page content by @MMexicann in #1562
- Perf: defer marker and link index scans until first use by @cyfung1031 in #1434
- M12: tag unstructured AcroForm widgets by @earlvanze in #1451
- M12: find untagged accessibility content by @earlvanze in #1463
- feat(ui): preference to hide author-only highlight hover previews (#1432) by @Totopo27 in #1466
- Print: 4 x 6 in label paper and a Label layout for shipping labels by @Ace40063 in #1583
- M12: show structure tag content by @earlvanze in #1496
- Keep added text selectable over form fields by @FredApps in #1528
- M7: Cut, Redact, Create Link and Recognize Text in the picture menu; keep the menu open by @philip-tam in #1621
- M6: preserve XFDF field text around XML comments by @storybored379 in #1647
- M14: store XDG preferences in configuration directory (#1395) by @DWAA1660 in #1536
- M7: grow text boxes and edit existing text by @YouseifUS in #1539
- M6: make list boxes directly selectable and scroll to selection (#1524) by @lollinoo in #1543
- Complete the Arabic (العربية) catalog: every missing row translated by @hasan-sdaif in #1559
- M1: edit finds the pages a damaged file's readers find by @marcoarnulfo in #1664
- M14: Fix(nixos): discover installed UI fallback fonts on NixOS by @tomasmark79 in #1553
- M6: preserve carriage returns in form CSV exports by @MMexicann in #1563
- M6: export valid XML tags for Unicode field names by @MMexicann in #1588
- Keep annotations readable under reading colours (#1548) by @edurbs in #1557
- Comments panel: page groups fold from their chevron by @marcoarnulfo in #1614
- M3: Wayland: stop retaining Ctrl zoom for pixel-only wheel input by @tomasmark79 in #1569
- Tests: the signing test's password meets the 8-character minimum (#2417) by @wstock in #2420
- fix(parity): merge the keys concurrent merges left twice in acrobat-features.toml by @mtlcl410 in #2419
- fix(i18n): zh-hant had two keys twice after concurrent merges by @mtlcl410 in #2414
- Tests: repair stale save and search regressions without weakening validation by @FredApps in #2484
- Fix main UI regressions in paging, fonts and test expectations by @FredApps in #2502
- i18n: fill Vietnamese and Lithuanian coverage gaps on main by @FredApps in #2510
- Read the Annex D.2 alias codes as the ink they draw, in both tables by @tanish2k09 in #2656
- Score reading order in the text oracle, which word F1 cannot see by @tanish2k09 in #2680
- Record the day's two changes in the roadmap and gap 12 by @tanish2k09 in #2682
- fix(render): faster sampled functions, image decodes across zoom levels and patch meshes (vendored hayro-interpret patches 31–33) by @Piohrun in #2436
- fix(ui): validated signature display, snapshot tab reuse by @chiranjeevi-max in #1895
- ci: add nix check workflow by @dylanmtaylor in #2727
- test: retain open regressions and deterministic fixtures by @skylartaylor in #2067
- M8: the redaction audit finds a cover over one word of a long line (#2662) by @mtlcl410 in #2698
- Resolve remote links and document-supplied output names safely by @skylartaylor in #3083
- M6: preserve complete plain XML form values by @MMexicann in #2686
- deny: acknowledge the new zbus unmaintained advisories by @skylartaylor in #3091
- M6: preserve whitespace in XML and XFDF attributes by @MMexicann in #1917
- fix(filters): preserve output-limit errors in raw Flate fallback by @MMexicann in #2267
- Read stream-boundary comments as the renderer does, and isolate new marks from appended graphics state by @skylartaylor in #3102
New Contributors
- @Luchsen made their first contribution in #1457
- @tylerstoltz made their first contribution in #1547
- @s17sh70x2jfl031ag made their first contribution in #1694
- @manchitmr made their first contribution in #1706
- @alexanderalber made their first contribution in #1710
- @duydev made their first contribution in #1712
- @ehinderer made their first contribution in #1903
- @regendorf-ux made their first contribution in #1927
- @andreero0 made their first contribution in #1967
- @vangel76 made their first contribution in #1974
- @alehel made their first contribution in #1975
- @Osaym made their first contribution in #2012
- @lava made their first contribution in #2028
- @tydude001 made their first contribution in #2037
- @Dev-next-gen made their first contribution in #2040
- @osaidahmed made their first contribution in #2047
- @txiki739 made their first contribution in #2049
- @sampaiodias made their first contribution in #2055
- @jonathanwxh-cell made their first contribution in #2106
- @michaelsh1 made their first contribution in #2109
- @lhymes made their first contribution in #2122
- @atahabilder1 made their first contribution in #2221
- @abc2cb made their first contribution in #2239
- @adrianiglesiass made their first contribution in #2252
- @Silvertree2010 made their first contribution in #2253
- @abszar made their first contribution in #2281
- @midasmatterhorn made their first contribution in #2302
- @bonfim6P made their first contribution in #2317
- @kcobelli-pixel made their first contribution in #2320
- @tisca26 made their first contribution in #2347
- @amoisttowe1 made their first contribution in #2358
- @cortenburg28-arch made their first contribution in #2362
- @DCM4711 made their first contribution in #2031
- @TKIPisalegacycipher made their first contribution in #1236
- @isaac-levine made their first contribution in #1448
- @Ace40063 made their first contribution in #1583
- @hasan-sdaif made their first contribution in #1559
- @tomasmark79 made their first contribution in #1553
Full Changelog: v0.8.0...v0.9.0