Skip to content
Skip the list of specifications

print-css.rocks lessons

print-css.rocks is Andreas Jung’s tutorial on CSS for paged media, on GitHub: 70 lessons, each a short HTML document, most with a one-line note on what it demonstrates. Jung runs 63 of them on eight engines and grades every result; the 7 that use one engine’s proprietary extensions run on that engine only. Here the ReflowPDF Engine prints 67 of them; each has its PDF and, unless it needs JavaScript, opens in the playground. The other 3 are XML documents, and the engine reads HTML.

We grade our prints the way Jung grades his engines: by eye, against what each lesson sets out to show. Where our print differs from the lesson because we follow a rule of the spec, its card says so and the note cites the rule. Jung’s grades for the other engines are in each lesson’s conversion.ini.

Matches the lesson55
Differs from the lesson, follows the spec5
Partly matches the lesson0
Does not match the lesson0
Not supported10

Not supported: 3 XML lessons, 6 that use another engine’s extensions, and 1 that uses content MathML and <mfenced>, which MathML Core (the MathML browsers implement) leaves out. Lessons that match carry no label; every other lesson has a label and a note on the difference.

Against the eight engines

Jung printed the other engines between December 2023 and January 2024, in the versions listed; current versions may differ. ReflowPDF results are self-assessed the same way. The table counts the 63 lessons Jung runs on every engine. Our 5 results that differ from the lesson where we follow a rule of the spec are in their own column, Spec*, and not counted as OK: Jung has no such grade, and we give it only to our own prints. Ties list Jung’s engines first.

EngineOKSpec*PartlyErrorUnsupp.
PDFreactor 11.6.657–213
Antenna House 7.455–332
Prince 15.254–342
BFO Publisher 1.354––63
ReflowPDF self-assessed, build c01f2f7a6545––4
Vivliostyle 2.25.952––29
WeasyPrint 60.246–269
Typeset.sh version not recorded45–1215
Paged.js on Chrome 11536––1314

The other 7 lessons use one engine’s proprietary extensions, and Jung runs each only on that engine:

LessonEngineJungReflowPDF
Antennahouse Autofit TextAntenna HouseOKUnsupp.
Antennahouse multiple columns with sidenotesAntenna HouseOKUnsupp.
PDFreactor autofit textPDFreactorOKUnsupp.
PDFreactor mathjaxPDFreactorOKOK
PDFreactor multicol with dual sidenotesPDFreactorOKUnsupp.
PDFreactor multicol with sidenotesPDFreactorOKUnsupp.
Prince table tricksPrinceOKUnsupp.

All lessons on all engines, with a link to each PDF.

Introduction

Advanced

Special

Not printed, because they are written in XML: Two column with author box.

JavaScript, MathML and XML

Not printed, because they are written in XML: XML and XML images.

Written for one engine

Every lesson, every engine

Each result links to that engine’s PDF: ours on this site, the others in Jung’s repository. Where Jung wrote a note on a result, hover the result to see it; screen readers announce it. Spec* differs from the lesson where we follow a rule of the spec; the lesson’s card above cites the rule.

