e59c9a793e
Fix text editing layout and preserve source PDF font styles ( #36 )
...
* Comments: a text box's rectangle follows its edited text
Editing a text box (or typewriter or callout) rewrote /Contents but
kept the old /Rect: the appearance clipped the new text to the old box
and silently dropped lines that no longer fit, while shorter text left
an oversized box. set_contents now re-measures the text with the same
Helvetica widths as at creation and re-fits the box: the wrap width and
top edge stay, the height fits the wrapped lines. A callout's leader
line keeps its place and re-attaches to the moved box (that geometry
moved from set_rect into a shared apply_text_box). A locked box keeps
its text editable, so it re-fits too.
Covered by annot tests (grow and shrink with nothing clipped, callout
leader re-attach, locked box) and a comment_edit round trip through the
automation tools; parity entries cite them.
Co-Authored-By: GLM <noreply@z.ai >
* Polish edit text and images tool
* feat(edit-text): select source font style
* fix(edit-text): preserve detected PDF font styles
* feat(edit-text): support Japanese replacements
* fix(forms): escape non-ASCII format script strings
* Forms: unwrap_or instead of map_or with identity (clippy map_or_identity)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
---------
Co-authored-by: Brandon Thomas <echelon@gmail.com >
Co-authored-by: GLM <noreply@z.ai >
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 07:48:23 -04:00
Brandon Thomas and Claude Opus 5.5
d54f7c2fa7
Never crash: the automation (MCP/script) tools have no expect/unreachable
...
- Renderer cache: built with the entry API instead of insert-then-`expect`.
- Page-text cache: filled and read with `get`/`get_mut`.
- Schemas and form JSON: extended through `if let` instead of `as_object_mut().expect`.
- A replace-text mark of the wrong shape is an invalid-argument error.
The crate now denies the panic lints.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 13:12:20 -04:00
Brandon Thomas and Claude Opus 5.5
48f1495ac2
Tests: take split part names with Path::file_name so the test passes on Windows
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 12:48:43 -04:00
Brandon Thomas and Claude Opus 5.5
ab47bf4b9a
CI: as_chunks instead of constant-size chunks_exact (clippy 1.99 chunks_exact_to_as_chunks)
...
Stable clippy 1.99 denies chunks_exact/chunks_exact_mut with a constant
size (32 sites), which failed the test job on main and every open PR.
Behaviour unchanged; MSRV 1.90 has as_chunks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 12:48:43 -04:00
Brandon Thomas and Claude Opus 5.5
70280a44d0
M10: Export to Word (.docx), HTML and RTF (new export crate with a small zip writer): paragraphs, headings, bold/italic, images, page breaks; doc_export_office tool
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 09:40:46 -04:00
Brandon Thomas and Claude Opus 5.5
4d60af8b1e
M11: PDF/A (new preflight crate): verify PDF/A-2b/3b structural rules, Save as PDF/A (XMP identification, generated sRGB output intent, forbidden actions, annotation flags, interpolation, encryption), PDF/A dialog; pdfa_verify, pdfa_convert tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 07:19:54 -04:00
Brandon Thomas and Claude Opus 5.5
632a21bfcf
M13: Action Wizard: built-in actions (Prepare for Distribution, Optimize Scanned Documents, page numbers, confidential, sanitize), custom actions with 12 step kinds, background runs over files; action_list, action_run tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:48:19 -04:00
Brandon Thomas and Claude Opus 5.5
a4bf717c06
M12: Compare files: visual differences (pages rendered and compared region by region), shaded orange; doc_compare visual option
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:37:23 -04:00
Brandon Thomas and Claude Opus 5.5
c12b795ce5
M12: Compare files (new compare crate): word-level text differences, Compare panel with shading on the new file, report PDF, differences as comments; doc_compare, doc_compare_report, doc_compare_mark tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:31:18 -04:00
Brandon Thomas and Claude Opus 5.5
aa194686f1
M6: Prepare a form detects fields (underscore blanks, rules, boxes, check squares) and names them from their labels; form.detect, form_detect_fields
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:21:01 -04:00
Brandon Thomas and Claude Opus 5.5
620ef4fcad
M6: Field Properties ▸ Actions tab (six triggers, JavaScript/link/reset/menu/page/show-hide/submit actions); form_actions, form_set_actions tools; signing UI tests get their own temp folders
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:08:28 -04:00
Brandon Thomas and Claude Opus 5.5
6ff0bf8f64
M6: Merge data files into spreadsheet (FDF, XFDF, filled PDF forms → CSV); form_merge_data tool
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 04:52:59 -04:00
Brandon Thomas and Claude Opus 5.5
06f8d73ec7
M6: Acrobat JavaScript: sandboxed boa engine with the forms object model (printcraft-js); custom keystroke/validate/calculate/format scripts, button scripts, document JavaScripts, JavaScript console (⌘J), Preferences ▸ Enable JavaScript; js_run, js_document_scripts, js_set_document_script, form_set_script, js_enabled tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 04:41:47 -04:00
Brandon Thomas and Claude Opus 5.5
a7ffee01b5
M10: Recognize text in multiple files (ocr.recognize_batch, ocr_recognize_files): searchable copies written to a folder in the background
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:54:11 -04:00
Brandon Thomas and Claude Opus 5.5
b87cf39168
M10: Scan & OCR ▸ Recognize text: ocrs-based recognition (models fetched by cargo xtask models), invisible searchable text layer, Recognize Text dialog with background progress; ocr_recognize / ocr_status tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:47:58 -04:00
Brandon Thomas and Claude Opus 5.5
d7c22d7ef0
M7: Justify, underline, line spacing, character spacing and horizontal scale for existing paragraphs (and justify for added text); Lucide align-justify icon
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:16:03 -04:00
Brandon Thomas and Claude Opus 5.5
385313e0bf
M7: Format existing text: font family, bold/italic, size, colour and alignment for a paragraph (Format text panel live while editing; text_edit formatting arguments); centred and right-aligned paragraphs are detected
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:07:43 -04:00
Brandon Thomas and Claude Opus 5.5
c2f53d5595
M7: Edit text & images: select existing page images to move, resize, rotate, flip, replace, save or delete; page_images, image_edit, image_save tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 02:55:08 -04:00
Brandon Thomas and Claude Opus 5.5
695e460bbb
M7: Edit text works on paragraphs: detection, in-place editing with rewrap to the box, original spacing, colour and font (or Helvetica); text_paragraphs and text_edit paragraph
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 02:42:18 -04:00
Brandon Thomas and Claude Opus 5.5
fb6208b089
M7: Edit text: click a line of existing text and retype it in place, reusing its font when it can show the text, else Helvetica; text_lines / text_edit tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 02:25:06 -04:00
Brandon Thomas and Claude Opus 5.5
01d0dc67ba
M5: Fill & Sign typed signatures and initials (Type or Draw; script-font outlines drawn as filled paths); fill_sign_add signature/initials
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 09:59:28 -04:00
Brandon Thomas and Claude Opus 5.5
f58570699e
M9: Sign with macOS Keychain identities (keys stay in the Keychain): listed in Sign with a Digital ID; sign_keychain_ids, sign_document id keychain:…
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 07:55:07 -04:00
Brandon Thomas and Claude Opus 5.5
ba4a7a6d42
M11: Optimizer Clean Up removes invalid links and bookmark destinations and unreferenced named destinations
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 07:40:51 -04:00
Brandon Thomas and Claude Opus 5.5
763cd70ece
M11: PDF Optimizer ▸ Audit space usage: bytes and share of the file per kind of content; doc_audit_space
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 07:37:48 -04:00
Brandon Thomas and Claude Opus 5.5
e9322b597b
M12: Add alternate text: figures one by one with a preview, alternate text or Decorative (content becomes an artifact); accessibility_figures / accessibility_set_alt
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:36:39 -04:00
Brandon Thomas and Claude Opus 5.5
e8bc0db811
M5: Custom stamps: create from a PDF page or an image under a category and name, kept in the stamp library, placed at natural size; stamp_custom tool
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:24:28 -04:00
Brandon Thomas and Claude Opus 5.5
d5c659812c
M6: Image fields: Prepare a form ▸ Image field places an icon-only button that asks for a picture when clicked (buttonImportIcon recognised natively); form_set_image
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:16:42 -04:00
Brandon Thomas and Claude Opus 5.5
8486a35207
M4: Combine files lists the files first: reorder, remove, add more, and choose each file's pages (doc_combine pages)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:11:25 -04:00
Brandon Thomas and Claude Opus 5.5
0b628d5515
M12: Accessibility Checker: new a11y crate with Acrobat's 32 rules in 7 categories, HTML report, fixes (language, title, tab order); options dialog and results panel (Fix, Skip Rule, Explain, Check Again, Show Report); accessibility_check / _report / _fix tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:05:56 -04:00
Brandon Thomas and Claude Opus 5.5
1e69a92c41
M10: Export a PDF ▸ Export all images: JPEGs unchanged, other images as PNG with alpha; skipped images reported; doc_export_all_images
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:47:45 -04:00
Brandon Thomas and Claude Opus 5.5
f1817459f2
M10: MCP resources for open documents: information, text, page text and page images (resources/list, templates, read)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:42:21 -04:00
Brandon Thomas and Claude Opus 5.5
19b5b1d6d2
M1: List document revisions and open an earlier one (Document Properties ▸ Advanced; doc_revisions, doc_open_revision); PDF version reads 1.7, not 17
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:40:25 -04:00
Brandon Thomas and Claude Opus 5.5
c0f9c73ae9
M6: Prepare a form ▸ Preview (fill the form as a reader would; Edit fields goes back) and Field Properties ▸ Locked (annotation Locked flag; properties greyed out until unlocked, values still fillable); form_set_props takes locked
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:28:19 -04:00
Brandon Thomas and Claude Opus 5.5
968d26a41e
M5: Attach a file as a comment (push pin, paperclip, graph or tag icon in PrintCraft's own drawings; the file is embedded and listed under Attachments); comment_add type attachment
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:09:44 -04:00
Brandon Thomas and Claude Opus 5.5
bf58d1f6bf
M5: Area highlight (drag the highlighter off text) and Replace Text (strikeout plus a grouped caret holding the replacement; Highlight flyout, comment_add type replace)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:05:25 -04:00
Brandon Thomas and Claude Opus 5.5
c6d82ab62a
M4: Initial View: Document Properties ▸ Initial View (navigation panel, page layout, magnification, open-to page, window and interface options) and Advanced ▸ reading options (binding, language), honoured when a document opens; script open actions are kept; Bookmarks panel options expand all, expand top-level or collapse all; doc_initial_view tool (85 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:50:56 -04:00
Brandon Thomas and Claude Opus 5.5
05195a2af6
M7: Backgrounds and watermarks from a file: an image or a page of a PDF (imported as a form XObject that draws upright, inherited resources included), scaled relative to the page, with rotation, opacity and placement; Source ▸ File in the dialogs; doc_watermark / doc_background take file, file_page and scale
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:44:22 -04:00
Brandon Thomas and Claude Opus 5.5
d97711302c
M6: Order tabs manually: the Fields panel lists fields in tab order and, while preparing a form, moves a field earlier or later on its page (widgets reordered in /Annots, other annotations keep their places, page switches to annotation order); form_tab_order takes field + move
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:37:13 -04:00
Brandon Thomas and Claude Opus 5.5
17e3eb255d
M8: Redaction Properties: overlay text font (Helvetica, Times, Courier), size or auto-size, colour, alignment and repeat, written as /DA, /Q and /Repeat and drawn on apply; overlay fonts are added to the page only when used
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:33:01 -04:00
Brandon Thomas and Claude Opus 5.5
dfae15ec67
M6: Field Properties ▸ Options for every field type: text alignment, default value, scroll long text, rich text, password, file selection, spell check, comb of characters (with its rules); choice defaults, sort items (the list is reordered), custom text, multiple selection, commit immediately; check box / radio checked by default and radios in unison. Reset form restores defaults. form_set_props takes align, default and flags
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:28:44 -04:00
Brandon Thomas and Claude Opus 5.5
9fcece8afb
M11.1: PDF Optimizer: new optimize crate measures each image's effective resolution where pages draw it and resamples (bicubic) and recompresses (JPEG quality steps or ZIP) colour and grayscale images, soft masks with them, only when smaller; discards thumbnails, alternate images, tags and print settings; Flate for unencoded streams. Reduce File Size now downsamples like Acrobat (150 ppi above 225, JPEG medium); Optimize PDF dialog (Images, Discard Objects, Discard User Data, Clean Up) composes Remove Hidden Information; doc_optimize tool (84 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:18:47 -04:00
Brandon Thomas and Claude Opus 5.5
bb1d9a0d8a
M9.6: Use a certificate in the app: Digitally sign / Certify (draw a rectangle, or click an empty signature field) and Certify (invisible); Sign with a Digital ID, Configure New Digital ID (create a self-signed ID or use a .p12/.pfx) and Sign as dialogs with appearance preview, reason, location and certification permissions; signing saves; Signatures panel (status, details, trust, view signed version, export certificate); signature message bar; digital IDs and trusted certificates persist. Fix: locate signature placeholders by their unique ByteRange marker (full saves renumber objects)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:59:19 -04:00
Brandon Thomas and Claude Opus 5.5
64e900f270
M9.5: Signatures in the engine and for agents: every document carries its validated signature fields (revalidated on edits and against the session's trusted certificates); Session::sign/mark_signed (signing saves; history before signing is dropped); full rewrites of signed documents are refused; certificates load from PEM/DER; sign_list, sign_id_create, sign_document and sign_trust tools (83 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:50:12 -04:00
Brandon Thomas and Claude Opus 5.5
7616535dd1
M5: Polygon, Connected lines, Cloud (cloudy border appearance), Callout (leader line with arrow, /RD text box, resize re-attaches the leader) and Insert text (caret) comments: annot shapes and appearances, click-to-place-points and drag-to-callout tools in the Comment/Highlight/Draw flyouts, /IT carried to the comment list (Callout, Cloud labels), comment_add types polygon/cloud/polyline/callout/caret
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:11:52 -04:00
Brandon Thomas and Claude Opus 5.5
859f03d26e
M5: Comment polish: Mark with checkmark (hidden /StateModel /Marked reply; card toggle and menus), Locked comments (Properties ▸ Locked; refuse move/resize/restyle/delete), Copy text, Hide/Show all comments (render setting, vendored hayro patch), Summarize comments (Comments only layout, sort by page/author/date/type); comments panel "…" menu gains hide, summary, export, import; card menu anchored to its button; comment_mark/comment_lock/comments_hide/comments_summarize tools (79 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:02:14 -04:00
Brandon Thomas and Claude Opus 5.5
ed8a002465
M7: Links: Link tool (drag to create; outlines, select, double-click for Link Properties, Delete), Link Properties (visible/invisible, highlight, thickness, style, colour; go to a page or open a web page), Create links from URLs in the text, Remove all links; link_list/link_add/link_edit/link_delete/links_from_urls/links_remove tools (75 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 01:49:33 -04:00
Brandon Thomas and Claude Opus 5.5
dfc940b8f1
M4: Organize extras: split by top-level bookmarks (named after them) and by file size; Extract options (separate files, delete after extracting); Rotate Pages dialog with range, even/odd and landscape/portrait filters; Organize ▸ Select odd/even/landscape/portrait; doc_split bookmarks/max_mb, page_extract separate/delete, page_rotate subset/orientation
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 01:42:38 -04:00
Brandon Thomas and Claude Opus 5.5
f31d89bc9d
M5: Add a stamp: palette of Dynamic (By author at time, date), Sign Here and Standard Business stamps in PrintCraft's own design (ISO stamp names where defined; foreign stamps keep their artwork); click to place; comment_add type stamp
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 01:37:13 -04:00
Brandon Thomas and Claude Opus 5.5
22a8691475
M5.6/M6.7: Comment and form data exchange: new xfdf crate (L4): XFDF (ISO 19444-1) export/import of comments (replies, pop-ups, ink, quads, line ends, flags, colours) and nested field values; FDF both ways; form data as Acrobat XML, CSV and tab-delimited text. Import replaces comments with the same name and sets values through formats/validation (read-only fields take data). Import/Export commands; doc_export_data/doc_import_data tools (69 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 01:31:56 -04:00
Brandon Thomas and Claude Opus 5.5
098d9ed4e1
M7.5: Edit image for added images: rotate (the box turns around its centre), flip horizontal/vertical, crop each side (clipped), replace the picture keeping box and transforms; Edit panel tools, content_update rotate/flip/crop/image; pixel-checked rendering
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 01:18:31 -04:00