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

pdfce v0.15.0 - four things that could not be edited, and now can

Choose a tag to compare

@KenM76 KenM76 released this 29 Aug 11:01
· 256 commits to main since this release

v0.15.0: four things that could not be edited, and now can

Workspace version 0.14.0 -> 0.15.0. A minor bump: substantial new public
surface on pdfce-core (bookmark moves, expand/collapse, on-demand font
resources, annotation rotation) and new pdfce-cli subcommands.

43 Pass commits since v0.14.0.

WHAT AN OPERATOR GETS

The headline is a standing instruction closing. The operator named four things
about a PDF that pdfce could not fully edit and asked for all four. All four
now work:

ROTATION anything carrying a /Rect turns about a point you choose
(Pass 155.0), and ce dimensions turn too (Pass 159.0) --
a rotation is an isometry, so the measured value is unchanged
by construction.

ce DIMENSIONS rotate; scaling was DECLINED by name rather than half-built,
because it has no honest reading -- set_group_scale is the
operation actually wanted.

BOOKMARKS rename and delete (Pass 156.0/157.0), then REORDER and
RE-PARENT (Pass 161.0). A bookmark dragged anywhere in the
tree takes its children with it; its destination never moves.
Expand/collapse ships alongside, as a separate verb, because
whether a move should reveal a collapsed destination has two
defensible answers and both now exist.

FONTS text can be restyled to a face the document DOES NOT CONTAIN
(Pass 162.0), for the fourteen faces every PDF reader is
required to have. pdfce authors the font resource on demand,
with widths, embedding nothing. A face outside those fourteen
still refuses by name -- that needs a real font program.

ALSO IN THIS RELEASE

  • a comment can be written onto a shape that already exists (Pass 154.0),
    and markup can be authored at an opacity in one undo entry (Pass 81.1);
  • annotations can be MOVED and RESIZED, not only created and deleted
    (Pass 149.0/151.0), with a stroke-width toggle the operator ruled must
    exist;
  • OCR is an edit to the open document rather than a different file
    somewhere (Pass 135.0/135.1);
  • the objects inside a form XObject are reachable, so clicking one finds it
    (Pass 136.0/136.1/136.2/138.0);
  • a spot colour that painted NOTHING on a print-bound page now paints
    (Pass 130.3), an overprinting image respects overprint (Pass 130.2), and
    grey stops knocking spot ink out (Pass 143.0);
  • a gradient and a solid of the same ink are the same colour (Pass 137.x);
  • the CMYK default became Calibrated by operator ruling (Pass 153.0);
  • form-field properties are editable after placement, including size
    (Pass 134.0).

TWO DEFECTS FIXED THAT NOBODY REPORTED

Both were found by running the shipped binary rather than by a failing test:

  • the font work was writing a resource the file did not contain: the CLI's
    save path was one of THREE, and only two were wired. The command reported
    success and saved a file whose text named a font that was not there.
  • two refusal messages told the operator to use a verb that has never
    existed (rotate_widget, set_dimension_label), read at the exact moment
    they were blocked. Both messages now say the capability is not built yet,
    and a gate (check-cited-verbs-exist.py) makes a phantom impossible.

VERIFICATION

bash tools/run-gates.sh ............ 28 commands, all clean
python tools/check-passes-filed.py --strict-tip ... clean
python tools/check-commits-filed.py ............... clean
cargo fmt --all --check / cargo clippy -D warnings clean
cargo tree -p pdfce-core / -p pdfce-render ........ no GUI, no network deps
portable package built and smoke-tested from a fresh folder

No dependency changes since v0.14.0, so THIRD_PARTY_LICENSES.md is unchanged
and was not regenerated.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01AcgfF2qoRL3i9NtC9JXRit