LessonReflowPDFPDFreactorPrinceAntenna HouseWeasyPrintVivliostyleBFO PublisherTypeset.shPaged.js
BasicOKOKOKOKOKOKOKOKOK
Chapter numberingOKOKOKOKOKOKOKOKOK
Cross referencesOKOKOKOKOKOKOKOKError: improper chapter numbers
CSS transformationsSpec*OKOKOKOKOKOKOKOK
CSS transformations2OKOKOKOKOKOKOKOKError: issue with background color
CSS transformations3OKOKOKOKOKOKOKOKOK
FlexOKOKOKOKOKOKOKOKOK
FontsOKOKOKOKOKOKOKOKOK
FootnotesOKOKOKOKOKOKOKOKError: improper counters
Editable PDF FormsOKOKOKOKError: partly broken PDF forms support (no support for radio element)UnsupportedOKOKUnsupported
GridOKOKUnsupported: no support for CSS gridOKOKOKUnsupported: no support for CSS gridOKError: rendering error
HyphenationOKOKOKOKOKUnsupported: no hyphenation supportError: BFO Publisher supports hyphenation according to the document. However, it requires an explicit loading of TeX hyphenation files (expectation: should be build-in as with the other tools)OKUnsupported: no hyphenation support
ImagesSpec*OK: Supports PDF as image formatOK: Does not support PDF as image formatOK: Supports PDF as image formatOK: Does not support PDF as image format. Issue with SVGOK: Does not support PDF as image formatOKOK: Supports PDF as image formatOK: Does not support PDF as image format
letter-spacingOKOKOKOKOKOKOKOKOK
CSS list styleOKOKOKOKOKOKOKOKError
CSS list style (2)OKOKOKOKOKOKOKOKOK
CSS list styles (3)OKOKOKOKOKOKOKOKError
Multi columnsOKOKOKOKOKOKOKOKOK
Named pagesOKOKOKOKOKOKOKOKError: improper orientation on page #2, empty page #4
Page areasOKOKOKOKOK: page areas are fully support. However the top-center and bottom-center rendering looks a bit weirdOK: Weird: grey color for @top-center and @bottom-centerOKOKOK
Page numbersOKOKOKOKOKOKOKOKOK
PaginationOKOKOKOKOKOKOKOKOK
PositioningOKOKOKOKOKOKOKOKOK
Right to leftOKOKOKOKOKOKOKOKOK
Running elementsOKOKOKOKOKOKOKUnsupported: no support for running elementsOK
TablesOKOK: Uses repeating header and footerOK: Uses repeating header and footerOK: Uses repeating header and footerOKOK: Uses repeating header and footerError: broken overlong tableOKError: Second table rendering incomplete
Archive PDFsOKOK: full support for PDF/AOK: full support for PDF/AOK: full support for PDF/AOK: full support for PDF/AUnsupported: no PDF/UA supportOKUnsupported: no PDF/UA supportUnsupported: no PDF/UA support
Repeated backgroundOKOKOKOKOKOKOKOKError: improper scaling of background, margins not respected
Border modelOKOKOKOKOKOKOKOKOK
Box stylingOKOKOKOKError: incomplete outer borderOKOKOKOK
Vertical centeringOKOKOKOKError: improper box heights compared to other outputOKOKOKOK
CMYKOKOKOKOKUnsupportedUnsupportedOKOKUnsupported
CSS gradientsOKOKOKOKOKOKOKOKOK
z-indexOKOKOKOKOKOKOKOKOK
z-index 2OKOKError: improper stacking order (right green box must be above the red box)Error: improper stacking order (right green box must be above the red box)OKOKOKOKOK
A CSS deerSpec*OKPartly: Sun is missingErrorErrorErrorError: empty second pageError: no backgroundOK
Fonts emojiOKOKOKOKOKOKOKOKOK
Footnotes multi columnsSpec*Partly: no support for footnotes (within the same column) within a multi column environmentOKOKOKOKError: rendering errorsOKOK
Hyphenation long wordsOKOKOKOKOKUnsupported: no hyphenation supportOKOKUnsupported: no hyphenation support
LigaturesOKUnsupported: does not support ligatures in version 11OKOKPartly: unable to disable ligatures for serif fontOKOKUnsupportedOK
Metadata PDF/UAOKOK: full support for PDF/UA and tagged PDFsOK: full support for PDF/UA and tagged PDFsOK: full support for PDF/UA and tagged PDFsOK: PDF/UA supportUnsupported: no PDF/UA supportOK: full support for PDF/UA and tagged PDFsUnsupported: no PDF/UA supportUnsupported: no PDF/UA support
Multiple backgroundsOKOKOKOKOKOKOKOKOK
Named strings (set-content property)OKOKOKOKOKOKOKUnsupportedError
PDF bookmarksOKOKOKOKOKError: no PDF bookmarks generatedOKOKOK
PDF linksOKOKOKOKOKOKOKOKOK
attr() functionOKErrorOKOKErrorOKOKUnsupportedError
Using set-contentOKOKErrorOKOKOKError: improper behaviorUnsupportedError
Using text-shadow propertyOKOKOKOKUnsupported: no text-shadow property supportOKOKUnsupported: no text-shadow property supportOK
Texts rotated 360 degreesOKOKOKPartly: different disc size compared to all other convertersOKOKOKPartly: different disc size compared to all other convertersOK
TypographyOKPartly: no support for box-shadowOKOKPartly: no support for box-shadowOKOKOKUnsupported
Account statement exampleSpec*OKOKOKOKOKError: render process throws errorOKError: conversion error, no PDF generated
Blank pagesOKOK: generates extra right blank pageOK: generates extra right blank pageOK: empty last page missingOK: empty last page missingOKOKOK: only one empty, blue page instead of threeOK: empty last page missing
Rainbow using box-shadowOKOKErrorOKErrorOKOKOKOK
Complex CSSOKOKOKPartly: "←" missingOKOKOKErrorOK
Darth Vader as CSSOKOKOKErrorOKOKOKOKOK
Image scalingOKOKOKOKOKOKOKOKOK
Two column with author boxUnsupportedOKOK: no support for baseline gridOKUnsupportedUnsupportedOKUnsupportedUnsupported
Chart JSOKOKUnsupportedUnsupportedUnsupportedOKUnsupportedUnsupportedUnsupported
Flotr2 JSOKOKError: does not workUnsupported: does not work, no Javascript supportUnsupported: does not work, no Javascript supportOKUnsupported: does not work, no Javascript supportUnsupported: does not work, no Javascript supportUnsupported: does not work, no Javascript support
Mathml nativeUnsupportedUnsupported: No native MathML support in PDFreactor 10. Supports MathJAX nowPartlyOKUnsupported: No native MathML supportOKOKUnsupported: No native MathML supportUnsupported: No native MathML support
Mathml torture testOKUnsupported: No native MathML support in PDFreactor 10. Supports MathJAX nowPartly: various rendering and layout errorsPartly: some layout issuesUnsupported: No native MathML supportOKOKUnsupported: No native MathML supportUnsupported: No native MathML support
XMLUnsupportedOKOKOKUnsupportedUnsupportedOKUnsupportedUnsupported
XML imagesUnsupportedOK: Proprietary CSSOKOKUnsupportedUnsupportedOKUnsupportedUnsupported
Antennahouse Autofit TextUnsupportednot runnot runOKnot runnot runnot runnot runnot run
Antennahouse multiple columns with sidenotesUnsupportednot runnot runOKnot runnot runnot runnot runnot run
PDFreactor autofit textUnsupportedOKnot runnot runnot runnot runnot runnot runnot run
PDFreactor mathjaxOKOKnot runnot runnot runnot runnot runnot runnot run
PDFreactor multicol with dual sidenotesUnsupportedOKnot runnot runnot runnot runnot runnot runnot run
PDFreactor multicol with sidenotesUnsupportedOKnot runnot runnot runnot runnot runnot runnot run
Prince table tricksUnsupportednot runOKnot runnot runnot runnot runnot runnot run

Lessons © Andreas Jung, ZOPYX, published with his permission; titles are his. Playground copies omit scripts, files over 4 MB, and fonts we may not redistribute. The PDFs were printed on 8 November 2026 with ReflowPDF Engine build c01f2f7a6, the build the playground runs.