← All projects

pdfcer-gui

Desktop PDF editor built for CAD drawings. Read, review, measure, edit.

Rust MIT
Commits
760
Stars
2
Created
September 3, 2026
View repo

The desktop editor for the pdfcer engine. A window on a PDF, aimed squarely at engineering drawings: read them, mark them up, measure them, change them.

It is built on egui-shell, a separate crate that knows nothing about PDF and is meant to be lifted into other projects. The shell handles panels, ribbons, modes and docking. The document work is the engine’s.

Split out of the earlier pdfce repository on 2026-09-03, carrying its history. The engine and the command line went to pdfcer; the shell came here.

The thing worth reading first

FEATURES.md in this repository distinguishes three states, not two: a feature is shipped and driven in a running window, or it is built and undriven, or it is absent.

That distinction is the project’s founding rule, and it exists because the project has shipped features whose unit tests all passed and which did not work. A green suite is evidence about the code. It is not evidence about the program.

The README also keeps two retractions rather than editing them out. One withdraws a claim about the zoom limit that was published on 2026-08-22 and stated as a property of the design — it was a property of that revision, and the engine removed the limit the next day. The other withdraws front-page text that said the shell “measures nothing yet” and that text editing “has not been started,” both of which were true when written and were still on the front page weeks after they stopped being true.

A measured limit is a fact about a revision, not about a design. The page says so, on itself, in public.

What it does

Read. Open, navigate, zoom, search. Thumbnails, bookmarks, layers, attachments, page display modes, rulers, grid and guides. Encrypted documents open with a password. Comments are readable here — click a sticky note on the page and it opens with its author, its date and its words.

Review. Sticky notes, text boxes, shapes, arrows, clouds, freehand, highlight, underline, strike, stamps. A comment list that filters by author, by type, and by whether the comment actually carries any words, sorts, and jumps to the comment on the page. Copy and paste any annotation with its appearance intact.

Measure. Dimensions on a scaled drawing, with the scale read from the document where the document states one.

Edit. Text editing and reflow. Vector node editing. Object selection with properties. Colour on text and on paths, including a real indeterminate state when a selection disagrees with itself, and a refusal by name over a spot ink. Form field authoring and filling. Page insert, extract, rotate, delete. Redaction. Digital signature reading with trust evaluation. Passwords and permissions.

Out. Print, with a live preview that can pop into its own window. Export to PDF, DXF, PNG, JPEG, SVG, EMF, plain text and form data. Copy page content to the clipboard as editable vector, for Word, Inkscape and LibreOffice.

A trillion percent, and what that costs

The viewer magnifies to 1,000,000,000,000%. Getting the number is the easy half. Three things make it a setting somebody can actually spend:

Past the point where a whole-page raster would blow the graphics backend’s texture limit, only the visible region is rasterized. A viewport is a fixed number of pixels no matter what the page behind it is doing, so render time does not grow with zoom.

The last good picture is kept and drawn where it belongs while the next one renders, so detail never has to be waited for after moving. The region is quantised to a half-viewport grid, so a small pan re-uses the raster it already has.

A scroll offset held in f32 runs out of precision around 2²⁴ content points — measured, at a trillion percent the view moved in 2,048-pixel jumps. Above that threshold the position becomes an f64 anchor: a page point, and the screen pixel it sits under. That does not decay with magnification.

All of it measured by driving the release binary, not by testing the arithmetic. The cursor point holds to within half a per-notch tolerance across a 128-notch climb from page-fit to the ceiling, crossing both internal tier hand-overs. A 960-pixel pan at 999,999,995,904% moves 960 pixels and stays there.

The maximum is an operator setting, reachable from the percentage in the status bar, because how much performance to spend on magnification is not a decision a program should be making for you.

The boundary, since a claim like this needs one. At maximum zoom, one screen point spans 35 femtometres. A benzene molecule drawn at true scale is legible on screen well below the ceiling. Anything inside an atom is out of reach — a carbon nucleus 200 pixels across would need about 700 times the maximum, and a proton considerably more.

Numbers, and where each one comes from

488 test files and 3,666 test functions, measured against the tracked source on 2026-09-06 by the same method used for every other project on this site.

Separately, and by its own count rather than ours: the repository reports 29 of 29 CI gates passing, 175 driven checks in tools/ui-verify, 138 registered commands across seven ribbon tabs plus a contextual Format tab, and 12 dockable panels across three modes.

Those are two different measurements of two different things. They are not added together here, and the README says out loud that any status number it prints has a shelf life. FEATURES.md is the authoritative list.

760 commits. Pre-1.0.

Where this stands

Better at

  • Its README keeps a retraction of a claim it got wrong on 2026-08-22 instead of deleting the paragraph, and a second retraction of front-page text that stayed true-sounding for weeks after it stopped being true. That is the behaviour, not the marketing.
  • FEATURES.md distinguishes three states rather than two: shipped and driven in a running window, built but undriven, and absent. The project's founding rule, made visible, because it has shipped features whose unit tests all passed and which did not work.
  • Deep zoom to 1,000,000,000,000%, verified by driving the release binary rather than by testing the arithmetic — the point under the cursor holds across a 128-notch climb from page-fit to the ceiling, and a 960-pixel pan at the top of the range moves 960 pixels and stays there.
  • Built for CAD drawings specifically: dimensions on a scaled drawing, with the scale read from the document where the document states one.
  • Comments are readable rather than merely present — click a sticky note and it opens with its author, its date and its words; the comment list filters by author, by type, and by whether the comment actually carries any words.
  • 488 test files and 3,666 test functions. Its README additionally reports 29 of 29 CI gates and 175 driven checks in tools/ui-verify, which are a different measurement and are not folded into that figure.
  • Built on a reusable egui-shell crate that knows nothing about PDF, so the shell is not welded to the document format it happens to be showing.

Worse at

  • It inherits the engine's boundaries, which are real ones: no JavaScript, no XFA, no signature timestamps or long-term validation, and no revocation checking, because the engine has no network.
  • Pre-1.0, and it says so about itself in an unusually specific way — its README states that every status number the project has written down has been overtaken within a day or two, and directs readers to FEATURES.md as the authoritative list.
  • It ships its own releases, separate from the engine's. Folding the two into a single package is a later step, gated on FEATURES.md showing nothing regresses.
  • A build writes a new folder every time and never overwrites the last one, because on Windows a running executable cannot be replaced and a half-updated folder is worse than either version. That is deliberate, and it does mean builds accumulate.
  • The zoom ceiling has a floor under it: at maximum magnification one screen point spans 35 femtometres. A benzene molecule at true scale is legible. Anything inside an atom is not — a carbon nucleus drawn 200 pixels across would need roughly 700 times more.

Pick something else when…

  • pdfcer, the command lineThe job is batch or scripted and nothing needs to be looked at. The engine is the same; the window is the part you are not using.
  • Adobe Acrobat ProYou need JavaScript, XFA forms, timestamped signatures, or cloud collaboration and e-signature workflows.
  • SumatraPDF, or any lightweight viewerYou only need to open a file and read it. This is an editor, and the startup cost of an editor buys you nothing for that.