◆SelectPdf.Universal · v26.4 Windows · Linux · macOS · Docker

Cross-platform PDF library for .NET.
Our new flagship.

SelectPdf.Universal is our new flagship — the SelectPdf .NET library on Windows, Linux and macOS, with the classes and members you already know. Chromium-powered HTML to PDF plus the full PDF toolkit: create, merge, sign, fill forms, extract text. It targets .NET 8, .NET 10 and .NET Standard 2.0, and it runs in Docker containers and on ARM64 too — with the engine and fonts bundled, so there is nothing to apt-get. One perpetual license covers SelectPdf.Universal and the classic Windows library.

01 / CROSS-PLATFORM ●

SelectPdf.Universal

The full library, on every platform you ship to.

  • HTML & Word → PDF, PDF→text & image, merge, sign, redact
  • Windows, Linux (x64 & ARM64) and macOS on Apple Silicon
  • PDF/A-4, PDF/UA-2, AES-GCM — the newest standards
  • One perpetual license covers this and the classic library
# the library:
$ dotnet add package SelectPdf.Universal
 
# plus the engine for each platform you deploy to:
$ dotnet add package SelectPdf.Universal.Native.linux-x64
.NET 8 · .NET 10 .NET Standard 2.0 Docker ARM64
02 / FREE ●

Community Edition

Free, cross-platform. PDFs up to 5 pages.

SelectPdf.HtmlToPdf.Universal is the free Community Edition of the cross-platform converter — HTML to PDF only, free for commercial use, no watermark, capped at five pages per document. Same namespace and same classes as the full package, so moving up later is a package swap and a license key.

↔The new flagship

Our new flagship library. An API you already know.

SelectPdf.Universal is our new flagship: cross-platform, and the first to get new features and standards. It keeps the classes, members and overloads of the classic library wherever they could be kept, so moving a project over is mostly mechanical — new packages, the SelectPdf.Universal namespace, and the library's own drawing types in place of System.Drawing. The classic Windows library continues to be maintained and receives selected updates.

Program.cs
using SelectPdf.Universal;

// the same code on Windows, Linux and macOS
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertUrl("https://selectpdf.com");
doc.Save("output.pdf");
doc.Close();
Program.vb
Imports SelectPdf.Universal

' the same code on Windows, Linux and macOS
Dim converter As New HtmlToPdf()
Dim doc As PdfDocument = converter.ConvertUrl("https://selectpdf.com")
doc.Save("output.pdf")
doc.Close()

Measured against the classic 26.4 SDK: 82% of its public types and members carry over unchanged apart from the namespace. Most of the rest are System.Drawing types, settings for the WebKit and Blink engines, and direct printing.

ConvertUrlAsync and ConvertHtmlStringAsync sit beside the synchronous calls — awaitable, with cancellation.

⌗PLATFORMS

Windows, Linux and macOS — x64 and ARM64.

Windows win-x64 · win-x86 Static-CRT engines — no Visual C++ redistributable to install.
Linux linux-x64 · linux-arm64 Verified on Debian 12, Ubuntu 22.04 and 24.04, and Amazon Linux 2023. glibc 2.30 or later.
macOS osx-arm64 · macOS 13+ Apple Silicon, with signed and notarised engines. Intel Macs are not covered — use the Online API there.
Frameworks .NET 8 · .NET 10 Native targets, plus .NET Standard 2.0 — which makes the library consumable from .NET Framework 4.6.1 and later.
Containers Docker · x64 and ARM64 Stock .NET runtime images on x64 and ARM64 — no extra system packages and no special run flags.
Cloud Azure App Service Verified on both Windows and Linux App Service, on Basic or above.
Engine Per-platform package Add the SelectPdf.Universal.Native package matching each runtime you deploy to — reference more than one for multi-platform builds.
Not supported Windows on ARM There is no win-arm64 engine. The Online API covers that case, and any non-.NET stack.
Speed Fast by default After the first conversion, a simple page converts in a fraction of a second, and up to eight conversions run in parallel.
§LINUX & DOCKER

HTML to PDF in Docker — nothing to apt-get.

The Chromium engine, the fallback fonts and the native PDF tools all ship inside the per-platform NuGet package, so a stock .NET runtime image is enough.

The SelectPdf.Universal.Native package for each Linux runtime carries the complete Chromium shared-library closure — including the modules loaded at run time for HTTPS — so there is no apt-get install step in your Dockerfile. Rendering is headless: no X server, no Xvfb, no $DISPLAY.

