Release Notes
Version history, new features, and breaking changes for FolioPDF.
Version 2026.4.0 — April 2026
Initial release. FolioPDF is a unified PDF generation and manipulation library for .NET. It combines a Skia-powered fluent layout engine with a full PDF toolkit — no separate packages, no browser engine, zero managed runtime dependencies.
Layout Engine
| Feature | Description |
|---|---|
| Fluent layout API | Declarative document building with Document.Create(), automatic multi-page pagination, headers, footers, backgrounds, and foregrounds. |
| 50+ layout elements | Column, Row, Table, Grid, Inlined, MultiColumn, Decoration, Layers, Lazy, ShowOnce, SkipOnce, EnsureSpace, PreventPageBreak, ScaleToFit, StyledBox, and more. |
| Rich text & typography | HarfBuzz text shaping, OpenType font features, subscript/superscript, underline/strikethrough/overline with 5 decoration styles, text alignment (left/center/right/justify/start/end), font weights 100–1000, custom font loading. |
| RTL & bidirectional text | Full right-to-left layout with ICU bidi reordering. Per-page ContentFromRightToLeft() and document-wide ContentDirection.RightToLeft. |
| Tables | Constant, relative, and auto-sized columns. Row spanning, column spanning, header rows, alternating row colors, cell padding defaults. |
| Images & SVG | Raster images (PNG, JPEG, WebP, BMP, GIF, TIFF), SVG rendering, dynamic images via callback, image scaling modes (FitWidth, FitHeight, FitArea, Resize). |
| Transforms | Rotate (arbitrary angle), scale, flip, translate, simple rotation (90/180/270). |
| Styling | Padding (uniform, per-side, horizontal/vertical), borders, corner radius, box shadows, solid and gradient backgrounds, line elements. |
| Paging control | Page breaks, ShowOnce, SkipOnce, EnsureSpace, PreventPageBreak, StopPaging, ShowEntire, RepeatContent, Lazy loading. |
| Navigation | Hyperlinks, sections, section links, bookmarks via both layout engine and PdfEditor. |
| Dynamic content | Dynamic components with state, dynamic images, dynamic SVG images, page number and total page count in text spans. |
| Components | Reusable IComponent and stateful IDynamicComponent for encapsulating complex layouts. |
Interactive Forms
| Feature | Description |
|---|---|
| 6 field types | TextField, CheckBox, RadioButton, ComboBox (dropdown), ListBox (multi-select), PushButton. |
| Button actions | Submit form, reset form, open URL, run JavaScript — via ButtonAction configuration. |
| Enable via settings | DocumentSettings.EnableForms = true opts in to the PDFium post-processing round-trip that creates AcroForm widgets. |
Markdown to PDF
| Feature | Description |
|---|---|
| Built-in parser | CommonMark 0.31.2 + GFM parser with zero managed dependencies. No Markdig, no external packages. |
| 90% spec compliance | 530 of 588 non-skipped CommonMark spec examples passing, enforced as individual test cases. |
| Full GFM support | Tables, strikethrough, task lists on top of the CommonMark base. |
| Customizable styling | MarkdownStyle with 40+ properties: heading sizes, colors, fonts, code block themes, link colors, table styling, list bullets. |
| Two entry points | .Markdown(text) on any container element, or MarkdownExtensions.CreateFromMarkdown(text) for standalone documents. |
| Image resolver | IMarkdownImageResolver interface for custom image sources. Built-in FileSystemImageResolver and NullImageResolver. |
PDF Toolkit
| Feature | Description |
|---|---|
| PdfEditor unified API | Single fluent chain for metadata, bookmarks, page manipulation, redaction, stamping, form fields, annotations, encryption, compression, overlay/underlay, and attachments. Three entry points: Create, Open(file), Open(bytes). |
| Merge & split | Append, prepend, import pages at position, select page ranges, merge files via DocumentOperation or PdfEditor. |
| Overlay & underlay | Layer PDFs on top or beneath pages with target/source page range selection and repeat options. |
| Encryption | 256-bit AES (recommended), 128-bit AES/RC4, and 40-bit RC4 (legacy). Per-permission control: print, extract, annotate, assembly, fill forms. Decrypt and remove restrictions. |
| Digital signing | PAdES-B-B detached PKCS#7 signatures with PFX files or X509Certificate2. Signature verification via PDFium + managed SignedCms. Signature field metadata: reason, location, contact info, signer DN. |
| Redaction | Search-and-redact text across all pages or per-page. Area-based redaction by rectangle. Two-phase workflow: create REDACT annotations, then flatten. |
| Stamping & watermarks | Text stamps and image stamps on every page, with opacity, position, rotation, font size, and color control. |
| Compression | Image recompression at target JPEG quality, internal PDF stream optimization. Typical 50–80% reduction for image-heavy documents. |
| Linearization | Fast web view — browsers begin rendering before the full file downloads. |
| Metadata editing | Set title, author, subject, keywords, creator, producer, and custom properties on existing PDFs. |
| Bookmarks | Add, remove, rename, reorder, and change destinations of top-level bookmarks. |
| Page manipulation | Delete pages, insert blank pages, rotate pages, set MediaBox/CropBox, draw text/lines/rectangles on existing pages. |
| Annotations | Read and flatten annotations on existing PDFs. |
| Form field editing | Read, set (text and boolean), rename, remove, and flatten form fields on existing PDFs. |
| Attachments | Embed files with MIME type, description, dates, and PDF/A-3 relationship. Read attachments from existing PDFs. |
Text Extraction & Search
| Feature | Description |
|---|---|
| Full-text extraction | PdfiumPage.ExtractText() — all text from a page in reading order. |
| Character-level positions | PdfiumPage.GetCharBoxes() — bounding box, font size, and Unicode codepoint for every character. |
| Text runs | PdfiumPage.ExtractTextRuns() — text with bounding boxes grouped by run. |
| Text search | PdfiumDocument.Search() — find text across pages with match locations, case sensitivity, and whole-word options. |
Page Rendering
| Feature | Description |
|---|---|
| Page → PNG | PdfiumPage.RenderToPng(dpi) or RenderToPng(widthPx, heightPx). |
| Page → JPEG | PdfiumPage.RenderToJpeg(dpi, quality) or RenderToJpeg(widthPx, heightPx, quality). |
| Document → Images | Document.GenerateImages(settings) — PNG, JPEG, or WebP with configurable DPI and quality. |
| SVG export | Document.GenerateSvg() — self-contained SVG per page with embedded fonts and images. |
| Image → PDF | ImageToPdfConverter.Convert() — one or more images to a multi-page PDF with optional page size and margins. |
Compliance
| Feature | Description |
|---|---|
| PDF/A | 6 conformance levels: PDF/A-2A, 2B, 2U, 3A, 3B, 3U. Validated with veraPDF. |
| PDF/UA-1 | ISO 14289-1 universal accessibility with 42 semantic structure tags, automatic content tagging, and artifact marking. |
| ZUGFeRD / Factur-X | PDF/A-3B + CII XML attachment + Factur-X XMP metadata. Supports MINIMUM, BASIC WL, BASIC, EN 16931, and EXTENDED profiles. |
Architecture & Platform
| Feature | Description |
|---|---|
| Zero managed dependencies | No NuGet PackageReferences — only the .NET BCL plus bundled native binaries. No SkiaSharp, no ImageSharp, no BouncyCastle. |
| Multi-targeting | .NET 8 (LTS), .NET 9, and .NET 10 (LTS). All three frameworks are fully supported. |
| Platforms | Windows x64 and Linux x64. Native binaries for both platforms ship inside the NuGet package. |
| Three native engines | Skia (rendering & PDF generation), qpdf (structural PDF operations), PDFium (PDF parsing & inspection). All bundled, no separate installs. |
| Permissive licensing | All native dependencies are BSD, MIT, Apache-2.0, ISC, zlib, or FTL. No GPL, LGPL, or MPL components. |
Native Library Versions
| Component | Version | License |
|---|---|---|
| Skia | m147 (Chrome 147) | BSD-3-Clause |
| HarfBuzz | bundled with Skia m147 | MIT |
| libgrapheme | 3.0.0 (Unicode 17.0.0) | ISC |
| FreeType | bundled with Skia m147 | FTL |
| PDFium | chromium/7690 (m147 era) | BSD-3-Clause |
| qpdf | 12.3.2 + Folio patches | Apache-2.0 |
| OpenSSL | 3.x | Apache-2.0 |
Known Limitations (2026.4.0)
- Digital signing is PAdES-B-B only. Timestamped (B-T), long-term (B-LT), and archive (B-LTA) signatures are planned for a future release.
- macOS support is not yet available. The native binaries ship for Windows x64 and Linux x64. macOS (osx-x64, osx-arm64) is planned.
- PDF/A-1a and PDF/A-1b are not supported. Use PDF/A-2 or PDF/A-3 levels instead — they are strict supersets of PDF/A-1.
- Annotations are read-only and flatten-only. Adding custom annotations (text, free-text, link) to existing PDFs via
PdfEditoris planned. - Form creation requires EnableForms. Interactive form fields are opt-in via
DocumentSettings.EnableForms = truebecause they require a PDFium post-processing round-trip.
Getting Started
dotnet add package FolioPDF
using FolioPDF;
using FolioPDF.Fluent;
using FolioPDF.Helpers;
Document.Create(doc =>
{
doc.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(50);
page.Content().Text("Hello from FolioPDF 2026.4!").FontSize(24);
});
}).GeneratePdf("hello.pdf");
See the Getting Started guide for a complete walkthrough of all three entry points.