PageWright™
Version 1.0 · macOS, Windows & LinuxTurn JSON into Finished, Accessible PDF on your Server
Describe a document in one JSON file — its content, page setup, sections and styles — and PageWright™ lays it out, tags it and writes the finished PDF: paginated, accessible and archival in a single pass, from a single command line. Built on the Adobe PDF Library, for reliably correct, standards-compliant output.
PageWright does the part of document production that is genuinely hard. It measures every line, decides where the pages break, draws the charts, barcodes and form fields, and builds the structure tree that lets a screen reader read the result. Accessibility and archiving are not repairs made afterwards: the engine knows that this block is a table header and that one is decoration, so it writes the tags, the alternate text and the metadata while it composes.
It runs unattended on your own servers. Bind a data file to a template and the same document definition produces one letter or a hundred thousand; hand it a job list and it spreads the work across worker processes. The same specification always produces the same pages, so a document can be tested, compared with its last version and kept in version control beside the code that fills it. To design a document by hand instead, use PageWright Studio, the desktop designer built on the same engine.
SamplesWhat PageWright Lays Out
Arabic and Hebrew, Chinese set down the page, tables inside tables and charts with their context drawn in: every sample below is a page, or part of one, that PageWright laid out and wrote as PDF. They come from the PageWright brochure and from the engine's own sample documents. Click a sample to see it full size.











