Rivoli PDF / Deterministic PDF generation

Deterministic PDF generation: same input, same bytes

Most PDF libraries salt output with timestamps and random IDs, so identical documents hash differently and snapshot tests are impossible. Rivoli PDF is deterministic by design: the same document tree produces the same bytes, every run, on every platform.

Install and generate

No system libraries, no headless browser, no per-platform setup. Rivoli.Pdf 0.1.0 targets .NET 8 and .NET 10.

Terminal
dotnet add package Rivoli.Pdf
DeterminismTest.cs
using Rivoli.Pdf;
using Rivoli.Pdf.Builders;

var doc = Document.Create("Statement", "Acme Corp");
doc.AddSection().AddParagraph("Same input, same bytes.");

doc.SavePdf("run1.pdf");
doc.SavePdf("run2.pdf");
// SHA-256(run1.pdf) == SHA-256(run2.pdf): diffable, cacheable, testable

Documents carry their creation timestamp as data, so re-rendering does not change bytes. The one designed exception is encryption, which uses fresh randomness by nature.

The output

Real output from the runnable samples in the Rivoli PDF repository.

Multi-page sales ledger PDF generated by Rivoli PDF with merged category cells and repeating headers
The enterprise table sample: merged cells, repeating headers, and computed totals across pages, all from the managed layout engine.

How we compare

Determinism is our loneliest row: nobody else claims it.

Capability Rivoli PDF IronPDF Aspose.PDF QuestPDF
Free for small companies
Entry price (per developer) $299 $999 ~$1,679 ~$999/yr
Royalty-free redistribution included Add-on Add-on
Fully managed (no native deps)
Deterministic output
PDF/A-first
JSON document model + change tracking
Round-trip fidelity harness
Cross-language roadmap 5 planned Multi Multi

Competitor prices are researched approximations (June 2026); several vendors are now quote-gated, so some figures are historical or third-party. Rivoli PDF is pre-1.0: document creation is feature-complete, while full parsing of arbitrary PDFs and rasterized rendering are partial and on the near-term roadmap.

Pricing

Free for individuals and for organisations under US$1M in annual gross revenue. One perpetual per-developer license for everyone else.

Free
$0 forever

Full library, no watermark, no page limits. For individuals and organisations under US$1M in annual gross revenue.

Founder license
$299 per developer · perpetual

Buy once, use forever. Royalty-free redistribution included, and the early-access rate locks in for life.

Full details on the product page and in the license terms.

Making your PDF pipeline deterministic

Determinism is a property you inherit by switching engines, then lock in with tests.

  1. 01 Port templates to the document model; the tree is plain data with the timestamp carried explicitly.
  2. 02 Add a golden-file test: render the reference document, compare SHA-256 against the checked-in hash.
  3. 03 Cache rendered PDFs by input hash; identical requests become cache hits instead of re-renders.
  4. 04 Diff document JSON in code review when templates change, instead of eyeballing rendered output.
  5. 05 Before migrating reading-heavy workflows (filling existing forms, rendering pages to images), check current support in the docs gallery: Rivoli PDF is pre-1.0 and strongest at authoring.

The full migration guide, with concept mappings and before/after code, lives in the documentation.

Start free. Pay only when you're big.

Install the package today. When your company crosses the US$1M line, the Founder rate locks in for life.