github storytold/pdfcraft v0.20.0
PdfCraft v0.20.0

49 minutes ago

What's Changed

  • fix(ui): size the whole-page raster allowance to the pages on screen by @dotCooCoo in #6065
  • fix(ui): continuous view renders the pages ahead of the scroll by @dotCooCoo in #6063
  • Scroll: smooth wheel bursts and preserve precise movement by @dotCooCoo in #6031
  • refactor(ui): tell page modules whether a press is theirs (router PR 4a) by @alehel in #5803
  • M11: JBIG2 encodes only what its decoder takes: Optimize no longer stores large images PdfCraft can't draw by @Piohrun in #5511
  • fix(render): JBIG2 refinement reads 0 past its reference's width (hayro-jbig2 patch 13) by @Piohrun in #5999
  • M1: encryption reads every legal form: crypt filters by reference, a stream's own filter on screen, and full saves that keep /Encrypt by @Piohrun in #5548
  • fix(render): a JBIG2 refinement of the page refines only its area (hayro-jbig2 patch 16) by @Piohrun in #6058
  • fix(render): a JBIG2 region located past i32::MAX is off the page (hayro-jbig2 patch 14) by @Piohrun in #6016
  • M11: JBIG2 images share a symbol dictionary, up to 16 at a time (optimize.mono-compression) by @Piohrun in #5910
  • M6: forms decodes field values, renamed calculations and detected pages within shared budgets by @Piohrun in #6132
  • fix(render): a JBIG2 refinement reads a reference right of it from its first column (hayro-jbig2 patch 15) by @Piohrun in #6048
  • feat(organize): export, import and copy bookmark trees (#6018) by @KenM76 in #6115
  • perf(render): undo PNG predictors a byte row at a time (#5430) by @KenM76 in #5432
  • M12: PRC reader crate (pdfcraft-prc) (#1297) by @KenM76 in #5786
  • fix(ui): list X.PDF in file pickers on Linux and the BSDs (#5481) by @KenM76 in #5487
  • M12: an XFA check box without a width is as wide as its box and caption by @KenM76 in #5476
  • M12: add a 3D model (U3D or PRC) to a page with a poster (#1297) by @KenM76 in #5808
  • fix(forms): clearing a field's length limit leaves it with none, not its parent field's by @KenM76 in #5250
  • feat(ui): cut, copy and paste bookmark subtrees (#3994) by @KenM76 in #6125
  • fix(edit): an edited OCR phrase under its scan image is drawn on top (#3973) by @KenM76 in #5396
  • M12: headless renderer for PRC models (pdfcraft-prc-render), stacked on #5786 by @KenM76 in #6069
  • M12: model_render, a page's 3D model drawn to a PNG (stacked on #6069) by @KenM76 in #6087
  • Pass the Linux signing key to the release workflow by @dylanmtaylor in #6200
  • M5.7: the quick bar's Fill & Sign button shows the tool it picks by @agent-reed in #5435
  • fix(ui): About credits tables fit without side-scrolling and their columns resize by @FredApps in #6052
  • M5.7: the Fill & Sign text controls use a colour dot and a size flyout by @agent-reed in #5754
  • M14: Preferences can turn off the update check at start (#5737, #5460) by @hasannadeem in #5758
  • M2: scans stay sharp at screen size and smooth when zoomed (area-average shrink, bilinear enlarge) by @Kronbii in #3858
  • M1: respect generations in PDF object references and full saves by @MMexicann in #1143
  • M5: Escape leaves a Fill & Sign tool, as it leaves a comment tool by @ohagmann in #4539
  • M5: a double-click on a comment card's text edits it by @ohagmann in #4544
  • M10: Enhance scanned file cleans scanned pages in place by @huppiflupp in #5125
  • M5: Shift holds lines level or plumb while drawing (ortho) by @ohagmann in #4285
  • feat(web): page host mode, so a page can host PdfCraft in its own document (#4731) by @helenkwok in #4732
  • M3: → / ← scroll a page wider than the window before turning it by @ohagmann in #4540
  • M5: a comment's text, border or line, and fill each at an opacity of its own by @ohagmann in #4542
  • Forms: date fields name months in the date language, not always English (#5303) by @ZIDAN44 in #5464
  • M5: copy and paste comments between documents, select several at once, finish connected lines from the menu by @ohagmann in #3484
  • Fill & Sign: a Border control for typed text, and a border colour of its own by @ohagmann in #4146
  • M5: text boxes and typed text take an oval or a circle for their border by @ohagmann in #4543
  • docs: add comparative PDF workflow research reference by @eliets2 in #2940
  • Test that moving an image keeps its marked-content sequence intact by @eliets2 in #4248
  • M13 batch: pin the command-line exit codes before any change by @eliets2 in #6296
  • M13 batch: test that failed folder runs leave no output or staging file by @eliets2 in #6298
  • One known-answer case per implemented clause by @eliets2 in #6301
  • The PDF/A panel reports its own checks, not conformance by @eliets2 in #6302
  • Tests: a signed encrypted document's byte ranges cover its earlier revision by @eliets2 in #6303
  • Fuzz target for the JavaScript engine's script runner by @eliets2 in #6304
  • Fuzz target for redaction apply by @eliets2 in #6305
  • Fuzz targets for PDF/A verify and convert by @eliets2 in #6308
  • M13 batch: an action step that fails now fails its file by @eliets2 in #6307
  • M13 batch: correct parity status and scope the no-replace sentence by @eliets2 in #6299
  • Add IBAN matching to Search and Redact patterns by @eliets2 in #4332
  • Parity: titles and the PDF/X row say only what is implemented by @eliets2 in #6300
  • Convert replaces a removed forbidden annotation, so it is not reported again by @eliets2 in #6306
  • Issue #5081: assembly at revision 3 and later needs bit 11; high-quality print, accessibility and form fill follow the revision by @eliets2 in #6309
  • M13 batch: test that results hold no planted secret, and record network-crate reachability by @eliets2 in #6297
  • Give a redacted or sanitized copy a new file identifier by @eliets2 in #3734
  • Tests: pin the file identifier formula, not a whole rewritten file by @FredApps in #6346
  • M10: OCR engines, confidence, preprocessing and a review workflow by @eliets2 in #977
  • sign: classify changes by signed object role by @benandez in #6361
  • sign: under no-changes certification, only invisible document timestamps may follow by @benandez in #6364
  • sign: land the still-valid parts of #6358, #5187 and #5173 by @dylanmtaylor in #6375
  • redact: independent redaction proof machinery (snapshot, sweep, budget) by @eliets2 in #5557
  • Redaction: a pattern nothing paints with any more leaves the page by @Hamza0101 in #3680
  • Delete key removes selected content object in edit mode by @eliets2 in #6384
  • Add Pages range field to Compare Files dialog by @eliets2 in #6336
  • Add PCX image support to Create PDF conversion by @eliets2 in #6396
  • trust certificate key type when CNG algorithm group is unreadable by @eliets2 in #6391
  • Copy the shared house rules into AGENTS.md by @FredApps in #6416
  • perf(cos): an object that can't be read is searched for once, not on every read by @KenM76 in #5802
  • M3: copy keeps formatting as HTML (Copy with formatting) by @KenM76 in #6197
  • Add text: gray or CMYK colour, painted with g or k (#6440) by @ZIDAN44 in #6471
  • pdfcraft-web: window.pdfcraft, the page command API from craft-web-api, opt-in with ?control by @helenkwok in #6497
  • feat(cos): list the objects that could not be read in doc_info by @KenM76 in #5816
  • refactor(ui): tell Edit text, the text layer and links whether a press is theirs (router PR 4b) by @alehel in #6243
  • Add dry-run preview to doc_batch without writing outputs by @eliets2 in #6486
  • Release: refresh contributor credits for each release (#6487) by @Luis-0508 in #6488
  • M9: signed appearances show their real validation state (#79) by @chiranjeevi-max in #2808
  • Keep ruled tables when exporting a PDF to Word by @Silvertree2010 in #5154
  • M2.6: never rewrite a content stream from the part before its damage by @Piohrun in #6289
  • fix(filters): inflate with zlib-rs everywhere, and charge the image allowance for what Flate reads by @Piohrun in #5825
  • contributors: set names for vangel76 by @vangel76 in #6067
  • Add Crop pages to the document quick toolbar (#5330) by @vangel76 in #5564
  • Select the bookmark title when creating or renaming a bookmark (#5529) by @vangel76 in #5562
  • perf(cos): write hex strings, integers and references without the formatter by @vangel76 in #4878
  • UI: allow a half-screen window, and fold the mode bar when narrow (#1913) by @vangel76 in #1988
  • Optimize: optional target_bytes for doc_optimize (#1889) by @vangel76 in #1983
  • perf(cos): speed up byte searches during cross-reference reconstruction by @vangel76 in #4874
  • perf(cos): write_full keeps the objects it parsed while numbering by @vangel76 in #4876
  • Redact: mark text by caller-supplied regex (#1886) by @vangel76 in #1977
  • Signing a form that sets NeedAppearances no longer makes Acrobat ignore the signature by @vangel76 in #6208
  • M7: Ungroup draws Form artwork in place, so its text can be edited (#2964, #3005) by @mtlcl410 in #3067
  • fix(edit): restore page rules after the content stream API change by @FredApps in #6619
  • Fix the build: page_rules joins content streams with text::joined by @bflatastic in #6621
  • Word tables get outer borders only where the page rules them by @bflatastic in #6626
  • M10: Correct recognized text keeps the window's tabs and toolbar and shows the page (ocr.correct-recognized-text) by @mtlcl410 in #6490
  • M10: adopt file-backed Windows printing with approved dependencies and the crash fix by @songzhihui in #6514
  • Word and HTML exports name the document's language (#5498, merged with main) by @bflatastic in #6631
  • Word and HTML exports name the document's language by @oracola91 in #5498
  • An edited OCR phrase is drawn at one size (#5454, with the requested test) by @bflatastic in #6633
  • fix(edit): an edited OCR phrase is drawn at one size (refs #3313) by @TiagoCK in #5454
  • OCR in the web build (#1641, merged with main, two fixes) by @bflatastic in #6634
  • M10: OCR in the browser, in Web Workers with SIMD (ocr.ocr-web) by @bmh129 in #1641
  • House rules: copy the licence allowlist with Unicode-3.0 from craft-contrib by @bflatastic in #6635
  • M7: edit grouped Thai text with one click, on Ungroup's form expansion (#6249 + review fixes) by @bflatastic in #6627
  • M7: preserve source fonts when editing grouped Thai text by @xullul in #6249
  • redact: treat unusable /QuadPoints as absent in every reader by @chamber074 in #6525
  • M7: break Thai rows between dictionary words (#3492, merged with main) by @bflatastic in #6637
  • M7: break Thai rows between dictionary words by @rutthawitc in #3492
  • Edit a PDF: select all, copy, cut and paste page objects within and between documents (#5989) by @bflatastic in #6639
  • Draw Thai in Fill & Sign, text boxes, form fields, headers, footers and watermarks (#2354) by @bflatastic in #6632
  • Exports keep a wrapped paragraph and a bulleted list as paragraphs (#5404, merged with main) by @bflatastic in #6643
  • Exports keep a wrapped paragraph and a bulleted list as paragraphs by @oracola91 in #5404
  • Fill & Sign test: check Escape by edits, not by comparing saves by @bflatastic in #6646
  • Combine files: a drop is one undo step, in order, and names what it can't take by @bflatastic in #6645
  • M5: a comment whose colour is written [r g b null] is drawn, as CMYK with the null read as 0 (view.render-annotation-appearances) by @mtlcl410 in #6503
  • fix(render): TIFF predictor 2 is undone a byte row at a time at 8 and 16 bits (hayro-syntax patch 42) by @mtlcl410 in #6505
  • fix(render): a form XObject that draws itself is drawn once (hayro-interpret patch 89) by @mtlcl410 in #6515
  • M2: info lists the repairs made while opening, as Document Properties does (misc.cli-inspect) by @mtlcl410 in #6518
  • M2: a wide stroke of a path with y curves is drawn, not dropped (view.render-pages) by @mtlcl410 in #6526
  • fix(engine): map URL text line rects with view_rect_to_user and filter non-finite coordinates by @jonathanwxh-cell in #6536
  • fix(js): decode ', numeric, and HTML named character references in FormCalc Decode by @jonathanwxh-cell in #6538
  • refactor(cos): consolidate duplicate civil_from_days onto pdfcraft_cos::civil_from_days by @jonathanwxh-cell in #6540
  • M11: PDF/A verify checks that predefined XMP properties have their value types (optimize.pdfa-validate) by @mtlcl410 in #6220
  • M5: Replace Text keeps its replacement on the group's primary, the caret (comment.replace-text) by @mtlcl410 in #5689
  • M3: pages shorter than the window sit in its middle (#5708) by @hasannadeem in #5759
  • M3: a protected file named before others at launch keeps its password prompt (#5756) by @mtlcl410 in #5762
  • Keep the font size when making text box properties default by @Silvertree2010 in #5784
  • M12: an XFA page area keeps at most 128 content areas, so a subform split across them lays out within its budget (#5843) by @mtlcl410 in #5844
  • fix(create): image export checks a JPEG's Extended XMP chunks before decoding it by @dylanmtaylor in #5860
  • M14: localization parity counts every catalog with the i18n report (#5805) by @hasannadeem in #5894
  • fix(measure): charge snapping per filter stage and bound listing work by @dylanmtaylor in #5920
  • fix(redact): prune the resources of Forms a surviving Type 3 glyph draws by @dylanmtaylor in #5924
  • fix(edit): stop rescanning what a loop already holds in wrapping, grouping and flattening by @dylanmtaylor in #5963
  • fix(print): index page labels once and cap how many pages a range selects by @dylanmtaylor in #5967
  • fix(engine): coalesce script resetForm requests and bound console output per edit by @dylanmtaylor in #5975
  • Harden Bates sequence validation by @Harrison-Booth in #6003
  • fix(sign): read each existing DSS stream once and within a decoded-size allowance by @dylanmtaylor in #6040
  • fix(a11y): heading titles decode their source strings within a shared allowance by @dylanmtaylor in #6049
  • Expose widget rectangles to field scripts by @Harrison-Booth in #6093
  • fix(xfa): read and validate the first alternative in typed_date by @jonathanwxh-cell in #6120
  • fix(js): decode FormCalc Unicode string escapes and preserve chained unary not/! by @jonathanwxh-cell in #6122
  • fix(ui): two-page continuous view prefetches whole rows ahead by @dotCooCoo in #6126
  • Scroll: a touch zoom keeps zooming after its keys are let go by @dotCooCoo in #6130
  • fix(export): skip empty Markdown runs before merging and emphasis lookahead by @jonathanwxh-cell in #6134
  • fix(sign): merge CMS unsignedAttrs into one SET and validate SignerIdentifier by @jonathanwxh-cell in #6137
  • fix(fonts): a subset that gives the space no width can't encode one (#6131) by @fatihkunak in #6158
  • M12: floating fields show the values scripts give them, and the sheet number and count (#6160) by @mtlcl410 in #6166
  • M1: correct the COS object reference API example by @MMexicann in #6183
  • Windows: shortcuts take pdfcraft.exe's icon, so a taskbar pin keeps it by @art804 in #6184
  • M1.10: richer synthetic seeds for the mutation fuzzer by @rp6186030 in #6186
  • M5: document implemented annotation builders and rich text by @MMexicann in #6189
  • M1: define the Info object in the testkit README example by @MMexicann in #6191
  • M8: use AuditFinding in the audit README example by @MMexicann in #6204
  • fix(canvas): release closed panels' thumbnails while a visible page renders by @quincy-jc in #6227
  • fix(canvas): find a page's pictures off the window thread by @quincy-jc in #6228
  • M9: a signed string respelled in hexadecimal is no change after signing (sign.changes-after-signing) by @mtlcl410 in #6502
  • Ignore dictionary key order when checking signed pages for changes by @Silvertree2010 in #5962
  • M10: a layer the document marks screen-only stays off the printed sheet (print.print-ready-pdf) by @mtlcl410 in #6387
  • M1: a V4 RC4 file with a 40- or 48-bit key reads and saves (#6397) by @mtlcl410 in #6398
  • M12: headless orbit navigation for 3D models by @KenM76 in #6406
  • M7: a click away from a picture being cropped applies the crop (edit.image-crop) by @mtlcl410 in #6428
  • M3: End shows the end of the document, the last page down to its bottom (view.page-navigation) by @mtlcl410 in #6435
  • M6: a widget whose /Parent names a missing object is a field of its own (form.field-list) by @mtlcl410 in #6445
  • M6: a field whose /Kids loop back or name a root field keeps its other kids (form.field-list) by @mtlcl410 in #6446
  • M5: a font a page lists among its annotations is not a comment (comment.list-view) by @mtlcl410 in #6447
  • Signature validation takes the certification from the catalog by @oracola91 in #6453
  • Apply Redactions replaces the recovery snapshot at once by @oracola91 in #6454
  • Automation follows a path toward its root before looking anything up by @oracola91 in #6455
  • Links, actions and JavaScripts takes the scripts out of bookmarks by @oracola91 in #6456
  • Private data takes OPI links and alternate images by @oracola91 in #6457
  • Page copies bring only the form fields on the pages copied by @oracola91 in #6461
  • feat(reduce): ask where to save before compressing by @quincy-jc in #6229
  • perf(optimize): work out pictures on threads and skip needless page reads by @quincy-jc in #6230
  • M6: Shift keeps a field's move horizontal or vertical in Prepare a form, as in Acrobat (form.prepare-form-mode) by @mtlcl410 in #6260
  • fix(render): a JBIG2 scan whose data starts with a JBIG2 file header draws instead of a white page (hayro-jbig2 patch 17) by @mtlcl410 in #6279
  • fix(edit): break the row on every Unicode row break by @MatrixMagician in #6295
  • M10: applying recognized words refreshes only the page content they add (#6310) by @mtlcl410 in #6316
  • M6: a multi-select list's picks reach its XFA data as one value element each (form.fill-choice) by @mtlcl410 in #6328
  • M10: comments and fields without an appearance print as the page shows them (print.comments-and-forms) by @mtlcl410 in #6367
  • fix(ui-egui): stop held middle-button auto-scroll on release (#3795) by @jonathanwxh-cell in #6544
  • M5: the hotbar settings button shows one tooltip (#6548) by @mtlcl410 in #6550
  • M10: Pages per sheet takes a custom grid of columns by rows (#6551) by @mtlcl410 in #6559
  • M6: a product of empty fields is 0, not 1 (form.af-simple-calculate) by @mtlcl410 in #6567
  • M7: Edit text lines set in a Type 3 font are as high as their glyphs (edit.text-edit) by @mtlcl410 in #6571
  • Deduplicate pages in ocr_job and use a set for page lookup by @eliets2 in #6586
  • M3: Find matches words divided by soft hyphens, zero width characters or a Chinese or Japanese line end (view.find) by @mtlcl410 in #6595
  • pdfcraft-web: say how to wait for window.pdfcraft's functions by @helenkwok in #6604
  • M6: a calculate script that sets its own field through the field object keeps that value (form.custom-scripts) by @mtlcl410 in #6616
  • Fix main's build after the latest merges by @bflatastic in #6660
  • Land render and syntax patches (#6355, #6501, #6506, #6510, #6534, #6561, #6290, #6312, #6348, #6532, #6438) by @bflatastic in #6664
  • M1: a document that encrypts only its embedded files opens without a password (core.attachment-only-encryption) by @mtlcl410 in #6312
  • fix(render): a ToUnicode CMap reads its mappings past a token it can't parse (hayro-cmap patch 3) by @mtlcl410 in #6348
  • fix(render): a page whose MediaBox or CropBox encloses no area shows its content (hayro-syntax patch 38) by @mtlcl410 in #6355
  • M2: a page past the rasterizer's coverage renders what fitted instead of failing (view.render-error-isolation) by @mtlcl410 in #6438
  • fix(render): an image whose PNG predictor was declared but never applied draws its samples (hayro-syntax patch 40) by @mtlcl410 in #6501
  • fix(render): a fax image with more /Rows than its /Height is decoded to its height (hayro-syntax patch 41) by @mtlcl410 in #6506
  • M1: the renderer reads a cut-off last update's objects, as the document model does (core.repair-broken-files) by @mtlcl410 in #6510
  • M2: a CMap's bfchar mappings read codes at their codespace length (view.render-cid-fonts) by @mtlcl410 in #6532
  • M2: a page without a /MediaBox is US Letter (view.render-pages) by @mtlcl410 in #6534
  • M1: a file whose last update has no /Prev opens with all its pages and a repair note (core.repair-broken-files) by @mtlcl410 in #6561
  • M3.9: the control screenshot test makes its renderer before the 5 s deadline by @austin62jake in #5252
  • Forms: highlight every selected widget in Prepare a form by @KnottyDyes in #5253
  • docs: a portable copy keeps its single-instance socket in %LOCALAPPDATA% by @austin62jake in #5260
  • M4: Initial View magnification offers 25% and 100% (#5254) by @Ethunxxx in #5265
  • Track XMP attribute quotes only inside tags by @TheGalitube in #5271
  • M7: links that go to a page open at a chosen zoom (edit.action-goto) by @Ethunxxx in #5277
  • Reload: a file changed under an open dialog waits for it to close (#3917) by @mmmaarian03-crypto in #5278
  • fix(organize): remove uninherited crop boxes and guard disjoint or overflowing boxes by @jonathanwxh-cell in #5282
  • M3: text_find can stop at its limit without reading on to the end (#5328) by @Lcoding15 in #5335
  • fix(forms): resolve field and widget references in ResetForm and Hide actions by @jonathanwxh-cell in #5364
  • M4: bookmarks run their actions as links do (organize.bookmark-actions) by @Ethunxxx in #5410
  • fix(optimize): downsampling never enlarges; a huge target_ppi aborted on a 20 TB allocation by @jayzed80 in #5425
  • fix(compare): visual compare no longer overflows on declared sizes its buffers cannot hold by @jayzed80 in #5458
  • fix(ui): show creation and modification dates in Document Properties (#5534) by @NathanGlasby in #5536
  • tests(ui): the Search panel snapshot no longer depends on which page's text arrives first by @guillehr2 in #5560
  • Reject signs in XMP numeric character references by @Silvertree2010 in #4755
  • macOS: declare the UI languages so the open and save panels are translated by @Atalantis in #4785
  • fix(render): treat combined fill-and-stroke operators as a knockout group (#3229) by @jonathanwxh-cell in #4788
  • edit: a variation selector after existing text draws the base glyph instead of failing the edit by @midasmatterhorn in #4899
  • Keep the outline intact when move_bookmark gets an invalid target by @Silvertree2010 in #4901
  • Reject '+' sign in print page ranges by @Silvertree2010 in #4931
  • fix(optimize): size objects in compressed object streams by their compressed share by @jonathanwxh-cell in #4951
  • M12: an XFA field with a long label beside it is as tall as its label, not a page (form.xfa-dynamic) by @mtlcl410 in #5109
  • fix(forms): name tree nodes sharing one long /Kids array no longer exhaust memory by @lowtide-lab in #5121
  • Dialogs: a dialog no longer keeps a taller one's height (#5118) by @mmmaarian03-crypto in #5139
  • Roll human_size over to MB when KB rounds to 1024.0 by @Silvertree2010 in #5186
  • Edit background, watermark and header colours as sRGB by @Silvertree2010 in #5218
  • Publish action wizard outputs without replacing existing files (#1805) by @MarekSpodBiedry in #1874
  • Check the remembered path of a pathless doc_save against the root (#1791) by @MarekSpodBiedry in #1879
  • Refuse a legacy encryption key length above 128 bits instead of panicking (#1769) by @MarekSpodBiedry in #1882
  • Use PingFang from the reserved font directory on macOS 26 (#1716) by @MarekSpodBiedry in #1893
  • M14: the Windows installer lets the user choose the install folder (#1139) by @mtlcl410 in #2480
  • fix(content): an inline image ends at its own EI, not a later one by @luigiPinna in #2483
  • fix(edit): preserve annotation optional-content membership in marked content (#3213) by @Ozt-y in #3275
  • Attachments: a saved attachment keeps the PDF's Mark-of-the-Web on Windows (#3990) by @mmmaarian03-crypto in #4091
  • UI: a panic in a frame no longer closes the app and its tabs (#3914) by @mmmaarian03-crypto in #4201
  • Skip the Bates ACL test where the deny entry doesn't bind by @bflatastic in #6670
  • Land render and font patches (#6292, #6287, #6314, #6353, #6359, #6368, #6409, #6491, #6545, #6516, #6521, #6528, #6533, #6529, #6542, #6543, #6569, #6572) by @bflatastic in #6663
  • fix(render): a small image with a soft mask far larger than it draws in seconds, its mask averaged down once (hayro-interpret patch 82) by @mtlcl410 in #6287
  • fix(render): a page of stencil masks painted with a tiling pattern draws in seconds instead of running out of memory (hayro patch 30) by @mtlcl410 in #6292
  • fix(render): a TrueType font marked with an out-of-range loca format draws its letters instead of boxes (hayro-interpret patch 83) by @mtlcl410 in #6314
  • fix(render): an embedded CJK font without a usable ToUnicode reads its text through its collection's UCS2 CMap (hayro-interpret patch 84) by @mtlcl410 in #6353
  • fix(render): a Type 3 glyph shown again isn't decoded again (hayro-interpret patch 87) by @mtlcl410 in #6409
  • fix(render): a non-embedded Times New Roman draws the glyphs its codes name (hayro-interpret patch 88) by @mtlcl410 in #6491
  • fix(render): a picture that doesn't decode is decoded once, not at every draw (hayro-interpret patch 91) by @mtlcl410 in #6516
  • fix(render): glyph names read as text only in the glyph list's uni and u forms (hayro-interpret patch 92) by @mtlcl410 in #6521
  • fix(render): a CID-keyed CFF font with an emptied font dict still draws its other glyphs (hayro-interpret patch 93) by @mtlcl410 in #6528
  • fix(render): a non-embedded SymbolMT draws Symbol's glyphs, whatever encoding it declares (hayro-interpret patch 98) by @mtlcl410 in #6529
  • M2: a font without a /Subtype is drawn by its /BaseFont (view.render-pages) by @mtlcl410 in #6533
  • fix(render): a patch mesh painted through a path its own size draws every patch (hayro-interpret patch 99) by @mtlcl410 in #6542
  • fix(render): a symbolic TrueType font in the Macintosh glyph order reads its codes as Mac Roman (hayro-interpret patch 101) by @mtlcl410 in #6569
  • M3: Find matches words on a vertical line (view.find) by @mtlcl410 in #6572
  • fix(render): a ToUnicode written with CID ranges gives its text (hayro-interpret patch 85) by @mtlcl410 in #6359
  • Revert #5536: it breaks the Document Properties tests on main by @bflatastic in #6671
  • Land PDF/A verify and convert checks (#6232, #6254, #6172, #6202, #6203, #6206, #6207, #6214, #6215, #6219) by @bflatastic in #6662
  • M11: PDF/A verify asks only the fonts something draws with to be embedded (optimize.pdfa-validate) by @mtlcl410 in #6172
  • M11: PDF/A verify reports integers, reals, strings, names, CIDs and page boundaries past the implementation limits (optimize.pdfa-validate) by @mtlcl410 in #6202
  • M11: PDF/A verify reports Separation spaces of one name that differ and DeviceN spot colours missing from /Colorants (optimize.pdfa-validate) by @mtlcl410 in #6203
  • M11: PDF/A verify checks the file header and Save as PDF/A rewrites it (optimize.pdfa-validate) by @mtlcl410 in #6206
  • M11: PDF/A verify reports transfer functions, halftones and rendering intents a graphics state may not use (optimize.pdfa-validate) by @mtlcl410 in #6207
  • M11: PDF/A verify checks the file identifier and Save as PDF/A adds one (optimize.pdfa-validate) by @mtlcl410 in #6214
  • M11: PDF/A verify checks that TIFF, EXIF and aux XMP properties have their value types (optimize.pdfa-validate) by @mtlcl410 in #6232
  • M11: PDF/A verify checks that XMP extension schema descriptions are complete (optimize.pdfa-validate) by @mtlcl410 in #6254
  • M11: PDF/A verify reports pages with transparency but no blending colour space, and blend modes ISO 32000-1 doesn't define (optimize.pdfa-validate) by @mtlcl410 in #6219
  • Land redaction, organize, forms, annotation, text, measure, XFA, XFDF and edit fixes (#6458, #6459, #6460, #6463, #6474, #5969, #5761, #5852, #6231, #6366, #6504, #6570, #6610, #6597, #6620, #6650) by @bflatastic in #6666
  • M3: a snapshot keeps its resolution when zoomed out (#5716) by @hasannadeem in #5761
  • M5: a text markup, line, polyline, polygon or ink comment whose points reach past its Rect is drawn through them (view.render-annotation-appearances) by @mtlcl410 in #6366
  • Removed layers leave every optional-content configuration by @oracola91 in #6459
  • Hidden layers includes layers a View usage rule turns off by @oracola91 in #6460
  • Combine and Insert bring only the bookmarks and attachments of the pages chosen by @oracola91 in #6463
  • Type 3 pruning counts a page's appearances toward one operator total by @oracola91 in #6474
  • M6: a named kid is named up its own /Parent chain, and a radio option of any same-named field is chosen by the name (form.field-list) by @mtlcl410 in #6570
  • M6: a field whose normal appearance gives no stream is drawn from its value, /MK and /BS (view.render-annotation-appearances) by @mtlcl410 in #6610
  • fix(edit): editing an OCR phrase redraws only the words it changes (refs #3313) by @TiagoCK in #6650
  • Redaction keeps Type 3 glyphs that annotations, patterns and soft masks show by @oracola91 in #5197
  • fix(redact): read inherited forms once for all names in resource cleanup by @dylanmtaylor in #5969
  • Remove Hidden Information unlinks images nothing draws by @oracola91 in #6458
  • Updates: take craft-update from craft-libs main at 1b34eba41 by @dotCooCoo in #6674
  • fix(redact): Remove Hidden Information reads only what the chosen categories need (part of #5873) by @ljkx in #6021
  • fix(render): a stream ending in endstrea is not read into a later object's stream (hayro-syntax patch 36) by @mtlcl410 in #6669
  • fix(preflight): resolve indirect spot families, null dict entries, and numeric equality by @jonathanwxh-cell in #6679
  • fix(preflight): walk soft-mask groups, indirect subtypes, and type 5 halftones by @jonathanwxh-cell in #6680
  • M4: custom document properties are kept in XMP as pdfx: properties (organize.custom-properties) by @Ethunxxx in #6686
  • Updates: a ready update starts its helper when the app exits by @dotCooCoo in #6688
  • Print production: Fix hairlines (dialog, edit, tool) by @regendorf-ux in #1906
  • M3: whole-word Find matches inside Chinese, Japanese and Thai text (view.find-options) by @mtlcl410 in #2075
  • M2: a page whose content was cut at the renderer's limits says so (#623) by @mtlcl410 in #2113
  • Print: custom paper sizes, and the paper remembered for each printer (page setup) by @regendorf-ux in #2381
  • M14: "Combine files in PdfCraft" on File Explorer's PDF menu (#585) by @mtlcl410 in #2503
  • feat(ui): split view: two panes, one document or two by @regendorf-ux in #2518
  • M3: copied text keeps one line per baseline, reading order for turned lines, letters for ligatures (#4467) by @mtlcl410 in #4468
  • M3: web and email addresses written as page text open like links (#4207) by @mtlcl410 in #4472
  • M6: radio buttons sharing an on state are exclusive unless RadiosInUnison (form.fill-checkbox-radio) by @mtlcl410 in #4489
  • M12: an XFA date field keeps what its patterns don't read as typed, and reads its own patterns first by @EricKaden in #4511
  • edit: preserve gap-drawn spaces and indents in subset fonts via /ActualText (#4229) by @jonathanwxh-cell in #4514
  • fix(automation): XFA clicks and form edits return only the script output they produced by @dotCooCoo in #4559
  • automation: compare canonical root components exactly and test roots-only escape confinement (#4003) by @jonathanwxh-cell in #4569
  • export: order multi-column and turned page items in reading order (#3657) by @jonathanwxh-cell in #4580
  • M12: a page break splits an empty XFA text field that grows with its text (form.xfa-dynamic) by @mtlcl410 in #5525
  • fix(a11y): resolve indirect structure kids, parent tree keys, and table attributes by @jonathanwxh-cell in #5611
  • fix(organize): preserve numbered names, indirect resource dicts, and comment threads by @jonathanwxh-cell in #5612
  • fix(forms): harden tab order, AF script parsing, and null/inherited tree entries by @jonathanwxh-cell in #5614
  • M5: a reply is not drawn on the page or flattened into it (comment.reply) by @mtlcl410 in #5632
  • fix(sign): read OCSP responseStatus as ENUMERATED; drop redundant RSA leading zeros by @dylanmtaylor in #6005
  • fix(create): refuse PNG headers the file cannot back; no truncating JP2 box length by @dylanmtaylor in #6007
  • fix(engine): unknown permissions on an encrypted document refuse copying and printing by @dylanmtaylor in #6011
  • fix(xfa): remember every picture hash written in a pass by @dylanmtaylor in #6035
  • fix(xfdf): FDF comment export excludes source pages by identity, not by /Type by @dylanmtaylor in #6036
  • fix(engine): summarizing comments requires copying permission by @dylanmtaylor in #6039
  • fix(forms): comb detection ignores repeated boxes by @dylanmtaylor in #6077
  • fix(xfa): existing-field traversal shares a field's name among its queued children by @dylanmtaylor in #6080
  • fix(xfa): strip reads a shared indirect Kids array once by @dylanmtaylor in #6081
  • fix(print): a printed page's form shares the page's Resources when it adds no appearance by @dylanmtaylor in #6089
  • fix(a11y): auto-tagging bounds the content it plans across all pages by @dylanmtaylor in #6090
  • fix(sign): chain building hashes a certificate once for all candidate issuers by @dylanmtaylor in #6096
  • fix(render): the named-destination index spends key bytes from one allowance by @dylanmtaylor in #6097
  • export: the Office zip writer outgrows the classic records with ZIP64 by @midasmatterhorn in #2554
  • fix(organize): preserve page labels across extract, split, and combine (#2670) by @jonathanwxh-cell in #2799
  • M7: replacing a line keeps the source font for the words it can show (#2378) by @mtlcl410 in #2955
  • Search: centre the active match in the viewport (#3530) by @MarekSpodBiedry in #3547
  • M2: the content crate's parser is checked against hayro's, operator by operator (#3107, #3108, #3111, #3177) by @mtlcl410 in #3563
  • Split edit-text paragraphs at headings and blank lines by @Silvertree2010 in #3642
  • M14: the portable copy can register as a PDF handler for the current user (#3758) by @mtlcl410 in #3790
  • M14: the --control file is owner-only on Windows too, and the CLI checks it (#3922) by @mtlcl410 in #3956
  • M5: review statuses are hidden, chain per reviewer and show per reviewer, by /IRT reference (#4122) by @mtlcl410 in #4597
  • fix(edit): catch paragraph edges and frames without aiming for the hairline by @meethere in #4624
  • packaging: Flatpak may talk to the accessibility bus (#4612) by @Lcoding15 in #4641
  • fix(app): set Windows taskbar and Alt+Tab big icon (ICON_BIG) (#3818) by @jonathanwxh-cell in #4681
  • Tests: highlighting an area off the text waits up to 30 s for the page text by @dotCooCoo in #4683
  • fix(optimize): merge side-by-side and grid-tiled image fragments by @jonathanwxh-cell in #4818
  • M7: the Preferences language test opens the app menu on macOS by @EricKaden in #4882
  • Tests: a retained PDF version is the later of header and catalog (#3227 follow-up) by @Harrison-Booth in #4933
  • Test preservation of PDF 2.0 structure metadata by @Harrison-Booth in #5073
  • M12: XFA date pictures read a two-digit year with the century split of 30 by @EricKaden in #5074
  • M12: an XFA breakBefore or breakAfter without a targetType starts no new page (form.xfa-dynamic) by @mtlcl410 in #5145
  • fix(measure): resolve indirect scale objects and validate closed area edges by @jonathanwxh-cell in #5270
  • fix(geom): normalize quad ordering for perspective foreshortening and scale by @jonathanwxh-cell in #5273
  • M3: a pinned folder on Home collapses to its heading, and stays collapsed (#5295) by @Lcoding15 in #5341
  • fix(optimize): validate named destination targets and ignore orphaned refs by @jonathanwxh-cell in #5362
  • fix(ui): selecting in an unchanged paragraph lands on the words the page shows (refs #5185) by @TiagoCK in #5390
  • Create PDF from text takes Cyrillic and Greek, and reports no longer escape them by @oracola91 in #5403
  • Text from a justified line keeps one space between words by @oracola91 in #5496
  • Show form tab-order numbers by @Harrison-Booth in #5509
  • M5: cloudy squares, circles and text boxes are drawn (comment.cloud) by @mtlcl410 in #4195
  • Accessibility: turn a layout table into Div and P tags in one call (#4105) by @pat26-dotcom in #4250
  • M10: (n) names the page at position n, whatever its label, in page ranges and the page box (print.page-range) by @mtlcl410 in #4282
  • M4: a recovered document's first Save asks where instead of writing the sidecar's path (#3923) by @Lcoding15 in #4327
  • M11: PDF Optimizer can discard form submission, import and reset actions (optimize.discard-form-actions) by @dotCooCoo in #4416
  • fix(content): an inline image only the renderer reads counts as ambiguous by @dylanmtaylor in #5874
  • fix(model,oracle): read a page box only when it has four entries; skip empty images by @dylanmtaylor in #5941
  • fix(redact): read text-state operands from the end, as the renderer does by @dylanmtaylor in #5951
  • fix(automation): sign_trust deduplicates certificates with a set by @dylanmtaylor in #5965
  • fix(print,a11y): read summary scans one operator at a time and borrow form resources by @dylanmtaylor in #5968
  • fix(engine): open linked documents without blocking and check the handle is a regular file by @dylanmtaylor in https://github.com/storytold/pdfcraft/pull/5982
  • fix(redact): read the page tree once per sanitize pass, not per page by @dylanmtaylor in https://github.com/storytold/pdfcraft/pull/5983
  • fix(xtask): render-oracle writes page pixels into a private temporary folder by @dylanmtaylor in https://github.com/storytold/pdfcraft/pull/5988
  • fix(cli): render needs the copying permission, as text does by @dylanmtaylor in https://github.com/storytold/pdfcraft/pull/5990
  • fix(cli): cap input reads, budget check's edit pass and escape its stderr records by @dylanmtaylor in https://github.com/storytold/pdfcraft/pull/5997
  • fix(xfa): one decoding allowance for all XFA packets by @dylanmtaylor in https://github.com/storytold/pdfcraft/pull/6000
  • Fix main's build and tests after the latest merges by @bflatastic in https://github.com/storytold/pdfcraft/pull/6706

New Contributors

Full Changelog: v0.18.1...v0.20.0

Don't miss a new pdfcraft release

NewReleases is sending notifications on new releases.