Create Beautiful, Accessible PDFs in .NET

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.

πŸš€ Zero Dependencies β™Ώ PDF/UA Accessible πŸ“ ISO 32000 Compliant πŸ”· .NET 8+
Illustration showing ObviousPDF generating a colorful, accessible PDF document with code on the left and the rendered PDF on the right

⚑ Quick Start β€” Your First PDF in 4 Lines

Add a reference to ObviousPDF and start generating PDFs immediately. No configuration needed.

C# β€” Hello World
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");
Screenshot of the Hello World PDF document showing a clean white page with 'Hello, World!' text positioned at the top-left with 1-inch margins

β™Ώ Accessibility Tip

The Hello World example above is quick to get started, but production documents should always use tagged PDF for accessibility. See the Accessible Document example for the recommended pattern.

β™Ώ Accessible PDF β€” The Recommended Pattern

Every production PDF should be accessible. Here's the recommended pattern for PDF/UA compliance.

C# β€” Accessible Document (PDF/UA)
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");
Screenshot of the Accessible Document PDF showing a blue header bar, tagged heading 'Welcome to ObviousPDF', introduction paragraph, and a bulleted list of key features β€” all fully tagged for screen reader access

πŸš€ 25+ Features, Zero Dependencies

Everything you need to generate professional PDFs β€” built directly from the ISO 32000 spec.

Infographic showing ObviousPDF's feature categories: Text & Fonts, Vector Graphics, Images, Accessibility, Forms, Annotations, Security, and Archival β€” each with representative icons

πŸ“ Text & Fonts

14 standard fonts + TrueType/OpenType embedding with subsetting. Unicode, CJK, Arabic, Cyrillic, emoji support.

View example β†’

🎨 Vector Graphics

Lines, rectangles, circles, ellipses, polygons, BΓ©zier paths. Dashes, fills, strokes, transparency.

View example β†’

πŸ–ΌοΈ Images

JPEG passthrough and PNG deconstruction with row filters, alpha channels, and aspect-preserving scaling.

View example β†’

β™Ώ Accessibility (PDF/UA)

Tagged PDF, structure trees, alt text, reading order, table headers, artifacts. 43+ automated checks.

View example β†’

πŸ“Š Accessible Tables

Full table structure: THead/TBody/TFoot, header scope, ID/Headers associations, caption elements.

View example β†’

πŸ“‹ Interactive Forms

Text fields, checkboxes, dropdowns, list boxes, radio buttons, push buttons, signature fields.

View example β†’

πŸ”— Links & Bookmarks

URI hyperlinks, tagged accessible links, document outlines for sidebar navigation.

View example β†’

πŸ”’ Encryption

AES-128 and AES-256 encryption with granular permissions β€” printing, copying, modifying, annotating.

View example β†’

✍️ Digital Signatures

PKCS#7/CMS digital signatures with X.509 certificates. Reason, location, signer metadata.

View example β†’

πŸ—„οΈ PDF/A Archival

PDF/A-1b, PDF/A-2b, PDF/A-3b with OutputIntent, ICC colour profiles, and XMP metadata.

View example β†’

🌈 Gradients & Patterns

Axial and radial gradients, tiling patterns for backgrounds, borders, and decorative fills.

View example β†’

πŸ“ Optional Content Layers

Show/hide content groups for blueprints, maps, annotations. Toggle layers in any PDF viewer.

View example β†’

πŸ“Š Accessible Tables β€” Screen Reader Ready

Tables with proper header scope, ID associations, and caption elements.

C# β€” Accessible Table
// 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);
Screenshot of the Accessible Table PDF showing an Employee Directory with blue header row containing Name, Department, and Email columns, three data rows with alternating gray backgrounds, all properly tagged for assistive technology

🎨 Vector Graphics β€” Shapes, Paths & Transparency

Full vector graphics API with fills, strokes, BΓ©zier curves, and alpha blending.

C# β€” Vector Graphics
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();
Screenshot of the Vector Graphics PDF showing styled lines with dashes, filled and stroked rectangles in blue, green circles, an orange triangle polygon, a blue BΓ©zier curve shape, and three overlapping semi-transparent circles demonstrating RGB alpha blending

β™Ώ Built for Accessibility

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.

Diagram showing ObviousPDF's accessibility pipeline: Structure Tree creation, tagged content association, artifact marking, alt text, reading order, and automated PDF/UA validation β€” with checkmarks next to each step

πŸ—οΈ Structure Trees

Full ISO 32000 Β§14.7 structure tree with 40+ structure types β€” Document, Sect, P, H1–H6, Table, Figure, List, and more.

πŸ” 43+ Automated Checks

Built-in PdfAccessibilityChecker validates PDF/UA-1, PDF/UA-2, WCAG 2.2, and ISO 32000 requirements automatically.

🌐 International Support

Language tagging, pronunciation hints (/Phoneme), Ruby annotations for CJK, abbreviation expansion (/E).

πŸ“Š Table Semantics

Header scope (Row/Column/Both), ID/Headers associations, THead/TBody/TFoot, caption elements.

β™Ώ Accessibility Validation

Always validate your PDFs before shipping: var report = new PdfAccessibilityChecker().Check(doc); β€” the checker returns a detailed report with βœ… passing and ❌ failing items, plus remediation guidance.

πŸ’° Simple, Fair Licensing

Free for individuals and small teams. One flat annual fee for larger organizations.

Enterprise

$100 /year

  • Organizations with 10 or more employees
  • Full feature set β€” no limitations
  • All 25+ PDF features included
  • PDF/UA accessibility tools
  • Priority support
  • Flat fee β€” unlimited developers
βœ‰οΈ Contact for License

πŸ“‹ License Summary

Free for individual use and organizations or entities employing fewer than 10 people. For entities or organizations hiring 10 or more people, the annual license subscription is a flat $100 per year β€” regardless of how many developers use it.

Disclaimer: ObviousPDF is provided "as is" without warranty of any kind. The Licensor does not indemnify, defend, or hold harmless the Licensee against any claims. PDF documents generated by or with ObviousPDF are produced entirely at the user's own risk β€” no guarantee is made regarding legal validity, accessibility compliance, or fitness for any purpose. See the full License Agreement for complete terms.

πŸ“₯ Downloads

Get the library, documentation, and examples.

Illustration showing three download options: the ObviousPDF DLL assembly icon, a markdown document icon for the LLM Guide, and an API reference book icon β€” arranged horizontally with download arrows

πŸ“¦ ObviousPDF Assembly

The compiled ObviousPDF.dll β€” add a reference to your .NET 8+ project and start generating PDFs.

πŸ€– LLM Guide (Markdown)

Comprehensive guide for coding LLMs β€” patterns, API reference, accessibility requirements, and common pitfalls.

πŸ“– API Reference

Complete API reference covering all classes, methods, properties, and enums in ObviousPDF.