Skip to content

pdfcer 0.44.0

Choose a tag to compare

@KenM76 KenM76 released this 07 Sep 01:11
· 146 commits to main since this release

Single-folder portable Windows x64 build. Unzip and run pdfcer.exe — no installer, no registry writes, no network access required.

This release clears every open request from the pdfcer-gui project.

Comment review, end to end

  • Replies. A comment thread could be read and never added to. add-reply writes /IRT + /RT /R, on the parent's page, in the parent's colour so a thread reads as one conversation.
  • Review status — Accepted / Rejected / Cancelled / Completed / None, and the Marked model. Three things here came from reading ISO 32000 §12.5.6.3 rather than assuming, and each changed the design: /State and /StateModel are text strings, not names; /StateModel is derived from the state so the one non-conforming pairing cannot be expressed; and a second status by the same author must reply to that author's previous status, not to the annotation. That last is a shall, and getting it wrong is invisible — a star of status annotations renders identically to a correct chain in every viewer. attached_to and chain_depth are reported so it is checkable.
  • No resolver for which status is "current", deliberately: the standard says nothing about ordering, and /M is optional and empirically ties. Shipping none is spec-correct.
  • Sticky note icon and colour are editable in place (set-text-annot-style), keeping the note's object identity — delete-and-replace was the only route before, which lost /M, the object id and any reply.
  • /C and /Name are readable on every annotation (list-annotations prints color= and icon=). A colour swatch or a sort-by-colour was impossible purely because nothing could read the current value.
  • Pop-up open/closed state (set-annotation-open) — pdfcer had written /Open since Pass 6.2 and could read back neither copy.

A text file becomes a PDF

place-text paginates a .txt into as many pages as it needs — the missing other half of text export. This required a page-creation primitive the crate never had; everything before could only copy an existing page.

Unmappable characters refuse the import and name every one rather than dropping them silently (--drop-unmappable is an explicit opt-in that reports each lost code point). U+000C is a hard page break, matching extract-text's own separator, so text out and back in keeps its pagination.

CAD drawings

The hairline / "line weights off" display mode now reports how many strokes it actually thinned, so "no visible change" is distinguishable from "the setting isn't working". A page whose strokes are already sub-pixel renders byte-identically with the mode on or off and reports zero — the mode is a ceiling, not a set.

Also

Annotation gains open, color, icon, state and state_model. StickyIcon gains from_name and a public name.

Full detail in docs/ROADMAP.md (Passes 252.0, 253.0–253.3, 254.1).