Mako 6.5.0 Release Notes
Introduction
Mako 6.5.0 is a full product release that introduces some new and improved features, as well as fixes for identifiable support issues, labelled MAKOSUP-XXXXX.
New features include:
- improved support for PDF/UA
- improved quality and performance of Mako’s vector-based transparency flattener
- control over page labels
New or improved
MAKO-3845 | PDF accessibility and PDF/UA | ||||||||||||||||||||||
PDF/UA (PDF/Universal Accessibility), formally ISO 14289, is an ISO standard for accessible PDF technology. When used with appropriate software, a PDF conforming to this standard ensures accessibility for people with disabilities who use assistive technology such as screen readers, screen magnifiers, joysticks and other technologies to navigate and read electronic content. This release of Mako enables a developer to generate or modify PDF content to conform to this standard, adding a new PDF output preset, PDF/UA. Unlike other PDF output parameters and presets in Mako that specify PDF ISO standards, such as PDF/X-4 or PDF/A-2b, the PDF/UA preset does not guarantee a compliant PDF/UA file. It simply creates the conditions for compliance, but the content must be tagged correctly for an output file to pass an independent compliance check, such as that offered by veraPDF. A complete example is added to the simpleexamples folder in the SDK distribution. Look for pdfuacreation.cpp. This creates a PDF page from scratch, and shows how text, images and tables are structure-tagged in accordance with the PDF/UA standard. You can also find it here on GitHub. | |||||||||||||||||||||||
MAKO-3771 | MAKOSUP-10878 Page Labels in PDF | ||||||||||||||||||||||
PDF allows for a label to be assigned to a page that is displayed by PDF viewers alongside the page number. It simplifies page numbering of the front matter in a publication where the page numbers are Roman numerals, for example. Mako 6.5.0 adds two new methods to the IPage class, for getting and setting page labels:
CPP
These methods work with a new class, IPageLabel, that contains a prefix string, the style of numbering, and a start page number. A C++ sample showing how to set page labels on an existing PDF can be found on Github. | |||||||||||||||||||||||
MAKO-3867 | Add 64-bit Raspberry Pi OS support for Mako | ||||||||||||||||||||||
With the introduction of an official 64-bit Linux for the Raspberry Pi 4, it was a natural next step for Mako to include a Debian Bullseye release built for the arm64v8 processor. 64-bit processing provides Mako with a little extra headroom, and runs considerably faster than its 32-bit counterpart (which remains available). | |||||||||||||||||||||||
MAKO-3927 | Update NuGet package names | ||||||||||||||||||||||
The NuGet packages contained in the distribution have acquired new names to make their purpose clearer, and with a view to publishing license-controlled versions on nuget.org in the future.
| |||||||||||||||||||||||
MAKO-3953 | Performance improvements to the vector-based transparency flattener | ||||||||||||||||||||||
A PDF of a city map consisting of hundreds of transparent strokes was very slow when processed by an | |||||||||||||||||||||||
MAKO-3860 | PDF/A-2u - We can't tell if Unicode is missing for CID fonts | ||||||||||||||||||||||
In version 6.4.0, Mako added support for PDF/A-2u. As part of that change, Mako would error if text is encountered where Unicode cannot be recovered. This requires a means to signal to PDF output that the character could not be recognized during PDF input. To do so, Mako inserts space characters if there is no Unicode available. During PDF output, Mako can detect when a space has been added for non-Unicode purposes by checking the name of the associated glyph. However, this approach works only for non-CID fonts; for CID fonts there was no such mechanism. What changes in this release is the spaces previously added are replaced with Unicode This is essentially an internal change to Mako but warrants inclusion in these Release Notes in case a Mako developer relies on text recovered from a PDF to include spaces, in place of unknown characters. | |||||||||||||||||||||||
MAKO-3897 | PDF/A-2u and PDF/X-1a compliance | ||||||||||||||||||||||
Found during routine testing. Due to improved support for images with multiple decode filters, test files with LZW-encoded images (which are not allowed for PDF/X and other ISO standards for PDF) were failing compliance testing as LZW encoding was being passed through. Now fixed. | |||||||||||||||||||||||
MAKO-3882 | Java 11 support | ||||||||||||||||||||||
Mako 6.5.0 includes a Windows SWIG release (C#, Java, Python) built with Java 11. The Linux SWIG distribution is already built with Java 11. | |||||||||||||||||||||||
MAKO-3943(et al) | Memory leak issues | ||||||||||||||||||||||
This investigation was prompted in part by a customer support request. Using Valgrind and other profiling tools work was carried out for this Mako release to find and fix all causes of memory leaks. | |||||||||||||||||||||||
MAKO-3878 | Internal RIP performance improvement | ||||||||||||||||||||||
This was a port to Mako of a change to Jaws RIP that was made in response to a customer support request. For the customer exhibit, memory consumption was reduced from 2.3 gigabytes to 800 megabytes. | |||||||||||||||||||||||
MAKO-3783 | Blank output for some layers when processing PS1X51DC.psd to TIFF | ||||||||||||||||||||||
Found during routine testing. A sample Photoshop (.psd) file was losing information from certain layers when converting to a composite image. Now fixed. | |||||||||||||||||||||||
MAKO-3800 | Colours changed when processing some PSD files | ||||||||||||||||||||||
Found during routine testing. A sample Photoshop (.psd) file was not correctly converting to a composite image. Now fixed. | |||||||||||||||||||||||
MAKO-3794 | Transparency missing when processing oldRussian.psd to TIFF | ||||||||||||||||||||||
Found during routine testing. A sample Photoshop (.psd) file containing an element with a drop shadow was not correctly converting to a composite image. Now fixed. | |||||||||||||||||||||||
MAKO-3812 | Incorrect output when processing PS9ZC1CC.psd to TIFF | ||||||||||||||||||||||
Found during routine testing. A sample Photoshop (.psd) file was not correctly converting to a composite image. Now fixed. |
Issues fixed
MAKO-3640 | MAKOSUP-10816 Support merging of CID CFF fonts. |
This change enables merging of CID/CFF fonts (character ID / compact font format). This improves still further the excellent font and font subset merging that Mako already performs when writing PDFs. For the customer exhibit that had hundreds of such fonts, Mako was able to significantly reduce their number, transforming the file from 100MB+ to 33MB, thereby improving performance of subsequent processing. CID/CFF merging can be blocked, if required. Simply set the environment variable | |
MAKO-3772 | MAKOSUP-10883 Improve error reporting when running out of temp store |
A method is added to For further details, and how to control the temp store size, see the Mako documentation. | |
MAKO-3773 | MAKOSUP-10883 Avoid decompressing entire flate images to improve performance. |
Exhaustion of the temp store (see MAKO-3772) was triggered by flate (zip) decompression of a 6Gb image that was occurring in one operation. Now, on-demand decompression of image sections takes place, thereby reducing pressure on the temp store. | |
MAKO-3807 | MAKOSUP-10889 Error in a PDF (MakoDOMPage) |
The customer exhibit contained a font with an invalid | |
MAKO-3846 | MAKOSUP-10911 Mako generates a blank thumbnail |
The customer exhibit (a PDF) was unusual in that it had many nested optional content sections, taxing the logic in Mako to calculate whether a particular element should be visible. To fix the problem for the customer and improve Mako at the same time, close attention was paid to the
CPP
This more nuanced approach ensures that Mako’s renderer class will include content that previously may have been considered invisible. | |
MAKO-3941 | MAKOSUP-10953 Mako PDFLib cannot set a value for “CreatorTool” XMP data |
The requirement from the customer was to be able to set the Creator string (which is the “Application:” property in Adobe Acrobat’s Document Properties dialog). To make this possible, an additional document information string, Use with
CPP
| |
MAKO-3940 | MAKOSUP-10954 Use OS-provided temporary directory path on macOS |
The title of this improvement explains all. On macOS, Mako now uses the OS-supplied method instead of the generic method used for Mako’s Linux distributions. | |
MAKO-3950 | MAKOSUP-10957 Conversion from XPS to PDF/A fails with EDL error 510 |
During the conversion process, code designed to deal with a specific requirement of PDF/A was triggering an exception. Now fixed. | |
MAKO-3974 | MAKOSUP-10970 JVM crash with some PDF files |
The customer exhibits (there were several) triggered an exception that resulted in a crash of the JVM (Java Virtual Machine). All were related to bad font or image encoding in the PDF that Mako was not equipped to deal with. These issues are addressed and the files process successfully, except for one that was too badly damaged. |
Known issues
MAKO-4006 | During release testing, a minor regression was found that we have decided to release with. |
Mako 6.5.0 has a renderer issue that affects the (unusual) situation where a completely transparent object is painted into a knockout transparency group. This may be rendered incorrectly, but the change also improves some other cases. A point release, Mako 6.5.1, will resolve this issue. |
Distribution
MAKO Version 6.5.0 is built for the following platforms:
- iOS
- macOS
- Linux (for Debian-based distributions, eg Ubuntu, Mint)
- Linux (Centos)
- Linux (Red Hat Enterprise v7.0)
- Linux (Red Hat Enterprise v8.4)
- Linux (for Debian Buster) (arm32v7 for Raspberry Pi)
- Linux (for Debian Bullseye) (arm64v8 for Raspberry Pi)
- Linux (for Debian Stretch)
- Linux (for Debian Bullseye)
- Linux (for MUSL distributions, eg Alpine Linux)
- Linux (for Ubuntu 20.04 LTS)
- Windows (static and dynamic libs, VS 2019 (V142), x86 and x64)
- Windows (static and dynamic libs, VS 2017 (V141), x64)
Note that the Android build has been dropped from this release pending a tooling change. Please contact Mako support if you need a Mako release for Android later than Mako 6.1.0.
Mako supports the following programming languages
- C++ (Mako is written in C++)
- C# (.Net Core and .Net Framework)
- Java (built with OpenJDK11)
- Java (built with OpenJDK15)
- Python (v3.8)
The alternatives to C++ are built using SWIG (www.swig.org) which provides a translation to the native libraries, are found in these distribution folders:
- Linux_SWIG_(C#-Java-Python)
- Linux_Centos7_SWIG_(C#-Java-Python)
- Linux_Centos8_SWIG_(C#-Java-Python)
- Linux_Ubuntu_SWIG_(C#-Java-Python)
- macOS_SWIG_(C#-Java-Python)
- Windows_SWIG_(C#-Java-Python)
- Windows_SWIG_(C#-Java11-Python)