| 2026-10-18 | v4.2.0 v4.0.24 | Improvement | generateMulticolumn() (and the -multicolumn command line option / multicolumn taglib attribute) now produces multi-column PDF output as in PD4ML v3: the content flows through the given number of columns per page, a page break moves to the next column, <pd4ml:page.break multicolumn="true"> starts a new page, page headers and footers are placed once per page and $[page] / $[total] count PDF pages. (HELPD-778, HELPD-795, HELPD-805) |
| 2026-10-17 | v4.1.2 | Bug fixed | ported all fixes from v4.0.24’s Large-scale backlog cleanup to v4.1.2 |
| 2026-10-17 | v4.0.24 | Bug fixed | PDF and XMP dates include the daylight saving time offset (e.g. +02'00' under CEST). |
| 2026-10-17 | v4.0.24 | Bug fixed | PDF/A: setting only pd4ml.document.date sets the XMP dates too, so the output no longer fails veraPDF rule 6.7.3-1. |
| 2026-10-17 | v4.0.24 | Bug fixed | Text inputs (text, password, email, search, tel, url, number) without an explicit width now get the browser's default width: size (default 20) average characters plus the widest-character allowance, plus padding and border; they used to be too narrow by default and too wide with a size attribute. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | Unstyled text inputs now use the browser default style (13.333px font, 1px 2px padding, a 2px border drawn as a 1px gray frame), so they get the same size as in browsers; padding and border are no longer added twice to their width, and a border with border-style: none no longer counts toward an input's size. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | Flex items sized to their content no longer take the full container width when they contain an element with a percentage width, min-width or max-width; as in browsers, the percentage counts as auto while the item is measured and then resolves against the item's final width. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | Table cells: the max-width of blocks in cells is applied, percentage margins in fixed-width cells no longer widen the table, a fixed-width column is as wide as its width (at least its min-content width) instead of its content's max-content width, and spanning cells (colspan) over fixed-width columns are no longer ignored. (HELPD-647) Bug fixed: A table-layout: fixed table with a percentage width inside an auto-width table cell now fills the cell, as in browsers, instead of collapsing it. (HELPD-647) Bug fixed: Floats, inline-blocks and absolutely positioned boxes whose content wraps (because of the available width or their max-width) now take that full width instead of the width of their widest line, so aligned text lines up with the box edge, and inline elements no longer lose their container's margins, borders and paddings twice from their available width. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | In quirks mode (no doctype, or a legacy one) tables no longer inherit the font size, weight, style, variant, line height and white-space of their surroundings, as in browsers; for example, text in a table inside <font size=5> now has the default size. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | A float with a percentage width, min-width or max-width inside a float, inline-block or absolutely positioned box no longer makes that box too wide or too narrow: as in browsers, the box sizes itself with the float at auto width and the percentage resolves against the result. (HELPD-647) Bug fixed: A float, inline-block, absolutely positioned box or auto-width table cell containing text followed by a float on the same line is now wide enough for both, so the text no longer wraps below the float. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | Text in the built-in Helvetica, Times and Courier fonts (no TTF embedding) is now placed on the same baseline as the browser's Arial, Times New Roman and Courier New, about 1pt lower than before, so it is vertically centered in table cells as on screen. (HELPD-769) |
| 2026-10-17 | v4.0.24 | Bug fixed | A block with a percentage min-width or percentage horizontal margins, a percentage or auto-width <hr>, a block with a width of 100% or more, or a percentage-width table inside a float, inline-block, absolutely positioned box or auto-width table cell no longer stretches that box to the page width or beyond: as in browsers, the box sizes to its content and the percentages resolve against the result. (HELPD-647) Bug fixed: Horizontal rules (<hr>) now follow the browser box model: a percentage or fixed width is the width of the line, with borders and padding added on top, a rule without a width fills its container including its borders instead of overflowing it by 2px, and rules in DOCX and RTF output get their exact specified width. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | A rounded-corner cell background (border-radius) no longer shows a faint seam next to a square neighbour with the same background. (HELPD-601) |
| 2026-10-17 | v4.0.24 | Bug fixed | In the built-in SVG renderer, text-anchor (middle, end) is now applied to a <text> element without an x attribute, so end-anchored or rotated (vertical) SVG text is no longer shifted off the image or missing. |
| 2026-10-17 | v4.0.24 | Bug fixed | A block with a percentage width, max-width or padding inside a float, inline-block, absolutely positioned box or auto-width table cell no longer stretches that box to the page width or beyond: as in browsers, the box sizes to its content and the percentage resolves against the result. Bordered or padded blocks inside floats no longer wrap their text. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | A word that continues across an inline element boundary (for example <em>word</em>. or <a>link</a>,) is no longer split at the line end, so lines no longer start with stray punctuation. (HELPD-791) |
| 2026-10-17 | v4.0.24 | Bug fixed | Form controls (input, select, textarea, button) and images with a percentage width inside a float, inline-block, absolutely positioned box or auto-width table cell no longer stretch that container to the full available width; as in browsers, the container is sized to the element's natural width and the percentage applies to it, and an <img width="100%"> in an auto-width table cell no longer disappears. (HELPD-647) |
| 2026-10-17 | v4.0.24 | Bug fixed | Title and page number alignment in headers and footers defined with the v3 API or the JSP taglib (PD4PageMark) is no longer overridden by document CSS such as td { text-align: left; }. (HELPD-530) |
| 2026-10-17 | v4.0.24 | Bug fixed | In RTF output, empty table cells without padding are no longer written with a zero width, which made MS Word show the document as a single page and fail to export it to PDF. (HELPD-519) |
| 2026-10-17 | v4.0.24 | Bug fixed | Each embedded TrueType font subset in a PDF now gets its own subset tag, so documents using emulated (synthetic) italic or bold, several sizes of one font, or the pd4ml.document.id property no longer contain different font programs with the same name, which made Adobe Acrobat stop rendering the document. (HELPD-848) |
| 2026-10-17 | v4.0.24 | Bug fixed | DOCX output of list items containing blocks (tables, nested lists, empty blocks, blocks after links) is well-formed and opens in Word; table grid columns are never zero-width. (HELPD-519) |
| 2026-10-17 | v4.0.24 | Bug fixed | Concurrent conversions with fonts loaded from the classpath (useTTF("java:...")) no longer use partially written or empty temporary font files, which made text lose its font. (HELPD-554) |
| 2026-10-17 | v4.0.24 | Bug fixed | Custom metadata added with addMetadata() keeps PDF/A output valid: custom properties get a PDF/A extension schema description, and hidden properties are written in their own namespace. (HELPD-283) |
| 2026-10-17 | v4.0.24 | Bug fixed | The PDF document language (/Lang) is taken from <html lang> when <body> has no lang attribute, instead of always "en". (HELPD-716) |
| 2026-10-17 | v4.0.24 | Bug fixed | In collapsed-border tables, 1px cell borders next to rowspan cells are no longer hidden by neighbouring cell backgrounds, and a table moved to the next page keeps its top border. (HELPD-792) Bug fixed: In table cells, the top margin of the first block and the bottom margin of the last block (e.g. <p style="margin-bottom: 8pt">) now count as in browsers, so table rows are no longer tighter than on screen; only in quirks mode (no or a legacy doctype) are the default margins of a leading or trailing paragraph, heading or list dropped, as browsers do. (HELPD-792) |
| 2026-10-17 | v4.0.24 | Bug fixed | With the v3-compatible API, a page background image or color and a watermark set on a PD4PageMark without a title or page number template are no longer ignored. (HELPD-592, HELPD-593) |
| 2026-10-17 | v4.0.24 | Bug fixed | SVG stroke-dasharray is honored in PDF output: dash and gap lengths follow the SVG, a zero-gap pattern (e.g. "6 0") draws a solid line, and solid strokes after dashed ones stay solid. (HELPD-423, HELPD-497) |
| 2026-10-17 | v4.0.24 | Bug fixed | Arabic text in fonts without Arabic presentation forms (e.g. Haradh) is shaped with the font's own layout tables instead of being shown as ? or in a fallback font. (HELPD-710) |
| 2026-10-17 | v4.0.24 | Bug fixed | Thai and Lao text is shaped with the font's layout tables, so tone marks stacked above vowels are positioned correctly instead of overlapping or being detached. (HELPD-521) |
| 2026-10-17 | v4.0.24 | Bug fixed | In left-to-right paragraphs, the space between a right-to-left word and the following left-to-right text stays between them instead of being moved before the right-to-left word. (HELPD-431) |
| 2026-10-17 | v4.0.24 | Bug fixed | Absolute font file paths and URLs in pd4fonts.properties are used as they are instead of being resolved against the font directory. (HELPD-465) |
| 2026-10-17 | v4.0.24 | Bug fixed | An element with display: table-cell inside a table cell no longer breaks the table structure, and percentage heights and max-width of floats and flex items resolve against the correct container. (HELPD-579) Bug fixed: With box-sizing: border-box, percentage heights and min/max-heights now include the box's padding and border as in browsers, max-height also limits an explicit height, and percentage heights resolve against the parent's content height. (HELPD-579) |
| 2026-10-17 | v4.0.24 | Bug fixed | A heading with page-break-after: avoid moves to the next page together with the following block instead of being left alone at the bottom of a page. (HELPD-307) |
| 2026-10-17 | v4.0.24 | Bug fixed | Text marked white-space: nowrap stays on one line in table cells, also when it is split by font fallback or nested inline elements (e.g. "€ 30,50"). (HELPD-448) |
| 2026-10-17 | v4.0.24 | Bug fixed | A text <input> inside an absolutely positioned element keeps its default or explicit width instead of being painted as a sliver. (HELPD-780) |
| 2026-10-17 | v4.0.24 | Bug fixed | A width: 100% table inside a box with margins, borders or padding is no longer narrowed by subtracting the box's spacing twice. (HELPD-843) |
| 2026-10-17 | v4.0.24 | Bug fixed | <pd4ml:page.break ifSpaceBelowLessThan> is honored on pages that end with an explicit page break, so a footnote no longer lands on the next section's page. (HELPD-838) |
| 2026-10-17 | v4.0.24 | Bug fixed | A <pd4ml:page.footer> or header defined further down in the document applies from the page where it is defined instead of appearing on page 1. (HELPD-834) |
| 2026-10-17 | v4.0.24 | Bug fixed | In RTF output, a styled <hr> is drawn in its CSS border or background color instead of always black. (HELPD-611) |
| 2026-10-17 | v4.0.24 | Bug fixed | In RTF output, sidebar-style blocks with a background and padding are rendered as one shaded box with their padding, without extra white space. (HELPD-817) |
| 2026-10-17 | v4.0.24 | Bug fixed | Absolutely positioned content taller than a page is paginated completely again instead of being cut off after the in-flow content ended. (HELPD-474) |
| 2026-10-17 | v4.0.24 | Bug fixed | merge() no longer fails with "Parsing of PDF failed" (ClassCastException) on PDFs whose document information (/Info) or outline entries are stored as indirect objects. (HELPD-145) |
| 2026-10-17 | v4.0.24 | Bug fixed | Encrypted PDFs without a document ID (/ID) are decrypted correctly when loaded, so saving or overlaying them (e.g. adding a watermark) no longer produces empty pages. (HELPD-706) |
| 2026-10-17 | v4.0.24 | Bug fixed | In RTF output, paragraphs (<p>, <div>) inside table cells and list items are written as regular paragraphs again instead of nested tables, so list bullets stay on the same line as their text. (HELPD-814, HELPD-815) |
| 2026-10-17 | v4.0.24 | Bug fixed | In RTF output, consecutive block elements (e.g. <div>) inside a table cell, including page header/footer tables, are separated by a paragraph break again instead of being merged onto one line. (HELPD-724, HELPD-725, HELPD-726, HELPD-727, HELPD-816) |
| 2026-10-17 | v4.0.24 | Bug fixed | Text in <input> and <button> fields now uses the useTTF() font fallback, so non-Latin values (e.g. Hindi) no longer show as boxes. (HELPD-384, HELPD-629) |
| 2026-10-17 | v4.0.24 | Bug fixed | SVG viewBox values with decimals no longer cause a NumberFormatException, and position: absolute / fixed boxes are painted above the content that follows them instead of being covered by table borders. (HELPD-360) |
| 2026-10-17 | v4.0.24 | Bug fixed | SVG images that the Batik renderer cannot process (e.g. with an unresolvable clip-path URL) are now drawn with the built-in SVG renderer instead of being omitted. (HELPD-359) |
| 2026-10-17 | v4.0.24 | Bug fixed | Blocks with an explicit small or zero height whose content draws nothing (e.g. connector lines built from empty <div> elements) are no longer stretched to a full line height. (HELPD-280) Bug fixed: Inside table cells, explicit widths and margin: 0 auto centering of blocks are honored, absolutely positioned boxes in centered rows are placed correctly, and fixed-height boxes holding only fixed-height blocks keep their height. (HELPD-280) Bug fixed: An absolutely positioned block placed by its static position after inline text now starts below that line, a float's top margin no longer also pushes its parent down, and a block with a fixed height keeps it and lets its content overflow, as in browsers. (HELPD-280) |
| 2026-10-17 | v4.0.24 | Bug fixed | Inline <svg> elements without an xmlns attribute are now rendered instead of being left blank. (HELPD-275, HELPD-256, HELPD-846) |
| 2026-10-17 | v4.0.24 | Bug fixed | Table cells spanning several fixed-width columns (colspan) no longer overlap or clip their content; their minimum width is now distributed over the spanned columns. (HELPD-224) |
| 2026-10-17 | v4.0.24 | Bug fixed | :nth-child() and other structural selectors now work for table rows wrapped in misplaced elements (e.g. <div> inside <tbody>), as in browsers. (HELPD-336) |
| 2026-10-17 | v4.0.24 | Bug fixed | In RTF output, list items with several blocks keep their bullet on the first line, and an item following an inline list item gets its own bullet. (HELPD-867) |
| 2026-10-17 | v4.0.24 | Bug fixed | Fractional lengths (e.g. width: 4.0002%) are no longer rounded to whole units when element styles are shared, so percentage column widths are applied exactly. (HELPD-268) |
| 2026-10-12 | v4.1.1 | RELEASE | v4.1.1 is released and available for download |
| Bug fixed | adapted all actual bugfixes and improvements from v4.0.23fx2 branch | ||
| 2026-10-12 | v4.0.23fx2 | RELEASE | v4.0.23fx2 is released and available for download |
| Bug fixed | Fixed wrong collapsed border widths for a <tfoot> placed before <tbody>: a thick top edge and a thin bottom edge. | ||
| Bug fixed | Merging tagged PDF documents (PDF/UA, PDF/A-2a) keeps the structure tree of every merged document, so the result remains properly tagged. (HELPD-528) | ||
| Improvement | Added support for OpenType (.otf) fonts with CFF outlines, fixed incorrect font metrics in PDF font descriptors, and made embedTTFs(false) stop embedding fonts. | ||
| Bug fixed | page header/footer redefinitions taking effect on the wrong page, and a possible hang or lost content when the header and footer are taller than the page. | ||
| Improvement | Added support for numeric font weights (e.g. 300, 500, 600) with @font-face fonts. The face with the closest matching weight is now chosen, as in browsers, and bold is emulated when no heavy enough face is declared. | ||
| Bug fixed | The top margin of the first block no longer depends on the license type: the automatic evaluation watermark no longer keeps the margin that is dropped otherwise. (HELPD-719) | ||
| Bug fixed | text being partially lost on a line that starts exactly at the top of a new page and contains subscripts or superscripts. | ||
| Bug fixed | A noref footnote placed right before a page break is printed on the page where it occurs instead of the next page. (HELPD-728) | ||
| Bug fixed | Fixed some CJK characters being drawn and copied as unrelated symbols (e.g. 用 as 🆍) with fonts like Noto Sans SC. | ||
| Bug fixed | Fixed PDFs that Acrobat refused to open when the JVM ran in a locale such as sv_SE, which writes a Unicode minus sign in numbers. | ||
| Bug fixed | Fixed spaces between words sometimes disappearing ("as task" → "astask") at certain page widths, in justified text and with ligatures enabled. | ||
| Improvement | Some large documents now convert about 2× faster, and parallel conversions run about 30% faster (tested with 6 threads). | ||
| Bug fixed | Redefining the header after a PD4ML page break in HTML results in content clipping in the generated PDF document in some cases. | ||
| 2026-09-07 | v4.1.1 v4.0.23fx2 | Improvement | Static Analysis & Code Quality Hardening. More details... |
| 2026-09-02 | v4.1.1 | Bug fixed | DOCX Block's background applies only to its content, not to the block itself. |
| Bug fixed | DOCX Table headers are not repeated after a page break. | ||
| Bug fixed | DOCX Incorrect spacing between headings when they are located at different block nesting levels. | ||
| Bug fixed | RTF DOCX In the case of multi-nested content blocks, indentation is not applied in all instances. | ||
| Bug fixed | DOCX The image does not display if the value of the src attribute of the <img> tag ends in a trailing slash. | ||
| Bug fixed | DOCX Wrong unit-conversion constant in DocxDocument.drawImage() caused incorrect image scaling. | ||
| Bug fixed | DOCX superscript link causes unwanted line breaks | ||
| Bug fixed | DOCX invalid valign value may result in corrupted document | ||
| Bug fixed | DOCX line of text may have incorrect full justification, if immediately followed by a line break | ||
80 (cached 2026-10-18 15:39)
