Created Date: 01 Aug, 2022 11:47
Last Modifed Date: 01 Aug, 2022 11:47
This is a regular quarterly update to Mako. Introduced in this version is support for OpenXPS, for input and output, and another PDF ISO standard, PDF/A-3b for output. Other improvements include enhanced alpha channel generation that adds 16-bit rendering with spot color support, and new safeguarding against accidental overwriting of an open assembly.
New and improved features
Support OpenXPS (input, output)
From the beginning, Mako has featured support for Microsoft’s XPS (XML Paper Specification) format. Mako 6.6.0 adds support for OpenXPS. Based on XPS, OpenXPS is an open format standardized by Ecma International, a standards organization for communication and information systems.
Although it has been around for more than a decade, OpenXPS has recently become more popular; for example, the Microsoft XPS Document Writer v4 in Windows 11 offers OpenXPS (using the file extension
How to use in Mako
A new input enum,
The new classes offer the same methods and properties of their XPS equivalents.
The sample makoconverter has been updated to support OpenXPS, recognized by the file extension .oxps.
Detect attempts to overwrite an open assembly
A customer was puzzled that Mako didn’t immediately error when they were overwriting a PDF file on disk when they had the assembly open, instead failing at another point, after which the PDF was trashed.
To prevent this, Mako now tracks files that have been opened on behalf of input sources. Attempts to open a file on disk for write are checked; if the file is open, an error is thrown.
As many inputs are opened using a stream, not a file name, a method is needed to find out from a stream what file it has open. A new API,
New exception error codes are introduced, for errors when opening for read (
Discovering font resources contained in or referenced by a given PDF
The response to a support request concerning this subject led to the creation of a new simpleexample, charactermap.cpp. It illustrates basic font glyph listing, using the character map
Support predictors when partially decompressing flate-compressed images
In Mako 6.5.0, changes were made to improve the handling of flate-compressed images, by avoiding decompression of the entire image when only a single or a few scanlines were requested.
Building on that work, this release sees further improvements to Mako’s ability to decompress only part of a flate (zip) compressed image, by supporting predictors, a means to store only the difference between one block of data and the next. Refining partial decompression in this way increases efficiency and improves performance.
Add PDF/UA example in Python
A Python equivalent of the pdfuacreation sample is added to a simpleexamples folder found in the Python distribution (pdfuacreation.py).
Ensure PDF to PDF CJK CID font repeatability for unembedded fonts
Until now, PDF-to-PDF processing with Mako would always embed CID fonts even if they were not present in the source PDF, by creating appropriate subsets of the Nimbus Global font from Mako’s internal resources.
With this change, subsets are no longer generated, meaning that the output PDF is closer in profile to the original. Careful consideration is given to preserving CIDs (Character IDs) in the output to ensure a correct result.
Added in this release is a new
Which is “6.6.0”, split into “6” (major), “06” (minor), and “00” (revision), represented as a single integer value. Using a value in this way makes it easy to test the current version; for example:
Drop Debian Stretch
Debian LTS support for Debian 9 “Stretch” ended on June 30, 2022. A Mako build based on this Linux version is dropped from this and future Mako releases.
MAKOSUP-10967 & MAKOSUP-10972 Incorrect handling of a spot color labeled as a process color
Two customers reported similar problems, which in part were due to a spot color having a name normally reserved for a process color (in this case Red). In principle this should not have been a problem, but some other incorrect assumptions had to be addressed. The problem for both support issues was solved, and correct separations are produced.
MAKOSUP-10974 Clipping Path Consideration when extracting text
When extracting text from a PDF, the customer found that text outside a clipping path was also extracted.
The response to this support request was the creation of a new simpleexample, cliptesting.cpp. The example walks the Mako DOM, keeping track of the clipping area in use, and extracting text content for everything that is clipped in. It also serves as a “best practice” example of how to manually traverse the DOM, tracking state, and walking through nested forms.
It is also available in C# and Java.
MAKOSUP-10975 Document properties values are unassigned for indirect values
A customer reported that Mako was retrieving metadata incorrectly. The problem was due to indirect objects that were not fully resolved. Now fixed.
MAKOSUP-10986 Alpha channel with 16 bits
Mako 6.1.0 introduced a feature to generate an alpha channel when rendering transparency. It was limited to process color separations, 8 bits per channel (8-bit rendering) only.
In this version, the feature is extended to support 16-bit rendering. Additionally, spot color separations can now be specified for rendering in both RGB and CMYK.
MAKOSUP-11002 File causing SIGSEV Failure during Thumbnail process
The problem was traced to an integer overflow in low memory conditions. Now fixed, and the customer exhibit renders correctly.
MAKOSUP-11008 Save as PDF/A-3b with source file embedded
This release adds support for an extra PDF/A standard, PDF/A-3b. A new PDFVersion enum is introduced,
An important difference to PDF/A-2b is that this standard permits arbitrary file attachments, rather than only PDF/A PDF attachments. This met the customer’s requirement, which was to embed a Microsoft Word (
MAKOSUP-11017 Rendering of specific PDF takes very long
Improvements to Mako’s code for rendering
MAKOSUP-11018 Rendering the attached PDF only creates white pages
The solution to this problem required fixing a renderer clipping issue, triggered by an oddly constructed PDF.
MAKOSUP-11026 Redact does not remove OCR text in background
A minor change ensures text that is in effect invisible is also removed by the redaction process.
MAKOSUP-11040 Disappearing glyphs
Fix an issue reported by the customer with the
MAKOSUP-11046 Missing characters
Fixed an issue with the removal of removing duplicate
Exception thrown when rendering a JPEG2K image
Fix issues and improve decoding of a JPEG 2000 image in a PDF.