Created Date: 11 Mar, 2022 13:37
Last Modifed Date: 11 Mar, 2022 13:37
This is a maintenance release that addresses identifiable support issues, labeled MAKOSUP-XXXXX. The link is live and can be followed to the Mako support portal, but it only works for the customer who reported it.
MAKOSUP-10816 Support merging of CID CFF fonts
The exhibit has many embedded fonts and the customer was disappointed that after processing with Mako, the number of fonts remained similar. Mako’s PDF output makes every effort to merge font subsets and eliminate duplicate fonts, but not in this case. This is due to the fonts being CID/CFF (Character Identity / Compact Font Format), which hitherto Mako was unable to merge in the usual way.
This change enables merging of CID/CFF fonts, reducing complexity (Acrobat’s font list now displays in 30 seconds rather than the approximately 10 minutes previously) and file size. The change solves the problem for the customer case.
Merging fonts must be carried out with care to ensure that no information is lost or inadvertently changed. While it has been thoroughly tested, as a precaution you can block CID/CFF merging. To do so, set the environment variable
MAKOSUP-10859 Image is reencoded, even with setReencodeImages() set to false
The customer exhibit had an image that was RLE and Flate compressed. After processing with Mako, the image was RLE encoded but not Flate compressed, ballooning the output file size.
To solve this, a new method is added,
It has always been the case that images that are LZW compressed cannot be "passed through" to the output when converting to PDF/X or PDF/A, as these standards specifically prohibit LZW. Such images are decompressed and recompressed using Flate compression.
A consequence of this change is that a PDF with an image with multiple compression filters that includes LZW also has to be decompressed and recompressed. If the image includes JPEG compression, which is a "lossy" compression algorithm, decompressing and recompressing may have an impact on quality.
MAKOSUP-10882 Transparent images flatten with artifacts
The customer reported poor results when processing PDFs to PDF/X-1a, which requires flattening of transparency, in this case an image with an
This change attempts to mitigate this kind of case. With this change, and the vector flattener, Mako can detect that an image is sufficiently isolated (on the page) and can flatten it at the image resolution. The file size of the output is smaller as a result, and as there is no scaling there can be no scaling artifacts. This happens only when the resolution of the image content is lower than the target resolution – if it’s higher, Mako still renders to the higher resolution.
This becomes the default behavior, but it can be disabled, for testing purposes perhaps, with:
MAKOSUP-10892 Memory leaks: Investigate client-reported issues found using Valgrind
The customer reported some memory leaks and uninitialized memory warnings from a Valgrind-monitored Mako project. When investigated, these were found to be benign in nature but nonetheless have been addressed in this release.
MAKOSUP-10893 Using MakoConverter to optimize PDF Documents- JPEGQuality improvement
The customer exhibit contains many artificial images (for example logos, rasterized text, and so on) that are DCT compressed, otherwise known as JPEG compression. A feature of the algorithm is a technique known as chroma subsampling. Chroma subsampling is desirable for natural images, as it can result in lower file sizes without significantly lowering perceived quality. However, for artificial images such as rasterized text where sharp transitions from one color to another are present, the result can be unwanted artifacts that compromise the perceived quality of image.
To make it possible to strike a better balance between output file size and image quality, a new PDF output setting is introduced in this release. The setting is
This setting is used in conjunction with
The combination of these two settings keeps the output file size low without compromising the quality of artificial images. They should be set in the order shown (that is,
MAKOSUP-10889 Error in a PDF (MakoDOMPage)
This required working around an invalid
MAKOSUP-10896 Extraction Problem - Arabic text
The problem the customer saw was due to incorrect handling of "alternate" glyph names. Although the investigation took some time, the solution was straightforward. By allowing alternate names at input, the problems with text extraction and PDF output were solved.
MAKOSUP-10901 PDF/X-4 font compliance failure error message
The reason the customer exhibit failed to convert to PDF/X-4 is that there is a character reference to a
It was obvious that the error message Mako produced did not throw any light on the problem, so this has been improved. Such an occurrence now produces an error message that includes the following:
MAKOSUP-10903 Common names are escaping Mako.lib
The customer reported seeing these link errors when building against the Mako library:
Quite rightly, the customer complained that these are common names that shouldn’t be exported from Mako.lib. Now fixed.
MAKOSUP-10909 Converting PDF to PS that contains annotation
The customer’s workflow required conversion to Postscript of a PDF with a very high page count. Due to various factors, the conversion was taking an excessive amount of time (several hours in one case). After investigation, improvements were made that reduced processing time to around 30% of the time taken before the change.
MAKOSUP-10910 Unable to parse PDF and PS files on ARM
The Linux ARM 32-bit build was referencing a threading library (
MAKOSUP-10911 Mako generates a blank thumbnail
The blank output was the result of incorrect logic in the calculation of visibility of optional content groups. This is now fixed.
MAKOSUP-10915 Odd document rendered blank in viewer, no errors or exceptions thrown
The customer exhibit is another example of a broken PDF that other consumers can cope with, so Mako must too. The file contained several PDF streams where the stream dictionary defined a
MAKOSUP-10917 Error while converting PCLXL job to pdf
The customer file triggers an exception because it contains a TrueType font that has multiple tables in the global segment with a signature of zero and length zero, contrary to expectation. Now fixed.
MAKOSUP-10919 Unable to open specific PDF - EDL error
The customer exhibit triggered an error in Mako’s PDF input due to incorrect entries in a transparency group
MAKOSUP-10924 Cannot process watermarked PDF
MAKOSUP-10925 EPS BoundingBox-HiResBoundingBox-CropBox
The customer reported that Mako ignores the HiResBoundingBox DSC comment when it is present in an EPS, which for them led to inaccurate placement when creating impositions. This is now rectified with a new setting, HiResBBox. When set to
MAKOSUP-10932 Java 11 support
The customer needed the Mako Java SDK built with Java 11 to meet their development requirements. We obliged and included it in the distribution for this release as a separate build, in the folder
MAKOSUP-10937 Azure Mako NuGet package function crashing in RELEASE BUILD, works totally fine in DEBUG BUILD.
The customer’s project is C# running in Azure.
The issue turns out to be that the
As this occurs on Release builds, but not Debug, it's likely that this is due to debug builds being less aggressive in their garbage collection.
The solution is a code change to an enclosed using statement, for example:
It was also found that simply referencing
Although this did not require a code change in Mako, it is useful to call this out in these release notes for the benefit of other Mako C# developers.
MAKOSUP-10940 PDFX/4 compliant file fails with typecheck error
The customer exhibit was technically an invalid PDF, specifying an
New or improved features
MAKOSUP-10930 Retrieve "User Output Signals" from IJPDS file
This change adds support for reporting the
This information is treated in a similar way to the InputPageNo and RipNo, which is to say is recorded and passed along. The information is available in two ways:
The implementation is limited to obtaining this information from the SDC record, as no test file with a SOD record was available during development.
This code example shows retrieving the value for the first page, using two methods:
MAKO Version 6.4.1 is built for the following platforms:
- Linux (for Debian-based distributions; for example, Ubuntu, Mint)
- Linux (Centos)
- Linux (Red Hat Enterprise v7.0)
- Linux (Red Hat Enterprise v8.4)
- Linux (for Debian Buster) (ARM32 for Raspberry Pi)
- Linux (for Debian Stretch)
- Linux (for Debian Bullseye)
- Linux (for MUSL distributions; for example, 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)
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: