Built from spec
Implemented directly against ISO 32000-2:2020 — COS objects, xref streams, content-stream operators, the lot. No third-party PDF engine sits in between you and the bytes.
JetsonPDF reads and writes PDF 2.0 documents from the spec up — no wrappers, no native bindings. AES-256 encryption, PKCS#7 signatures, PDF/A and PDF/UA conformance, plus a WPF adapter that round-trips between PDF and XAML.
Install the package, draw on a page, save the bytes.
dotnet add package JetsonPDF.Writer
using JetsonPDF;
var doc = new PdfDocument { Title = "Hello" };
var page = doc.AddPage(PageSize.Letter);
page.DrawText("Hello, PDF!",
new PdfFont(FontFamily.Helvetica, 24),
x: 72, y: 700);
doc.Save("hello.pdf");
That's a complete, valid PDF 2.0 file — no native dependencies, no layout engine to wire up, just C# you can drop into any .NET 8 project.
Implemented directly against ISO 32000-2:2020 — COS objects, xref streams, content-stream operators, the lot. No third-party PDF engine sits in between you and the bytes.
Targets .NET 8. Two NuGet dependencies total: code-pages
(WinAnsi) and the BCL's PKCS#7 stack. Everything else —
fonts, filters, images, encryption — is in-tree.
Read any PDF into a typed object model, write a fresh one from your
own model, or round-trip through XAML using the
JetsonPDF.Wpf adapter. Symmetric APIs, shared types.
Declare PDF/A-1b, 2, 3 or PDF/UA-1, 2 and have the validator check it. Add invisible PKCS#7 signatures, DocTimeStamps, and a DSS/VRI catalog for PAdES B-LTA.
/AA field actions and /CO calculation orderPdfReader.Load → full ReadPdfDocument tree/Lang, /Alt, /ActualTextPdfToXamlConverter — render any PDF as a XAML treeXamlToPdfConverter — live WPF layout, then emit PDF<jetsonpdf:Document> + multi-page authoring with {jetsonpdf:PageNumber}jetsonpdf:Form.* attached props for AcroForm widgetsdoc.Validate() returns a list of
PdfConformanceIssue entries; flip ThrowOnConformanceError
to fail your build pipeline before a non-conformant file ever ships.
Grid, StackPanel,
DockPanel, Border, data-bound TextBlocks and
a PaginatedTable that overflows across pages all "just work."