π Text & Fonts
14 standard fonts + TrueType/OpenType embedding with subsetting. Unicode, CJK, Arabic, Cyrillic, emoji support.
View example βStop spending tens of thousands a year on PDF libraries. ObviousPDF provides .NET developers a way to create accessible, PDF/UA-compliant documents β free for small teams, $100/yr for everyone else.
A zero-dependency .NET 8 library built directly from the ISO 32000 specification. Built-in PDF/UA accessibility, fluent API, and 25+ features β all in a single assembly.
Add a reference to ObviousPDF and start generating PDFs immediately. No configuration needed.
using ObviousPDF;
// Create a new PDF document
var doc = new PdfDocument();
// Add a US Letter page (612Γ792 points)
var page = doc.AddPage();
// Add text at 1 inch from left, 10 inches from bottom
page.AddText("Hello, World!", 72, 720);
// Save to disk
doc.Save("hello.pdf");
Every production PDF should be accessible. Here's the recommended pattern for PDF/UA compliance.
using ObviousPDF;
using ObviousPDF.Accessibility;
var doc = new PdfDocument();
doc.Info.Title = "Accessible Document";
doc.Language = "en-US";
doc.DisplayDocTitle = true;
doc.PdfUaConformance = PdfUaConformanceLevel.PdfUA1;
var root = doc.EnableTaggedPdf();
// Build structure tree
var sect = root.AddChild(StructureType.Sect);
var h1 = sect.AddChild(StructureType.H1);
var pIntro = sect.AddChild(StructureType.P);
var list = sect.AddChild(StructureType.L);
var li1 = list.AddChild(StructureType.LI);
var li1Lbl = li1.AddChild(StructureType.Lbl);
var li1Body = li1.AddChild(StructureType.LBody);
var page = doc.AddPage();
// Decorative header β ARTIFACT (not structural)
page.BeginArtifact(PdfArtifactType.Layout);
page.FillRectangle(0, 760, 612, 32,
new PdfDrawOptions { FillColor = PdfColor.FromRgb(0.15, 0.3, 0.6) });
page.EndArtifact();
page.AddTaggedText(h1, "Welcome to ObviousPDF", 72, 720,
new PdfTextOptions { Font = StandardFont.HelveticaBold, FontSize = 22 });
page.AddTaggedText(pIntro,
"This document is fully accessible.", 72, 690);
page.AddTaggedText(li1Lbl, "β’", 82, 660);
page.AddTaggedText(li1Body,
"Tagged PDF for screen readers", 95, 660);
// Page number β ARTIFACT
page.AddArtifactText("Page 1", 285, 30,
PdfArtifactType.Pagination);
doc.Save("accessible.pdf");
Everything you need to generate professional PDFs β built directly from the ISO 32000 spec.
14 standard fonts + TrueType/OpenType embedding with subsetting. Unicode, CJK, Arabic, Cyrillic, emoji support.
View example βLines, rectangles, circles, ellipses, polygons, BΓ©zier paths. Dashes, fills, strokes, transparency.
View example βJPEG passthrough and PNG deconstruction with row filters, alpha channels, and aspect-preserving scaling.
View example βTagged PDF, structure trees, alt text, reading order, table headers, artifacts. 43+ automated checks.
View example βFull table structure: THead/TBody/TFoot, header scope, ID/Headers associations, caption elements.
View example βText fields, checkboxes, dropdowns, list boxes, radio buttons, push buttons, signature fields.
View example βURI hyperlinks, tagged accessible links, document outlines for sidebar navigation.
View example βAES-128 and AES-256 encryption with granular permissions β printing, copying, modifying, annotating.
View example βPKCS#7/CMS digital signatures with X.509 certificates. Reason, location, signer metadata.
View example βPDF/A-1b, PDF/A-2b, PDF/A-3b with OutputIntent, ICC colour profiles, and XMP metadata.
View example βAxial and radial gradients, tiling patterns for backgrounds, borders, and decorative fills.
View example βShow/hide content groups for blueprints, maps, annotations. Toggle layers in any PDF viewer.
View example βTables with proper header scope, ID associations, and caption elements.
// Build accessible table structure
var table = root.AddChild(StructureType.Table);
var caption = table.AddCaption();
// Header row with column scope
var thead = table.AddTableHead();
var hrow = thead.AddTableRow();
var thName = hrow.AddHeaderCell(
PdfTableScope.Column, id: "name");
var thAge = hrow.AddHeaderCell(
PdfTableScope.Column, id: "age");
// Data rows reference header IDs
var tbody = table.AddTableBody();
var row = tbody.AddTableRow();
var tdName = row.AddDataCell("name");
var tdAge = row.AddDataCell("age");
// Render tagged content
page.AddTaggedText(thName, "Name", 72, 700);
page.AddTaggedText(thAge, "Age", 200, 700);
page.AddTaggedText(tdName, "Alice", 72, 680);
page.AddTaggedText(tdAge, "30", 200, 680);
Full vector graphics API with fills, strokes, BΓ©zier curves, and alpha blending.
var page = doc.AddPage();
// Filled rectangle with styled border
page.DrawAndFillRectangle(100, 600, 200, 100,
new PdfDrawOptions {
FillColor = new PdfColor(0.9, 0.9, 1),
StrokeColor = new PdfColor(0, 0, 0.5),
LineWidth = 1.5
});
// BΓ©zier curve path
page.BeginPath(new PdfDrawOptions {
FillColor = new PdfColor(0.3, 0.3, 0.8)
})
.MoveTo(300, 440)
.CurveTo(350, 520, 440, 480, 420, 440)
.ClosePath()
.FillAndStroke();
// Transparent overlapping circles
page.SaveGraphicsState();
page.SetAlpha(fillAlpha: 0.5);
page.FillCircle(140, 350, 40,
new PdfDrawOptions {
FillColor = new PdfColor(1, 0, 0) });
page.FillCircle(170, 350, 40,
new PdfDrawOptions {
FillColor = new PdfColor(0, 0, 1) });
page.RestoreGraphicsState();
ObviousPDF includes 43+ automated accessibility checks and makes it easy to create PDF/UA compliant documents that work with screen readers, magnifiers, and assistive technology.
Full ISO 32000 Β§14.7 structure tree with 40+ structure types β Document, Sect, P, H1βH6, Table, Figure, List, and more.
Built-in PdfAccessibilityChecker validates PDF/UA-1, PDF/UA-2, WCAG 2.2, and ISO 32000 requirements automatically.
Language tagging, pronunciation hints (/Phoneme), Ruby annotations for CJK, abbreviation expansion (/E).
Header scope (Row/Column/Both), ID/Headers associations, THead/TBody/TFoot, caption elements.
Free for individuals and small teams. One flat annual fee for larger organizations.
Free forever
$100 /year
Get the library, documentation, and examples.
The compiled ObviousPDF.dll β add a reference to your .NET 8+ project and start generating PDFs.
Comprehensive guide for coding LLMs β patterns, API reference, accessibility requirements, and common pitfalls.
Complete API reference covering all classes, methods, properties, and enums in ObviousPDF.