Skip to content
This repository was archived by the owner on Sep 3, 2026. It is now read-only.

pdfce v0.17.0 - copy and paste almost anything, and a bug that could silently erase every dimension in a drawing

Choose a tag to compare

@KenM76 KenM76 released this 30 Aug 14:00
· 187 commits to main since this release

Workspace version 0.16.0 -> 0.17.0. A minor bump: substantial new public
API across the clipboard, ce dimensions and form widgets, plus one new
persisted setting and four new EditError variants. 59 commits, 27
Passes (166.0 through 179.2), 92 files, +31,271/-793.

WHAT AN OPERATOR GETS

COPY AND PASTE NOW COVERS ALMOST EVERYTHING. Before this release the
clipboard carried page content and little else. It now carries form
fields, sticky notes, stamps, text boxes, links, file attachments and
nearly every other annotation type, whole pages, and whole bookmark
subtrees -- within one document or between two. Cut exists alongside
copy for annotations, mixed selections and form fields, and refuses
before deleting anything the clipboard could not carry back.

Pasting bookmarks BETWEEN two documents is something Acrobat cannot do at
all.

DIMENSION TEXT YOU CAN OVERRIDE AND TAKE BACK. A ce dimension can print
whatever you type instead of its measurement -- and the measurement stays
underneath. Clearing the override restores the real value exactly, with
no re-measurement, even after saving and reopening days later. Put
<DIM> in the text and it is replaced by the live measurement, so
2X <DIM> TYP keeps tracking the geometry when the drawing is rescaled.

FORM FIELDS CAN BE ROTATED. /MK /R plus a redrawn appearance --
counterclockwise, quarter turns, and the box stays where you put it while
the content turns inside it. Writing the rotation flag alone would have
been a no-op in any modern PDF reader, so pdfce redraws the appearance
for the field types it authored and says plainly when it cannot.

BOLD FALLBACK IS NOW YOUR CHOICE, AND THE DEFAULT ASKS NOTHING.
style_policy = auto | warn | refuse. auto decides and tells you
afterwards; warn says so loudly when a weight was faked; refuse is
what pdfce always did -- stop and name the real face. Naming a font
yourself, or forcing the fake one, is unaffected.

THREE DIMENSION-GROUP COMMANDS BECAME SCRIPTABLE. Rename, delete (with an
explicit policy for the members) and move-between-groups had working
engine code that no command line could reach.

FIXES THAT CHANGE WHAT A FILE SAYS

★ DELETING THE DEFAULT DIMENSION GROUP COULD SILENTLY ERASE EVERY
DIMENSION IN A DRAWING. The saved file looked perfect and the dimensions
still drew on screen; the next open showed none, and the next save made
it permanent. Refused by name now, before anything is written.

★ CALIBRATING WITH 55 5/8" PRODUCED DIMENSIONS LABELLED 55.62 mm --
the inch magnitude wearing a millimetre label, 25.4x out, on a drawing.
All five accepted notations were affected. The command's own help text
had promised the opposite behaviour in writing.

★ THREE MORE COMMANDS REPORTED SUCCESS AND DID NOTHING -- or worse,
authored a dimension into a group nobody chose, at a scale nobody chose.
Found by driving every identifier-taking verb against the shipped binary
rather than reading the code; everything outside the ce-dimension group
family was already correct.

A PASTED ce DIMENSION SHOWED A DIFFERENT NUMBER from the one it was
copied from, because the group's scale did not travel with it.

A DOTTED FIELD NAME SILENTLY DESTROYED the terminal field it nested
under, value and all.

pdfce WAS TELLING YOU IT COULD NOT DO SOMETHING IT CAN. The message shown
when it faked a bold weight asserted that no real bold face existed and
that pdfce "cannot make this change with a genuine typeface" -- while the
same report named the real face it had just skipped. That class of error
is the rarer one: it UNDERSTATES the software, and sends an operator to a
harder remedy for no reason.

COLOUR

The subtractive compositing work continued: an ink probe that reports
what is in the colorant buffer at the moment it stops existing, a census
of which DeviceCMYK operands real files actually paint, and a measured
correction to a shipped default's justification -- it had claimed
agreement with a reference engine on grey neutrality that measurement
does not support. The conversion itself is unchanged and remains the
sibling iccce project's domain.

COMPATIBILITY

  • style_policy defaults to auto, so --bold-synthetic on a page that
    has a real bold face now SUCCEEDS where it previously refused. Set
    style_policy = refuse to keep the old behaviour.
  • Four ce-dimension verbs now refuse an unknown group id where they
    previously returned success. A cached group id will produce an error
    that did not exist before; that error is correct and the previous
    silence was not.
  • A document carrying a ce-dimension text override is written at sidecar
    schema version 4 and an older pdfce will refuse to edit its dimensions.
    A document without one is still written at version 3 and is unaffected.

VERIFIED

cargo test --workspace --all-features green; cargo fmt --check and
cargo clippy --workspace --all-targets --all-features -D warnings
clean; cargo check for wasm32-unknown-unknown; cd fuzz && cargo check --bins; cargo tree -p pdfce-core -p pdfce-render free of any
GUI or network dependency; the full 29-command gate sweep via
tools/run-gates.sh, including both filing gates.