Helping you create standards-compliant, more accessible PDFs in .NET

Stop spending tens of thousands a year on PDF libraries. ObviousPDF enables .NET developers to produce standards-compliant, more accessible PDF 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, a fluent API, and 25+ features β€” all in a single assembly.

πŸš€ Zero Dependencies β™Ώ PDF/UA Accessible πŸ“ ISO 32000 Compliant πŸ”· .NET 8+

⚑ 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.

⚑ Easy Accessibility β€” The Recommended Pattern

One method call makes your entire document PDF/UA compliant. EnableAccessibility() auto-tags all text, images, and form fields β€” no structure tree required.

C# β€” Accessible Document (Easy Accessibility)
using ObviousPDF;
using ObviousPDF.Fonts;

var doc = new PdfDocument();

// One call β€” sets language, title, PDF/UA-1, auto-tagging
doc.EnableAccessibility("en-US", "Accessible Document");

var page = doc.AddPage();

// Decorative header β€” automatically treated as artifact
page.FillRectangle(0, 760, 612, 32,
    new PdfDrawOptions { FillColor = PdfColor.FromRgb(0.15, 0.3, 0.6) });

// All AddText / AddTextBlock / AddImage calls are auto-tagged
page.AddText("Welcome to ObviousPDF", 72, 720,
    new PdfTextOptions { EmbeddedFont = BundledFonts.SansBold, FontSize = 22 });
page.AddText("This document is fully accessible.", 72, 690,
    new PdfTextOptions { FontSize = 14 });
page.AddText("β€’  Tagged PDF for screen readers", 82, 660,
    new PdfTextOptions { FontSize = 12 });

// Page number β€” automatically treated as artifact
page.AddText("Page 1", 285, 30,
    new PdfTextOptions { FontSize = 10 });

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

β™Ώ Same Output, Zero Boilerplate

EnableAccessibility() produces an identical tagged PDF to the manual EnableTaggedPdf() + structure-tree approach β€” with none of the boilerplate. Every AddText call becomes a tagged P element; every AddImage becomes a tagged Figure. Rectangles and other graphics are automatically marked as layout artifacts. Need fine-grained control? See the full Accessible Document example.

πŸš€ 25+ Features, Zero Dependencies

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

πŸ“ 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.

πŸ—οΈ 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.

πŸ“₯ Three Input Formats β€” One Accessible PDF

Define your document in JSON, XML, or CSV β€” ObviousPDF renders all three to the same tagged, accessible PDF. Set accessible = true and every element is automatically tagged for screen readers, with zero manual structure tree management.

πŸ“‹ JSON Pipeline

Ideal for web APIs, JavaScript tooling, and LLM/AI-generated documents. "accessible": true enables full PDF/UA-1 compliance.

View JSON example β†’

πŸ“„ XML Pipeline

Perfect for enterprise workflows, XSLT transforms, and schema validation. accessible="true" on the root element does the same.

View XML example β†’

πŸ“Š CSV Pipeline

Author PDFs in Excel or Google Sheets. The section-based format with accessible,true makes accessible PDFs from spreadsheets.

View CSV example β†’

⚑ Easy Accessibility Across All Pipelines

Whether you choose JSON, XML, or CSV β€” a single flag (accessible = true) enables: tagged PDF, PDF/UA-1 conformance, auto-tagging for text/images/form fields, standard font auto-upgrade to embedded fonts, display document title, and correct tab order. No manual structure tree required. See the Easy Accessibility example for the C# API equivalent.

πŸ’° 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
πŸ”— Get Enterprise 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.

πŸ“¦ 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.