Skip to content

Designer app

The designer app is a standalone desktop application (Windows, macOS, Linux - built with Avalonia, same toolkit as the companion app) for composing a document visually and getting back the exact C# fluent-builder code that reproduces it. It is a development tool: it never ships with your application, and nothing it produces is required at runtime - the generated code is plain Papyra, indistinguishable from what you’d write by hand.

Platform Download
Windows x64 papyra-designer.exe
Windows ARM64 papyra-designer.exe
macOS Apple Silicon Papyra Designer.app
macOS Intel Papyra Designer.app
Linux x64 papyra-designer
Linux ARM64 papyra-designer

These are self-contained, single-file builds of the latest main - no .NET runtime required. They’re unsigned: macOS Gatekeeper will refuse a plain double-click, so right-click the .app and choose Open the first time (or xattr -d com.apple.quarantine "Papyra Designer.app"); on Linux, chmod +x papyra-designer after downloading.

Terminal window
dotnet run --project Papyra.Designer # or start the installed app

It opens with an empty document - there’s nothing to push from your code first, unlike the companion app.

The designer is a three-pane editor:

  • Document outline - a tree of the document’s elements. Toolbar buttons add paragraphs, tables, lists, rows, images, lines, page breaks, and a page header/footer; right-click (or the toolbar) adds the right child for whatever’s selected - a column or row inside a table, a run inside a paragraph, an item inside a list, a sub-list inside a list item, a nested table inside a cell. Drag and drop reorders siblings anywhere in the tree, including rows within a table (nested sub-lists and nested tables are singular children - deletable, not reorderable).
  • Preview - a live render of the document, produced by the same layout engine and PDF renderer every other Papyra output goes through - not a separate mock-up renderer. Click an element on the page to select its node in the outline, and vice versa.
  • Properties - the selected element’s fields: text content, TextStyle/CellStyle (font, weight, color, alignment, borders including their solid/dashed/dotted style, background), table columns and spans, list kind, image fit, plus document-level watermark (text or image) and page background (solid color, two-stop gradient, or image) categories on the Document node - watermark/background images are picked via right-click on the Document node. Edits re-render the preview and update the generated code, debounced so typing doesn’t stutter.

A Generated code panel shows the equivalent Document.Create(doc => doc. ...) C# for the current document, live. Copy it to the clipboard or save it straight to a .cs file.

Composing a report visually is faster than writing builder calls for a first draft, especially for someone new to Papyra’s API or exploring a layout idea before committing to it in code. The generated code is meant to be a starting point you paste into your project and keep editing by hand from there - the designer has no concept of a live link back to your source, and re-running it doesn’t update code you’ve already written. For an existing document you’re actively developing, use the companion app instead: it previews what your code renders, live, as you edit that code.

The designer covers the fluent API’s core element set: paragraphs with mixed text/link runs, tables (columns, header/body/footer rows, cell spans, nested tables), lists (including nested sub-lists), rows, images, lines, and page breaks, plus document metadata, page size/margins, a default text style, a document-level watermark, and a document-level page background.

What it deliberately does not edit - build these through the fluent API:

  • Sections - per-section page setup and bands are code-only; the preview renders them fine, the designer just doesn’t compose them.
  • PDF render options, including encryption - the designer generates composition code (Document.Create(...)), not render-pipeline configuration; pass PdfRenderOptions to Render(...) in your own code. The preview always renders unencrypted.
  • Multi-stop gradients and per-section page backgrounds - the background editor covers the two-stop LinearGradient(angle, from, to) form.
  • Custom font registration (RegisterFont) - add it to the generated code by hand.