The measurements
Weblitz's own measurements: every document beside Chrome 156's PDF of it, the web's own tests area by area, the other HTML to PDF libraries on the same documents, and how each was made. Each figure carries its date.
Compare two outputs yourself · The summary
17 documents beside Chrome's own PDFs measured 2026-11-07
Documents of the kind people print, each compared with Chrome 156's PDF of it: the number of pages, every element's box (within half a pixel), every line of text, and the PDF's text. A score of 100% prints as Chrome prints.
- An invoice100%
- A bank statement100%
- A letter100%
- A newsletter100%
- A Bootstrap invoice100%
- A Tailwind dashboard100%
- A React app (Northwind)100%
- A Chart.js report100%
- Tables100%
- Flexbox100%
- Grid100%
- SVG and pictures100%
- Paged media: headers, footers, page numbers100%
- Inline text100%
- CSS 2.1 blocks100%
- Backgrounds and borders100%
- International text: Arabic, Hebrew, Thai, Hindi, Chinese, Japanese, emoji100%
The web's own tests, area by area measured 2026-11-07
The Web Platform Tests are what browsers are checked against. In each area: Weblitz passes X of the Y rendering tests that Chrome 156 passes when it prints.
Complete in every area. In each of the 54 areas below, Weblitz passes every rendering test Chrome 156 passes when it prints. The 622 tests a printed page cannot have are left out, each listed with its reason.
| Area | Weblitz passes |
|---|---|
| CSS 2 (the core of CSS layout) | 6,084 of the 6,084 |
| Grid | 1,667 of the 1,667* |
| Text | 1,223 of the 1,223* |
| Writing modes | 1,117 of the 1,117* |
| Fragmentation (page and column breaks) | 1,077 of the 1,077* |
| Flexbox | 1,008 of the 1,008* |
| User interface (outlines, carets, appearance) | 948 of the 948* |
| Transforms | 778 of the 778 |
| Backgrounds and borders | 691 of the 691 |
| Overflow | 615 of the 615* |
| Sizing | 537 of the 537 |
| Gaps and gap decorations | 527 of the 527* |
| HTML canvas | 517 of the 517* |
| Masking and clipping | 486 of the 486 |
| Multi-column | 462 of the 462* |
| Images and gradients | 441 of the 441* |
| Containment | 423 of the 423 |
| Fonts | 320 of the 320 |
| Filters | 314 of the 314 |
| Colour | 297 of the 297 |
| HTML rendering | 293 of the 293 |
| WOFF2 fonts | 291 of the 291 |
| HTML elements | 278 of the 278* |
| MathML | 263 of the 263* |
| Positioning | 249 of the 249 |
| Text decoration | 241 of the 241* |
| Counter styles | 238 of the 238 |
| Pseudo-elements | 231 of the 231 |
| Shapes | 231 of the 231 |
| Selectors | 225 of the 225* |
| Anchor positioning | 220 of the 220* |
| Paged media (@page) | 194 of the 194 |
| Custom properties | 179 of the 179 |
| Conditional rules and container queries | 170 of the 170* |
| Values and units | 163 of the 163 |
| Tables | 161 of the 161 |
| Lists and counters | 156 of the 156* |
| Inline layout | 152 of the 152* |
| Display | 147 of the 147 |
| CSS Layout API | 134 of the 134* |
| HTML DOM | 127 of the 127 |
| CSS Paint API | 114 of the 114* |
| Custom highlights | 106 of the 106* |
| Viewport | 105 of the 105 |
| Ruby | 97 of the 97 |
| Shadow DOM styling | 97 of the 97* |
| Motion paths | 95 of the 95 |
| Borders and corner shapes | 93 of the 93* |
| Printing | 38 of the 38 |
| Other CSS modules | 567 of the 567* |
| SVG | 499 of the 499* |
| Other web platform areas | 147 of the 147 |
| Other HTML | 112 of the 112 |
| Image formats | 112 of the 112 |
* Some of these tests Chrome 156 passes only with its experimental web platform features on. Weblitz passes them the same way: with ExperimentalWebFeatures on (off by default, like a stable Chrome). Without it, Weblitz renders these features as stable Chrome does.
How we count: every rendering test of these suites that Chrome 156 passes when it prints, its experimental features on. A feature Weblitz does not support yet counts as failed, never as left out. Left out: only what a printed page cannot have (view transitions, media playback, permission prompts, scrolling and scroll-driven animations, editing, selection, validation bubbles, windows and navigation), and the few tests Chrome itself fails on our machine when run again. The list of every test left out, with its reason. Script tests are not in this table: in their areas too, every subtest that applies agrees with Chrome's, measured the same day.
Beside other HTML to PDF libraries scores measured 2026-11-04 times and sizes 2026-11-07
The same 17 documents, the same fonts for every library, each scored against Chrome 156's PDF (headless Chrome, driven by Puppeteer): 100% prints as Chrome prints. "Exact" counts only what did not move at all. Each library ran in the licence mode shown, on an Apple M4 Pro laptop with .NET 10; the evaluation modes' marks were left out of the scores.
| Library | Version | Engine | Ran as | Score | Exact | A one-page PDF | The 17 documents | Engine size |
|---|---|---|---|---|---|---|---|---|
| Weblitzits own, no browser · 2.0 preview | 2.0 preview | its own, no browser | licensed; timed unlicensed | 100% | 100% | 1.8 ms | 261 ms | 119 MB |
| Puppeteer with ChromeChrome itself · PuppeteerSharp 25.15.0, Chrome 156 · open source | PuppeteerSharp 25.15.0, Chrome 156 | Chrome itself | open source | the reference | 12 ms | 536 ms | 441 MB | |
| Playwright with ChromeChrome itself · 1.64.1, Chrome 156 · open source | 1.64.1, Chrome 156 | Chrome itself | open source | the reference | 12.6 ms | 573 ms | 876 MB | |
| Syncfusion HTML-to-PDFChromium (Blink) inside · 35.1.43 · trial, no key | 35.1.43 | Chromium (Blink) inside | trial, no key | 99.2% | 97.8% | 414 ms | 16.7 s | 695 MB |
| HiQPdf NextChromium inside · 19.0.3 · demo, no serial number | 19.0.3 | Chromium inside | demo, no serial number | 99.1% | 97.6% | 296 ms | 6.1 s | 384 MB |
| SelectPdfChromium inside · 26.5.0 · evaluation, no key | 26.5.0 | Chromium inside | evaluation, no key | 99.0% | 97.7% | 78 ms | 2.5 s | 472 MB |
| EVO HTML to PDF NextChromium inside · 15.0.3 · demo, no key | 15.0.3 | Chromium inside | demo, no key | 98.9% | 97.7% | 296 ms | 6.1 s | 384 MB |
| Princeits own print engine · 17 · free non-commercial licence | 17 | its own print engine | free non-commercial licence | 85.9% | 66.6% | 10.9 ms | 426 ms | 43 MB |
| Aspose.HTML for .NETits own engine · 26.10.0 · evaluation (first 4 pages of a document) | 26.10.0 | its own engine | evaluation (first 4 pages of a document) | 81.7% | 59.7% | 17.5 ms | 3.6 s | 10 MB |
| iText pdfHTMLits own engine, no JavaScript · 6.3.4 (iText 9.8.0) · AGPL-3.0 | 6.3.4 (iText 9.8.0) | its own engine, no JavaScript | AGPL-3.0 | 67.5% | 34.7% | 9.4 ms | 1.0 s | 18 MB |
Timed 2026-11-07 on the same Mac, every library warm (started first, then a warm-up), in its trial or evaluation mode, Weblitz unlicensed too: "A one-page PDF" is the median time per document over 200 one-page letters, one after another on one thread; "The 17 documents" the median time for the bench's documents, one after another. Engine size: what the library puts on a Linux x64 server, measured 2026-11-07: what dotnet publish -r linux-x64 adds to an application, plus the browser it downloads (Puppeteer: Chrome; Playwright: Chrome and Chrome's headless shell) or the program it installs (Prince). Weblitz's size includes its fonts, V8 and the parts of SSRS2's engine it prints with. Aspose.HTML's evaluation mode converts the first 4 pages of a document: its score and its time count those pages; on Linux it also needs libgdiplus. iText pdfHTML runs no JavaScript. Prince, Aspose.HTML and iText printed fewer pages or less text than Chrome on 2, 5 and 6 of the documents. Syncfusion's package for Macs carries an Intel Chromium, which ran translated by Rosetta 2.
Where each runs, and what it costs read 2026-11-07
What each vendor's own pages say, read 2026-11-07: each cell links the page it comes from. List prices in US dollars, excluding tax; a licence sold once includes a year of updates. On Alpine, Weblitz needs the gcompat package (Platforms).
In a Docker image measured 2026-11-07
- Weblitz on Microsoft's .NET 10 runtime image, with
libfontconfig1330 MB - Puppeteer's own image (
ghcr.io/puppeteer/puppeteer, Puppeteer 25.16.0)2.05 GB - Playwright's .NET image (
mcr.microsoft.com/playwright/dotnet, v1.64.1-noble: the .NET SDK and three browsers)3.59 GB
Linux x64 images as docker images reports them. Weblitz's renders a PDF in the container; Microsoft's runtime image alone is 203 MB.
Azure App Service on Windows measured 2026-11-06
Weblitz ran inside App Service's Windows sandbox (a B1 plan): the 17 bench documents and a Chart.js page printed there score what they score on our Mac, page for page. Nothing to install on the plan, and no browser process for the sandbox to refuse. Some Chromium-based libraries now say they run there too, from a Basic plan (where each runs).