VellumPdf.Signing
1.5.4
See the version list below for details.
dotnet add package VellumPdf.Signing --version 1.5.4
NuGet\Install-Package VellumPdf.Signing -Version 1.5.4
<PackageReference Include="VellumPdf.Signing" Version="1.5.4" />
<PackageVersion Include="VellumPdf.Signing" Version="1.5.4" />
<PackageReference Include="VellumPdf.Signing" />
paket add VellumPdf.Signing --version 1.5.4
#r "nuget: VellumPdf.Signing, 1.5.4"
#:package VellumPdf.Signing@1.5.4
#addin nuget:?package=VellumPdf.Signing&version=1.5.4
#tool nuget:?package=VellumPdf.Signing&version=1.5.4
VellumPdf
A modern, dependency-free PDF generation library for .NET 10, implemented clean-room from the open ISO 32000 standard.
Status: stable. The public API is locked (analyzer-enforced) and the library targets .NET 10. Core features are CI-validated — including PDF/A-2a/2b/2u and PDF/UA-1 conformance proven on every push with veraPDF.
Why VellumPdf
- Zero runtime dependencies. The core is built entirely on the .NET base
class library — no native binaries, no third-party packages. (The optional
signing package is the sole exception: it uses
System.Security.Cryptography.Pkcs.) - AOT- and trim-ready. Ships as managed DLLs; ideal for Native AOT, trimming, containers, and serverless. A Native-AOT smoke test guards this.
- Unicode-first text. Embeds and subsets TrueType and OpenType-CFF fonts,
emits composite (CID) fonts with subset tags, and writes
ToUnicodemaps so output stays searchable and copy-paste-able. - Two API tiers. A low-level canvas for precise drawing, and a high-level document/layout engine with paragraphs, headings, lists, tables, images, and automatic pagination.
- Built for the hard standards. PDF/A-2a (accessible archival) and PDF/UA-1 (universal accessibility) are implemented and CI-validated with veraPDF, alongside PDF/A-2b/2u, PAdES digital signatures, and interactive AcroForms.
- Permissive license. Apache-2.0 — free to use in proprietary products.
Packages
| Package | Status | Description |
|---|---|---|
VellumPdf.Kernel |
Stable | Object model, canvas, Standard-14 fonts, TrueType/OpenType embedding + subsetting, images (JPEG/PNG/BMP/GIF/TIFF/JBIG2/JPEG 2000), AES-256 encryption, object/cross-reference streams, AcroForm fields, tagged-PDF structure tree, PDF/A-2 metadata, and DeviceCMYK and ICC-based colour with configurable output intents. |
VellumPdf.Layout |
Stable | High-level document builder: paragraphs, headings, lists, tables, images, header/footer bands, bookmarks, and automatic pagination. |
VellumPdf.Signing |
Stable | PAdES / PKCS#7 detached digital signatures, with optional RFC-3161 signature timestamps (PAdES B-T) via a pluggable timestamp client. |
(roadmap) VellumPdf.Conformance |
Planned | In-process PDF/A and PDF/UA preflight validator. |
(roadmap) VellumPdf.Barcodes |
Planned | QR, PDF417, Code128, EAN. |
Quick start
dotnet add package VellumPdf.Layout
using VellumPdf.Document; // PdfConformance
using VellumPdf.Fonts; // Standard14
using VellumPdf.Layout; // Document
using VellumPdf.Layout.Core; // TextStyle
using VellumPdf.Layout.Elements; // Paragraph, Heading
using VellumPdf.Layout.Elements.Table; // TableElement
// Basic document — defaults to A4.
using var doc = new Document();
doc.SetDefaultFont(new TextStyle { Font = Standard14.Helvetica, FontSize = 11 });
doc.Add(new Heading("Hello, world!"));
doc.Add(new Paragraph("Generated with VellumPdf — no native dependencies."));
doc.Save("hello.pdf");
// PDF/A-2b archival document. PDF/A requires every glyph to come from an
// embedded font, so load a TrueType font and use it for all text.
using var archive = new Document { Conformance = PdfConformance.PdfA2b };
var font = archive.LoadTrueTypeFont("/path/to/DejaVuSans.ttf");
var style = new TextStyle { FontRef = font, FontSize = 12 };
archive.Add(new Paragraph("This document validates as PDF/A-2b.", style));
var table = new TableElement { DefaultCellStyle = style };
table.SetColumnWidths(200, 200);
table.AddHeaderRow().AddCell("Item").AddCell("Value");
table.AddRow().AddCell("Format").AddCell("PDF/A-2b");
archive.Add(table);
archive.Save("archive.pdf");
Low-level Kernel API
For precise canvas control, bypass the Layout engine and write directly to the PDF content stream:
using VellumPdf.Canvas; // PdfCanvas
using VellumPdf.Document; // PdfDocument, PageSize
using VellumPdf.Fonts; // Standard14
using var doc = new PdfDocument();
var page = doc.AddPage(PageSize.A4);
var font = doc.UseFont(Standard14.Helvetica);
var canvas = new PdfCanvas(page);
canvas
.BeginText()
.SetFont(font, 12)
.SetTextMatrix(1, 0, 0, 1, 72, 720)
.ShowText("Hello from the Kernel API!")
.EndText();
canvas.Finish();
using var stream = File.OpenWrite("kernel-hello.pdf");
doc.Save(stream);
For a full walkthrough of the canvas, graphics primitives, and font handling, see docs/kernel-guide.md.
Conventions
- Units. All coordinates and sizes are in PDF user-space points (1 pt = 1/72 inch).
PageSizeprovides the common ISO-A sizes plus aPageSize.Mm(width, height)helper for custom millimetre dimensions. - Synchronous I/O. Saving, signing, and the font/image loaders are synchronous by design
for 1.0 — there is no
asyncsurface. Offload toTask.Runif you need to keep a thread free.
Validation & CI
Correctness is enforced on every push by running real external validators as CI oracles — a missing tool fails the build, so the gates can never silently skip:
qpdf --check— structural integrity of every generated document type.pdftotext(poppler) — text-extraction round-trip provingToUnicodemaps.pdfsig(poppler) — signature validity for PAdES documents.- veraPDF (official
verapdf/cliDocker image) — strict PDF/A-2a/2b/2u and PDF/UA-1 conformance over embedded-font, table, image, and tagged documents. A non-compliant report fails CI with the full rule list attached.
Not yet / roadmap
| Area | Notes |
|---|---|
| In-process preflight | VellumPdf.Conformance PDF/A and PDF/UA validator package. |
| Linearization | "Fast web view" object ordering. |
| Signature LTV | Embedded OCSP/CRL revocation data and an archive timestamp (PAdES B-LT / B-LTA). |
| Barcodes | The VellumPdf.Barcodes package. |
Building
Requires the .NET 10 SDK.
dotnet build VellumPdf.slnx
dotnet test VellumPdf.slnx
The veraPDF conformance gate runs automatically in CI; to reproduce it locally,
install veraPDF (or use its Docker image) so the
verapdf CLI is on your PATH, then run the oracle tests.
License & provenance
Licensed under the Apache License 2.0. VellumPdf is an original, independent implementation written solely from open published specifications; see NOTICE and docs/architecture.md.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- System.Security.Cryptography.Pkcs (>= 9.0.5)
- VellumPdf.Kernel (>= 1.5.4)
- VellumPdf.Layout (>= 1.5.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0 | 90 | 8/17/2026 |
| 1.11.0 | 135 | 7/11/2026 |
| 1.10.0 | 650 | 7/7/2026 |
| 1.9.0 | 118 | 7/6/2026 |
| 1.8.2 | 115 | 7/5/2026 |
| 1.8.1 | 121 | 7/3/2026 |
| 1.8.0 | 109 | 7/3/2026 |
| 1.7.8 | 116 | 7/3/2026 |
| 1.7.7 | 113 | 7/2/2026 |
| 1.7.6 | 126 | 6/28/2026 |
| 1.7.5 | 128 | 6/23/2026 |
| 1.7.4 | 122 | 6/23/2026 |
| 1.7.3 | 123 | 6/22/2026 |
| 1.7.2 | 132 | 6/22/2026 |
| 1.7.1 | 131 | 6/21/2026 |
| 1.7.0 | 120 | 6/21/2026 |
| 1.6.0 | 141 | 6/17/2026 |
| 1.5.6 | 138 | 6/16/2026 |
| 1.5.5 | 143 | 6/16/2026 |
| 1.5.4 | 214 | 6/13/2026 |