Release Notes for Prince 15

Prince 15.3

February 2024

Bug Fixes & Improvements

Prince now detects infinite loops when resolving cross-references.

Fixed issue where form controls are treated as having the wrong min/max width.


Changed the default behaviour for certificate revocation checks to ignore failure due to missing or offline distribution points for the revocation check lists. This can be disabled with the new command-line option --no-ssl-revoke-best-effort. This option only has effect on Windows.

Fixed issue affecting Prince on Windows if binary path contains non-ASCII characters.

Prince 15.2

October 2023

Font Bug Fixes & Improvements

Improved subsetting of OTF fonts (OpenType with CFF outlines).


Fixed an issue where the background and styling on iframe body and html elements could be lost.

Allowed prince-pdf-tag-type: Formula | Figure to apply to non-image elements.


Updated libwebp version to fix CVE-2023-4863.

Updated libcurl version to fix CVE-2023-38545.

Fixed an issue affecting the JavaScript in operator and symbol values.

Added support for the HTML wbr element.

Added a workaround for an issue where table borders could affect Acrobat Reader's "Export to Excel" feature.

Prince 15.1

February 2023

Font Bug Fixes & Improvements

Revert to the 8-bit "standard encoding" approach used for text in Prince 14 as the CMap dictionary approach is unfortunately not supported for PDF editing in Acrobat.

Fix issue where some fonts with symbol encoding cmaps could use the wrong glyphs when subset.


Adding Note and Reference PDF tags to the prince-pdf-tag-type CSS property.

Prince 15

November 2022


  • Create PDF Forms
  • Add PDF Comments/Annotations
  • Javascript ES6 improvements
  • WebP and AVIF image support
  • Support for Khmer and Sinhala fonts
  • Universal binary for MacOS on Apple Silicon

PDF Features

PDF forms can be created from HTML forms with the --pdf-forms option.

PDF comments/annotations can be added using the prince-pdf-annotation CSS properties.

JavaScript Support

Support for ES6 lexical scopes with let/const declarations.

Support for the ES6 Map and Set classes.

Support for the ES6 Symbol class and values.

Support for ES6 iterators.

Support for ES6 for-of loops.

Support for ES6 arrow functions.

Support for the JavaScript String fromCodePoint method.

Support for the JavaScript String codePointAt method.

Support for the JavaScript Object.getOwnPropertySymbols method.

Support for the JavaScript Element classList property and DOMTokenList interface.

Changed behaviour of regexp literals to match recent JavaScript specs.

Added stubs for the XMLHttpRequest getResponseHeader and getAllResponseHeaders methods.


Support for the WebP image format.

Support for the AVIF image format.


Support for Unicode 15.

Support for the Sinhala script.

Support for the Khmer script.

Applied Unicode mark reordering to more scripts, not just Arabic and Indic scripts.

Applied correct mark decomposition and reordering for Lao script.

CSS Support

Support for fragmentation and correct sizing for multi-line flex row containers (flex-wrap).

Support for align-self: stretch for flex items in a fragmented flex row container.

Support for wavy and double text-decoration styles.

Support for the CSS text-decoration-line/color/style properties.

Support for the text-underline-position property.


Added the options --ssl-no-revoke and --ssl-revoke-best-effort for Windows.

Added the option --fail-stripped-transparency to fail when transparent images are used with a PDF profile that does not support transparency.

Added the option --fail-invalid-license.

Added the option --pdf-xmp-metadata to include the HTML metadata in an XMP packet even when not required by the PDF profile. (also available via the PDF.xmpMetadata property and and the pdf-xmp-metadata job field).

Renamed the --cookiejar option to --cookie-file.


Provided a universal binary for MacOS that supports Apple Silicon and Intel architectures.

Support for the HTML noscript element.

Improved the appearance of HTML select elements.

Improved the appearance of HTML radio buttons when PDF Forms are not enabled.

Bug Fixes & Improvements


Disabled HTML iframes by default and added an --iframes option to enable them.

Prevented prince-pdf-script and prince-pdf-event-scripts CSS properties from accessing files or URLs and added new command-line options for this purpose.


Improved performance of style sheets with many class selectors.

Fixed bug in flex column layout that could lead to overlapping content.

Improved treatment of break-before: avoid so that it can pull partial content from the previous block instead of pulling the entire block to the next page.

Fixed bug affecting multi-column layouts with zero line-height.

Fixed column width issue with auto table layout in shrink-to-fit contexts, like nested tables and floats.

Fixed issue with box-decoration-break: slice and spanning cells in tables with collapsing borders.

Better support for relatively positioned table cells.

Preserved leading newlines for white-space: pre, pre-wrap, and pre-line.

Improving handling of trailing spaces for white-space: pre-wrap.

Fixed incorrect positioning of absolute positioned content within inline blocks.

Fixed incorrect positioning of absolute positioned content within relatively positioned inline elements.

Fixed incorrect paragraph breaks caused by absolutely positioned blocks inside inline content.

Images & SVG

Improved color space handling of PNG images with sRGB/cHRM/gAMA chunks but not iCCP chunks.

Paletted PNGs are now embedded as indexed color images instead of expanded.

Avoided unnecessarily re-rasterising SVG masks where possible.


Improved the performance of complex font shaping.

Fixed issue where font-variant: prince-opentype(...) would disable Arabic and Indic shaping.

Fixed performance issue affecting some CFF fonts such as Noto Sans SC.

Fixed below-base mark reordering for Thai script.

Fixed bug affecting rare combination of OpenType GPOS positioning features.

Renamed embedded font subsets to avoid name clashes in documents that include multiple subsets of the same font.


Fixed bug where the JavaScript Function.bind method would not support constructor invocation or arguments.callee properly.

Fixed JavaScript issue where changing the length of large sparse arrays could be very slow.

Speed up JavaScript DOM live node lists returned by getElementsByTagName and getElementsByClassName.

Fixed the enumeration order of JavaScript properties with integer keys.

Fixed issue where automatic semicolon insertion could affect the use of JavaScript keywords like return as property names.

Tagged PDF

Fixed performance issue affecting tagged PDF.

Avoided inserting extra P structure element in tagged PDF for paragraphs containing only figures and/or floats.

Avoided generating some unnecessary Span elements in the tagged PDF structure tree.

Fixed bug where run-in elements could break the tagged PDF structure tree.


Fixed crash affecting some very large documents.

Workaround Acrobat issue triggered by certain uses of bfrange in PDF ToUnicode mappings.

Fixed the XMP serialisation of the meta keywords value.

See the release history for earlier versions of Prince.