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 APIDeclarative document building with Document.Create(), automatic multi-page pagination, headers, footers, backgrounds, and foregrounds.
50+ layout elementsColumn, Row, Table, Grid, Inlined, MultiColumn, Decoration, Layers, Lazy, ShowOnce, SkipOnce, EnsureSpace, PreventPageBreak, ScaleToFit, StyledBox, and more.
Rich text & typographyHarfBuzz 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 textFull right-to-left layout with ICU bidi reordering. Per-page ContentFromRightToLeft() and document-wide ContentDirection.RightToLeft.
TablesConstant, relative, and auto-sized columns. Row spanning, column spanning, header rows, alternating row colors, cell padding defaults.
Images & SVGRaster images (PNG, JPEG, WebP, BMP, GIF, TIFF), SVG rendering, dynamic images via callback, image scaling modes (FitWidth, FitHeight, FitArea, Resize).
TransformsRotate (arbitrary angle), scale, flip, translate, simple rotation (90/180/270).
StylingPadding (uniform, per-side, horizontal/vertical), borders, corner radius, box shadows, solid and gradient backgrounds, line elements.
Paging controlPage breaks, ShowOnce, SkipOnce, EnsureSpace, PreventPageBreak, StopPaging, ShowEntire, RepeatContent, Lazy loading.
NavigationHyperlinks, sections, section links, bookmarks via both layout engine and PdfEditor.
Dynamic contentDynamic components with state, dynamic images, dynamic SVG images, page number and total page count in text spans.
ComponentsReusable IComponent and stateful IDynamicComponent for encapsulating complex layouts.

Interactive Forms

FeatureDescription
6 field typesTextField, CheckBox, RadioButton, ComboBox (dropdown), ListBox (multi-select), PushButton.
Button actionsSubmit form, reset form, open URL, run JavaScript - via ButtonAction configuration.
Enable via settingsDocumentSettings.EnableForms = true opts in to the PDFium post-processing round-trip that creates AcroForm widgets.

Markdown to PDF

FeatureDescription
Built-in parserCommonMark 0.31.2 + GFM parser with zero managed dependencies. No Markdig, no external packages.
90% spec compliance530 of 588 non-skipped CommonMark spec examples passing, enforced as individual test cases.
Full GFM supportTables, strikethrough, task lists on top of the CommonMark base.
Customizable stylingMarkdownStyle 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 resolverIMarkdownImageResolver interface for custom image sources. Built-in FileSystemImageResolver and NullImageResolver.

PDF Toolkit

FeatureDescription
PdfEditor unified APISingle 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 & splitAppend, prepend, import pages at position, select page ranges, merge files via DocumentOperation or PdfEditor.
Overlay & underlayLayer PDFs on top or beneath pages with target/source page range selection and repeat options.
Encryption256-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 signingPAdES-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.
RedactionSearch-and-redact text across all pages or per-page. Area-based redaction by rectangle. Two-phase workflow: create REDACT annotations, then flatten.
Stamping & watermarksText stamps and image stamps on every page, with opacity, position, rotation, font size, and color control.
CompressionImage recompression at target JPEG quality, internal PDF stream optimization. Typical 50-80% reduction for image-heavy documents.
LinearizationFast web view - browsers begin rendering before the full file downloads.
Metadata editingSet title, author, subject, keywords, creator, producer, and custom properties on existing PDFs.
BookmarksAdd, remove, rename, reorder, and change destinations of top-level bookmarks.
Page manipulationDelete pages, insert blank pages, rotate pages, set MediaBox/CropBox, draw text/lines/rectangles on existing pages.
AnnotationsRead and flatten annotations on existing PDFs.
Form field editingRead, set (text and boolean), rename, remove, and flatten form fields on existing PDFs.
AttachmentsEmbed files with MIME type, description, dates, and PDF/A-3 relationship. Read attachments from existing PDFs.

Text Extraction & Search

FeatureDescription
Full-text extractionPdfiumPage.ExtractText() - all text from a page in reading order.
Character-level positionsPdfiumPage.GetCharBoxes() - bounding box, font size, and Unicode codepoint for every character.
Text runsPdfiumPage.ExtractTextRuns() - text with bounding boxes grouped by run.
Text searchPdfiumDocument.Search() - find text across pages with match locations, case sensitivity, and whole-word options.

Page Rendering

FeatureDescription
Page → PNGPdfiumPage.RenderToPng(dpi) or RenderToPng(widthPx, heightPx).
Page → JPEGPdfiumPage.RenderToJpeg(dpi, quality) or RenderToJpeg(widthPx, heightPx, quality).
Document → ImagesDocument.GenerateImages(settings) - PNG, JPEG, or WebP with configurable DPI and quality.
SVG exportDocument.GenerateSvg() - self-contained SVG per page with embedded fonts and images.
Image → PDFImageToPdfConverter.Convert() - one or more images to a multi-page PDF with optional page size and margins.

Compliance

FeatureDescription
PDF/A6 conformance levels: PDF/A-2A, 2B, 2U, 3A, 3B, 3U. Validated with veraPDF.
PDF/UA-1ISO 14289-1 universal accessibility with 42 semantic structure tags, automatic content tagging, and artifact marking.
ZUGFeRD / Factur-XPDF/A-3B + CII XML attachment + Factur-X XMP metadata. Supports MINIMUM, BASIC WL, BASIC, EN 16931, and EXTENDED profiles.

Architecture & Platform

FeatureDescription
Zero managed dependenciesNo 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.
PlatformsWindows x64 and Linux x64. Native binaries for both platforms ship inside the NuGet package.
Three native enginesSkia (rendering & PDF generation), qpdf (structural PDF operations), PDFium (PDF parsing & inspection). All bundled, no separate installs.
Permissive licensingAll 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.
  • macOS support is not yet available. The native binaries ship for Windows x64 and Linux x64.
  • 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.
  • 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.