Mako 8.2.0 Release Notes
RELEASED OCTOBER 3RD, 2025
Introduction
This was a short release, coming just two months after Mako 8.1 that was released at the end of July. Nonetheless, it has new features and the usual round of fixes and improvements in response to support requests.
Mako 8.2.0 adds new features and other improvements to the Apex GPU-based renderer that we introduced in Mako 8.0. Apex now supports halftone screening that is implemented with the post-processing API we added in Mako 8.1. This means screening happens on the GPU, making it lightning fast. Plus, you can retrieve the screened result as packed bytes (e.g., 1 bit-per-pixel) and as the packing runs on the GPU, it’s very fast and the amount of image data to be retrieved is reduced. Apart from the performance benefit, moving operations to the GPU frees up the CPU for other tasks, improving throughput of the entire rendering process.
New Features
MAKO-5450 Apex: Add CSpotHalftone and CColorSpotHalftone support
This is a new Apex feature, adding halftoning capability to the Apex renderer that runs on the GPU. It is implemented as an Apex post process, CHalftonePostProcessSpec()
.
simpleapexrenderer
in the makoapps
folder of the SDK distribution will accept a halftone line frequency on the command line, so you can experiment without having to write code. The source is available so that you can see how to call the new APIs in your own project.
Full documentation with sample code will be added to Mako’s documentation shortly.
MAKO-5385 Support 1, 2, and 4 bit output in Apex
This is an exciting new feature of Apex, enabling rendered output to be retrieved as 1, 2 or 4 bits-per-pixel image data, without the need for CPU-intensive bit wrangling which is instead handled on the GPU. It paves the way for high-performance screening and other post-processing where the desired result is not a full 8- or 16-bit image.
simpleapexrenderer
in the makoapps
folder of the SDK distribution will accept one of these reduced bit depths (1, 2 or 4) on the command line, so you can experiment for yourself, and the source is available so that you can see how to call the new APIs.
Full documentation with sample code will be added to Mako’s documentation shortly.
MAKO-5438 MAKOSUP-11657 Add APIs to get/set GTS metadata entries in OCGs
Processing steps in PDF (ISO 19593-1; see the Ghent Workgroup site for further details) are metadata that explicitly identify the purpose of page objects, such as a path that describes a dieline. Such objects are attached to an optional content group (OCG). In response to a customer request, new APIs are added to the IOptionalContentGroup
class:
IOptionalContentGroup::getGTSProcStepsGroup()
IOptionalContentGroup::getGTSProcStepsType()
IOptionalContentGroup::setGTSProcStepsGroup()
IOptionalContentGroup::setGTSProcStepsType()
Although it is possible to reach this information via the IPDFObject
class, these APIs make it much easier to interrogate or change these settings.
Support requests
MAKO-5426 MAKOSUP-11428 Cache transparency groups for both PDF input and output
This change improves performance when retrieving content from a PDF into Mako DOM objects, for example with page->getContent()
. For the customer case, processing all 2500 pages reduced from 11 minutes to 15 seconds, with a huge decrease in the amount of memory consumed and faster release thereof.
This improvement is supported by extensions to the hashing mechanism that Mako employs to identify repeated content and subsequently reuse elements already encountered. For PDF input, it avoids repeatedly parsing a complicated content stream over and over. For output it avoids repetition of elements already written to the PDF, making the file smaller and more efficient.
MAKO-5415 MAKOSUP-11494 Improvements to reduce memory usage and increase performance for customer PCL5 cases
This change adds a new API to IPCL5Input
and IPRNInput
to set the input PCL5 input flavour (5e or 5c) or detect it from PJL.
There are two main areas where performance is increased:
· ROP flattening
· Image compression
Additionally, there are bug fixes in this change that significantly improve output quality. In testing, conversion of PCL and PXL to PDF showed many improvements.
MAKO-5412 MAKOSUP-11585 Allow the Harlequin stroker to be used when rendering using Jaws
This change was implemented to solve a specific customer problem when rendering fine lines. It’s not enabled by default; to enable, set this environment variable:
MAKO_STROKER_HQN_DERIVED=1
MAKO-5396 MAKOSUP-11638 PCL5 input: Support pseudo emboldening/italicising
This adds support for pseudo emboldening/italicising of the Andale Mono WT fonts supplied as part of the Unicode Font Package for SAP when used with PCL5 input.
MAKO-5420 MAKOSUP-11652 PostScript job cropped after conversion to PDF
An unexpected PostScript operand caused Mako to interpret the resolution incorrectly. Now fixed.
MAKO-5460 MAKOSUP-11678 Rendering stamp annotations
The customer exhibit was a PDF with some odd characteristics that prevented Mako from rendering it as expected. Now fixed.
Improvements
MAKO-4105 Replace IAbortPtr with IProgressMonitorPtr for all classes with progress monitoring implemented
This change continues work to improve Mako’s progress reporting mechanism.
For some projects, this could result in a breaking change as it will be necessary to update references from IAbortPtr()
to IProgressMonitorPtr()
This change affects custom transforms, which you may be using in your Mako project. For example, this code changes from this:
CMarkedContentRemoverImplementation mcRemoverImplementation(jawsMako);
ITransformPtr mcRemover = ICustomTransform::create(jawsMako, &mcRemoverImplementation, IAbortPtr(),
false, false, false, false, false, false, false);
To this:
CMarkedContentRemoverImplementation mcRemoverImplementation(jawsMako);
ITransformPtr mcRemover = ICustomTransform::create(jawsMako, &mcRemoverImplementation, IProgressMonitorPtr(),
false, false, false, false, false, false, false);
MAKO-5021 Apex: Support XPS semantics for image view boxes
This change, along with its siblings (MAKO-5022, MAKO-5024 & MAKO-5026) improve the performance and quality when rendering XPS with the Apex GPU-based renderer.
MAKO-5022 Apex: Support XPS brushes
This adds support for linear and radial gradients.
MAKO-5024 Apex: Support IDOMGlyphs style simulation
This refers to faux bold and faux italic, a mechanism whereby a glyph’s geometry is thickened (bold) or slanted (italic), thus avoiding the need for an additional font.
MAKO-5026 Apex: Support XPS-style opacity masks
An opacity mask is a black-to-white gradient that controls the transparency of an object.
MAKO-5391 Apex: File with a lot of images fails to render at low resolutions
This customer file contains over 27k tiny images, a few pixels wide and high. When rendering with Apex at low resolution, the way the images were uploaded overwhelmed GPU memory. The solution is to recognize this pattern, and to pack images together, thereby avoiding the problem. This also greatly improves rendering performance.
MAKO-5429 Apex: Render runs short of memory
The customer-provided PDF contained a large number of complex shadings that were not being cached efficiently, resulting in memory shortages during rendering. This issue has now been resolved, and the fix has proven beneficial for similar jobs, which now complete successfully with improved performance