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

FeatureDescription
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

FeatureDescription
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

FeatureDescription
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

FeatureDescription
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

FeatureDescription
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

FeatureDescription
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

FeatureDescription
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

FeatureDescription
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

ComponentVersionLicense
Skiam147 (Chrome 147)BSD-3-Clause
HarfBuzzbundled with Skia m147MIT
libgrapheme3.0.0 (Unicode 17.0.0)ISC
FreeTypebundled with Skia m147FTL
PDFiumchromium/7690 (m147 era)BSD-3-Clause
qpdf12.3.2 + Folio patchesApache-2.0
OpenSSL3.xApache-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 PdfEditor is planned.
  • Form creation requires EnableForms. Interactive form fields are opt-in via DocumentSettings.EnableForms = true because 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.