A plain docker run works — no --no-sandbox, no added capabilities, no privileged mode, no GPU and no --shm-size tuning. The library restores the engine's execute permission itself, which matters when the deployment was published from Windows; a non-root image needs one extra line, RUN chmod -R a+rX over the engine folder.

PDF to text and PDF to image need nothing at all on any platform — that engine is statically linked.

Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -f net10.0 -o /out

FROM mcr.microsoft.com/dotnet/runtime:10.0-noble AS runtime
# no apt-get: the Chromium closure ships in
# SelectPdf.Universal.Native.linux-x64 and CEF runs headless
WORKDIR /app
COPY --from=build /out ./
ENTRYPOINT ["dotnet", "MyApp.dll"]
⚖STANDARDS & ACCESSIBILITY

PDF/A-4, PDF/UA-2 — the PDF 2.0 generation.

Accessibility PDF/UA-1 & PDF/UA-2 Tagged PDF with a logical structure tree and reading order, for EN 301 549, Section 508 and European Accessibility Act obligations.
Archival PDF/A-1B → PDF/A-3A Levels 1B, 2B, 3B, 3U and 3A for long-term archiving.
PDF 2.0 archival PDF/A-4 · 4E · 4F ISO 19005-4, including the engineering variant and the variant that allows arbitrary embedded files. PDF/A-4 is the level that pairs with PDF/UA-2.
Print PDF/X-1a:2001 For print production and prepress workflows.
Encryption RC4 · AES · AES-GCM 40, 128 and 256-bit keys, plus AES-256 revision 6 — the PDF 2.0 encryption revision.
E-invoicing ZUGFeRD & Factur-X Hybrid invoices across the Minimum, Basic, EN 16931, Extended and XRechnung profiles.
Signatures PFX · certificate store Sign generated or existing documents from a PFX file or the system certificate store, with timestamping.
Access Passwords & permissions User and owner passwords with per-document permissions.
Edition Commercial only Tagged PDF and e-invoicing are part of SelectPdf.Universal; the free Community Edition converts HTML to PDF.
↳CAPABILITIES

The full .NET PDF library — not just HTML to PDF.

Everything the classic SDK does, on every platform the Universal packages target.

01 · HTML→PDF+
HTML to PDF

Convert any web page or raw HTML string to PDF with a Chromium engine.

  • HTML5/CSS3, web fonts, JavaScript
  • HTTP headers, cookies, POST, auth, proxy
  • Headers and footers with page numbering
02 · HTML→Image+
HTML to image

Render a page or HTML string to an image with the same engine.

  • Full page or a fixed viewport
  • Same fidelity as the PDF output
  • Web page or raw HTML input
03 · CREATE+
PDF from scratch

Build documents in code, page by page.

  • Text, images, shapes, links and bookmarks
  • Reusable templates, watermarks and stamps
  • Fonts including CJK, with subset embedding
04 · EDIT+
Load & modify

Work on PDFs your application did not create.

  • Merge and append documents
  • Resize, reflow and compress
  • Viewer preferences and open actions
05 · FORMS+
AcroForms

Fill and flatten interactive form fields.

  • Fill fields on generated or loaded PDFs
  • Flatten to a non-editable document
  • Combine with passwords and permissions
06 · PDF→TEXT+
PDF to text & image

Read documents back out again.

  • Extract text per page or from a region
  • Search, case-sensitive or whole-word
  • Rasterize pages to images
07 · WORD→PDF+
Word to PDF

Convert Word documents to PDF — no browser, no engine process, no network.

  • DOCX, DOC, RTF, Markdown and more
  • Page sizes kept, headings become bookmarks
  • Tagged PDF/UA and archival PDF/A output
08 · REDACT+
Redaction

Remove sensitive content from existing PDFs — deleted from the file, not covered over.

  • Find it by area, text or regular expression
  • Removes text, images, links and form fields
  • Optional overlay text on each redaction
09 · VALIDATE+
Signature validation

Check the digital signatures on a PDF you received.

  • Valid, trusted, and unchanged since signing
  • Revocation checks over OCSP and CRL
  • One status per signature
§REDACTION & SIGNATURES

Redact PDFs and validate signatures in C#.

The compliance half of a document workflow: take out what must not leave, and check what came in.

PdfRedactionManager finds content by area, by text or by regular expression and removes it from the file. The text, images, links and form fields underneath are deleted, not hidden behind a box — there is nothing left to copy or extract.

PdfSecurityManager.ValidateSignatures checks every signature on a document you received: whether it is valid and trusted, whether the document changed after it was signed and, with revocation checking on, whether the certificate was revoked. Check a signed invoice or contract before you act on it.

