![]()
We are pleased to announce the release of SelectPdf v26.3. This is a major step forward for the SelectPdf HTML to PDF library, headlined by brand-new accessible PDF generation — tagged PDF (PDF/UA-1) and PDF/A-3 (levels b, u, and a) — available from both the HTML-to-PDF converter and the programmatic document API. In addition, both modern rendering engines — Chromium (CEF) and Blink — have been upgraded to Chromium 148, and the Blink engine receives substantial concurrency and stability hardening.
Accessible PDF: Tagged PDF (PDF/UA-1) and PDF/A-3
The biggest new feature in v26.3 is first-class support for accessible and archival PDF. SelectPdf can now produce documents that carry a full logical structure tree and the metadata required by the relevant ISO standards:
- Tagged PDF / PDF/UA-1 — accessible documents with a tagged content structure, so screen readers and other assistive technologies can present headings, paragraphs, lists, tables, figures (with alternate text), and links in a meaningful reading order.
- PDF/A-3 at all three conformance levels —
PdfA3B(level B, visual reproduction),PdfA3U(level U, B plus searchable Unicode text), andPdfA3A(level A, the fully accessible/tagged archival level). - PDF/A-3 associated files — embed source files such as XML or spreadsheets alongside the document, so the data that produced the PDF travels with it.
Accessibility and PDF/A-3 work across every generation path in the library:
- HTML to PDF — convert any URL or HTML string to a tagged / PDF/A-3 document. The rendered structure tree is carried through to the final PDF, and works on both the Chromium and Blink engines, including documents with HTML headers and footers.
- Programmatic documents — build a document element by element with full control over the structure: headings, paragraphs, nested tables and lists (via
BeginTag/EndTag), images with alternate text, and every annotation type, each tagged correctly. - Load and re-save — an existing tagged / PDF/A-3 document preserves its standard and its tags when loaded and saved again.
- Merge and append — combining tagged documents produces one coherent structure tree.
The output has been validated end to end with veraPDF (the industry reference validator) for 3b, 3u, 3a, and ua1 conformance, and the complex sample document also passes Adobe Acrobat’s full accessibility check.
Producing an accessible, tagged PDF from HTML is just a few lines:
// initialize converter
HtmlToPdf converter = new HtmlToPdf();
// produce a tagged, accessible PDF (PDF/UA-1)
converter.Options.Tagged = true;
converter.Options.Title = "Quarterly Report";
converter.Options.Language = "en-US";
// optionally make it PDF/A-3 as well: PdfA3B, PdfA3U or PdfA3A
// (PdfA3A is the accessible archival level and implies tagging)
converter.Options.PdfStandard = PdfStandard.PdfA3A;
// works on both the Chromium and Blink engines
converter.Options.RenderingEngine = RenderingEngine.Chromium;
// convert from HTML to PDF
PdfDocument doc = converter.ConvertUrl("https://example.com");
// save the PDF and clean up
doc.Save("accessible.pdf");
doc.Close();
For programmatic documents, start from the desired standard and tag content as you build it:
// create a PDF/A-3a (accessible archival) document
PdfDocument doc = new PdfDocument(PdfStandard.PdfA3A);
doc.Tagged = true;
doc.Title = "Accessible Report";
doc.Language = "en-US";
// embed the fonts so the document stays self-contained (required for PDF/A)
PdfFont headingFont = doc.AddFont(new Font("Arial", 16), true);
PdfFont bodyFont = doc.AddFont(new Font("Arial", 11), true);
PdfPage page = doc.AddPage();
// a tagged heading
PdfTextElement heading = new PdfTextElement(10, 10, "Accessible Report", headingFont);
heading.TagType = PdfTagType.Heading1;
page.Add(heading);
// a tagged paragraph
PdfTextElement paragraph = new PdfTextElement(10, 40, 400,
"This paragraph is part of the document's logical structure tree.", bodyFont);
paragraph.TagType = PdfTagType.Paragraph;
page.Add(paragraph);
// an image marked as a figure, with alternate text for assistive technology
PdfImageElement figure = new PdfImageElement(10, 90, "chart.png");
figure.TagType = PdfTagType.Figure;
figure.AlternateText = "Bar chart of quarterly revenue";
page.Add(figure);
doc.Save("accessible-report.pdf");
doc.Close();
Accessible PDF (tagged / PDF/UA) and PDF/A-3 generation are features of the full commercial library; they are not available in the free Community edition.
Chromium (CEF) and Blink Engines Upgraded to Chromium 148
Both of SelectPdf’s modern rendering engines have been upgraded to Chromium 148:
- Chromium (CEF) —
RenderingEngine.Chromiumnow runs on CEF / Chromium 148, succeeding the CEF 146 engine introduced in v26.2. - Blink —
RenderingEngine.Blinkis now built on Chromium 148 (148.0.7778.178).
The newer core brings up-to-date HTML5, CSS, and JavaScript support and improved fidelity for modern web pages. It also means both engines now produce equally complete tagged PDF output, so you can pick whichever engine best fits your deployment (the CEF engine for restricted hosting such as Azure Web Apps, Blink for attaching to an existing Chromium instance) without compromising on accessibility.
HtmlToPdf converter = new HtmlToPdf();
// Chromium 148 via the CEF engine ...
converter.Options.RenderingEngine = RenderingEngine.Chromium;
// ... or Chromium 148 via the Blink engine
// converter.Options.RenderingEngine = RenderingEngine.Blink;
PdfDocument doc = converter.ConvertUrl("https://example.com");
doc.Save("output.pdf");
doc.Close();
Blink Concurrency and Stability Hardening
The Blink engine received a thorough concurrency overhaul for high-volume, highly-parallel workloads. Whether you run many conversions inside a single process or spread them across many processes on the same machine, the Blink engine now delivers consistent, reliable results under heavy concurrent load — a great fit for busy server and batch-processing scenarios.
Other Fixes and Improvements
v26.3 also bundles a number of targeted fixes that came out of customer reports and our own regression suite:
- Fixed non-ASCII character corruption in PDF form fields on .NET Core / .NET 5+
- Hardened RFC 3161 timestamp signing, validated end to end
- Exposed
MaxLengthandDivideTexton text-box form fields - Fail-fast, clearly-worded errors when an unsupported combination is requested (for example tagged / PDF/A output on the WebKit engines, or a forbidden annotation in a PDF/A document)
- Clearer error messages from the Chromium engine
- The Chromium engine now loads reliably under classic ASP.NET hosting
- Fixed the PDF compressor corrupting image transparency (also shipped as the
Select.Pdf.Extras26.3.0 update)
Quick Start
To use the Chromium engine, install the matching runtime package alongside the main library:
Select.Pdf.NetCore.Chromium.Windows(or.x64) for the commercial editionSelect.HtmlToPdf.NetCore.Chromium.Windowsfor the free Community edition
.NET Compatibility
SelectPdf v26.3 supports the full modern .NET range:
- .NET Framework 2.0, 4.0, 4.6.1, 4.7.2
- .NET Standard 2.0
- .NET Core 2.x and later
- .NET 5, 6, 7, 8, 9, and .NET 10
Both Commercial and Community editions ship across the same target matrix. Accessible PDF (tagged / PDF/UA) and PDF/A-3 generation are available in the Commercial edition.
Availability
SelectPdf v26.3 is available now on NuGet and from the SelectPdf website:
- Commercial edition —
Select.Pdf.NetCore(orSelect.Pdf.NetCore.x64), with theSelect.Pdf.NetCore.Chromium.Windowsengine package — or grab the installer from the downloads page. - Community (free) edition —
Select.HtmlToPdf.NetCore, withSelect.HtmlToPdf.NetCore.Chromium.Windows— also available on the free downloads page. - SelectPdf.Extras add-on — updated to v26.3 (
Select.Pdf.Extras/Select.Pdf.Extras.x64).
Learn more on the product pages for the PDF Library for .NET and the Community Edition, browse the online documentation, or try the C# and VB.NET live demos. For licensing questions, see the pricing page or get in touch. As always, we welcome your feedback and bug reports.