# What PageWright Does
- Lay out text, tables, images, charts, barcodes, equations and form fields from one JSON specification, checked against a published JSON Schema
- Set type the way a typesetter would: whole-paragraph line breaking, hyphenation in English, French, German and Spanish, kerning from the font itself, and widow and orphan control
- Build tables that size their own columns, repeat their header rows on every page they cross, and split a tall row inside the cell
- Draw 17 chart types as native vector art — bar, line, area, pie, scatter, treemap, Sankey, heatmap, candlestick and more — each tagged as a figure with your alternate text
- Draw more than a hundred barcode symbologies — QR Code, Data Matrix, PDF417, Aztec, EAN-13, Code 128 and more — as vectors, not images
- Create real AcroForm fields — text, checkbox, radio button, dropdown and signature — tagged so a fillable form stays accessible
- Produce long documents: sections, threaded stories, contents lists, index, glossary, bibliography, footnotes and endnotes, cross-references, and books bound from many files
- Set the world's scripts: full Unicode, right-to-left Hebrew and Arabic with shaping, Devanagari, and Chinese, Japanese and Korean — including vertical writing
- Prepare for press: CMYK and named spot colors, bleed, crop and registration marks, and mirrored margins for binding
- Encrypt with AES-256 and set per-operation permissions
# See It Work
A specification is ordinary JSON. This one is a complete document — a heading, a sentence filled in from data, and a chart that carries its own alternate text — and it asks for tagged PDF/UA-1 and archival PDF/A-2a output:
{
"title": "Quarterly Report for {{name}}",
"lang": "en-US",
"pdfua": true,
"pdfa": "2a",
"data": { "name": "Northwind Traders", "region": "Western" },
"pageSetup": { "size": "Letter", "margins": 54 },
"blocks": [
{ "type": "heading", "level": 1, "text": "Quarterly Report" },
{ "type": "paragraph", "text": "Prepared for {{name}}, {{region}} region." },
{ "type": "chart", "chartType": "bar", "legend": false,
"alt": "Revenue by quarter, in millions of dollars",
"categories": ["Q1", "Q2", "Q3", "Q4"],
"series": [ { "name": "Revenue ($M)",
"points": [[1, 4.1], [2, 4.6], [3, 5.2], [4, 5.9]] } ] }
]
}
Render it:
pagewrightapp report.json report.pdf wrote report.pdf (1 page)
Point the same file at a CSV or JSON data file and get one PDF per record, or one merged file. A CSV header row names the fields:
pagewrightapp report.json out.pdf -data customers.csv wrote out-1.pdf (1 page) wrote out-2.pdf (1 page) wrote out-3.pdf (1 page) pagewrightapp report.json all.pdf -data customers.csv -merge wrote all.pdf (3 pages, 3 records merged)
Or render a whole list of jobs in one process, spread across worker processes:
pagewrightapp -batch jobs.txt -jobs auto batch: 2 ok, 0 failed, of 2
No template language, no headless browser, nothing to compile — a command and a file your team can read.
# Born Conformant, Not Repaired Afterwards
Most tools produce a PDF and then try to fix it: a second pass guesses which rectangle was a heading, which image was decoration and what the reading order was meant to be. PageWright never has to guess. It knows the block it is placing is a level-two heading, that the chart carries the alternate text you wrote, and that the rule under the masthead is decoration — so the structure tree, the output intent and the metadata are written as the document is composed, the same on the four-hundredth revision as on the first.
- Accessibility — Tagged PDF, PDF/UA-1 and PDF/UA-2: real H1–H6 headings, tables with header scope and spans, alternate text on every figure, equations with their MathML attached, tagged form fields, and decoration marked so a screen reader skips it
- Archiving — PDF/A-2b, 2u and 2a; PDF/A-3b, 3u and 3a; PDF/A-4, 4e and 4f
- Print production — PDF/X-4, with a CMYK output intent and live transparency
- WCAG 2.1 and 2.2 — declare a level and the engine checks what a layout can decide — contrast, alternate text, heading order, language — before it draws a page
PageWright's own sample corpus is rendered and validated on every build — 232 tagged samples against PDF/UA-1, five against PDF/UA-2 and twenty-one against PDF/A — and zero failures is the gate.
# How It Runs
PageWright is a command-line application, so it fits any workflow that can start a process — a build, a web application, a scheduled job, or a pipeline alongside other Appligent server products.
- Command line — a specification in, a PDF out. Every render checks the specification against the schema and names each problem by its place in the file; add
-strictschemaand a bad specification is refused with a non-zero exit, so it fails the build instead of shipping - Data merge — bind a CSV or JSON file and write one PDF per record, or one merged file; a record that cannot bind is reported by name and does not stop the run
- Server batch — render a whole job list in one process, paying the start-up cost once, spread across as many worker processes as the machine can use
- Editions — tag content with named conditions and switch them at the command line, so one source builds the draft, the internal and the customer edition
- A published JSON Schema — your editor completes keys, and your build rejects a bad specification before it renders
- An MCP server — an AI assistant can compose a document, render it, look at the result and check it against the standards it claims, running on your machine with nothing uploaded. The standards check needs Java 8 or later, which is not included; every other tool works without it
# Supported Operating Systems
- macOS on Apple Silicon
- Microsoft Windows (64-bit)
- Linux (64-bit)
# Questions
Do I need to install Adobe Acrobat on the server?
No. You do not need to install or license Adobe Acrobat, or any separate Adobe product. PageWright is a self-contained command-line application, built on the Adobe PDF Library.
Is PageWright an HTML-to-PDF converter?
No. There is no browser underneath. PageWright is a page-layout engine: it breaks the lines, paginates and draws the graphics itself, which is why the same input always produces the same pages, and why it can write the structure an accessible PDF needs while it composes instead of guessing at it afterwards.
Is there a template language to learn?
No. A specification is ordinary JSON. Data tokens such as {{name}} sit in the same blocks the document already uses, and repeat and condition blocks handle lists and choices — so a specification that renders is a specification that binds.
Do I have to write the JSON by hand?
No. Most specifications are generated: your application writes the JSON from its own data, or binds a data file to a template. PageWright Studio designs a document visually and saves the same specification, and an AI assistant can write one through the MCP server.
How do I call it from my application?
Start it as a process from any language — Java, .NET, Python, PHP, Node.js, C++ or a shell script — and check the exit status. The specification and the data are files, so nothing has to be compiled into your application.
How fast is it?
PageWright's 281-document sample corpus — 1,219 pages — renders in under five seconds as one batch spread across worker processes. A batch pays the PDF library's start-up cost once, not once per document.
What platforms does it run on?
macOS on Apple Silicon, Windows (64-bit) and Linux (64-bit).
# Documentation
- PageWright Users Guide (111 pages) — writing documents · PDF
- PageWright Spec Reference (246 pages) — every key in the specification · PDF
- PageWright Developer Manual (28 pages) — integrating, driving and extending the engine · PDF
- PageWright Inline Runs (23 pages) — styled text inside a paragraph · PDF
- PageWright MCP Server Handbook (22 pages) — driving the engine from an AI assistant
- PageWright Design Notes (117 pages) — how each subsystem works
- PageWright Studio Users Guide (133 pages) — the desktop designer · PDF
PageWright and PageWright Studio
Two products, one engine. PageWright runs unattended on your servers; PageWright Studio is the desktop designer for building a document by hand. Both read and write the same JSON specification and render it with the same engine, so a document designed in Studio runs on the server exactly as it was designed. The table below shows what each includes.
| PageWright | PageWright Studio | |
|---|---|---|
| Lay out and write a PDF from a JSON specification | Yes | Yes |
| Tagged PDF/UA and archival PDF/A output | Yes | Yes |
| Charts, barcodes, equations and AcroForm fields | Yes | Yes |
| Bind data into a document — repeat, conditions and {{tokens}} | Yes | Yes |
| Design on the rendered page — select, drag, resize and type | No | Yes |
| Paste from Word or a web page as real blocks | No | Yes |
| 31 starter templates in 8 built-in themes | No | Yes |
| Run unattended on your servers — macOS, Windows or Linux | Yes | No |
Can't decide? The great team at Appligent is here to help! Reach Out Now
How to Buy
PageWright
PageWright runs unattended on your own servers — macOS, Windows or Linux. Contact us for more information.
How to Buy
PageWright Studio
PageWright Studio is the desktop designer for macOS and Windows 11, built on the same engine. Contact us for more information.