Both are part of the commercial SelectPdf.Universal package.

Redact.cs
using SelectPdf.Universal;
using System.Text.RegularExpressions;

var redactor = new PdfRedactionManager();
redactor.Load("statement.pdf");

// every card number, wherever it appears
redactor.AddRedaction(new Regex(@"\d{4}-\d{4}-\d{4}"));
redactor.OverlayText = "REDACTED";

redactor.Redact();
redactor.Save("statement-redacted.pdf");
redactor.Close();
↔EDITIONS

Pick your package — classic or cross-platform.

Classic — platforms Select.Pdf · Select.HtmlToPdf Windows, .NET Framework 2.0 through .NET 10, with four rendering engines to choose from.
Cross-platform SelectPdf.Universal Windows, Linux and macOS on .NET 8/10 and .NET Standard 2.0, with the Chromium engine.
Free editions Both, 5-page cap Select.HtmlToPdf on Windows and SelectPdf.HtmlToPdf.Universal cross-platform — free for commercial use, no watermark.
Classic keeps Framework 2.0 · 4 engines Direct printing and conversion events stay on the classic Windows packages.
Universal keeps The newest features Word to PDF, redaction, signature validation, PDF/A-4, PDF/UA-2 and AES-GCM are in SelectPdf.Universal.
Classic library Maintained The classic Windows library continues to be maintained and receives selected updates. One perpetual license covers both.
?FAQ

Cross-platform .NET PDF, answered.

More in the .NET library docs — the rest is one email away.

Yes. SelectPdf.Universal runs the SelectPdf library API on Linux x64 and ARM64, as well as on Windows and macOS. The Chromium rendering engine and Latin fonts are bundled with the NuGet packages, so it also runs on minimal container images with nothing extra to install. For text in other languages, such as Chinese, Japanese or Arabic, add the optional SelectPdf.Universal.Fonts package.
Yes, on Apple Silicon. SelectPdf.Universal ships a signed, notarised native engine for macOS on ARM (osx-arm64), and requires macOS 13 or later. Intel Macs are not covered by a native engine — use the SelectPdf Online API there.
Largely. SelectPdf.Universal keeps the classes, members and overloads of the classic library wherever they could be kept: 82% of the classic public API carries over unchanged apart from the namespace. Moving a project over means new packages, the SelectPdf.Universal namespace and the library's own drawing types in place of System.Drawing. Universal renders with Chromium only, so settings for the WebKit and Blink engines are removed; direct printing, conversion events and the RtfToPdfElement class are not carried over, and RTF files convert through the new WordToPdf instead. Two timing properties are renamed, with the old names kept as obsolete aliases. The migration topic in the documentation lists every change.
Yes. The engine ships with everything it needs and runs headless — verified on Debian 12, Ubuntu 22.04 and 24.04, and Amazon Linux 2023 images with no extra system packages required, and no special docker run flags.
Yes. SelectPdf.Universal writes tagged PDF to PDF/UA-1 and PDF/UA-2, and archival PDF to PDF/A-1B through PDF/A-3A as well as the PDF 2.0 family PDF/A-4, 4E and 4F. PDF/X-1a is supported for print production.
Yes. The perpetual .NET library license covers both the classic Windows packages and SelectPdf.Universal — one license, every platform.
Yes — SelectPdf.HtmlToPdf.Universal, the cross-platform Community Edition: HTML to PDF only, free for commercial use, no watermark, capped at 5 pages per document.
.NET 8 and .NET 10 natively, plus .NET Standard 2.0, which makes the library consumable from .NET Framework 4.6.1 and later.
The rendering engine is platform-specific, so it ships as SelectPdf.Universal.Native.<rid> — one small package per runtime you deploy to, instead of every platform's engine in every build. Reference the RIDs you ship to; multi-platform deployments can reference more than one. Word to PDF does not need it: the Word engine is part of the library.
Yes. The commercial SelectPdf.Universal package converts DOCX, DOC, RTF, TXT, WordML, HTML and Markdown documents to PDF with the WordToPdf class, on every supported platform. The Word engine is part of the library, so it needs no browser and no native package. Page sizes follow the document, headings become bookmarks, and the output can be tagged PDF/UA or archival PDF/A. Word to PDF is not in the free Community Edition or in the classic Windows library.
Yes. HtmlToPdf.ConvertUrlAsync and ConvertHtmlStringAsync return a Task<PdfDocument> and accept a CancellationToken. Up to MaximumConcurrentConversions conversions run at once — eight by default — and the rest wait their turn in order.