Mako 7.4.0 Release Notes
Centos / RHEL 7.9 builds deprecated: This is the final Mako release to include a distribution built for Centos / Red Hat Enterprise Linux 7.9
Introduction
As usual, this Mako release is a mixture of new features and fixes. Added in this release are:
New APIs to simplify getting or setting object properties for overprint, rendering intent, black point compensation, etc.
New APIs to obtain additional information about an ICC profile
Further performance improvements to PCL5 parsing and processing
Solutions for specific support issues included in this release are labelled MAKOSUP-XXXXX. The link is live and can be followed to the Mako support portal, but work only for the customer who reported it.
New features and improvements
MAKO-4816 Improved overprint and stroke adjust APIs
Prior to this change, attributes were hidden as bits in a property (DeviceParams
) attached to these nodes. These are:
Fill overprint
Stroke overprint
Overprint mode
Stroke adjust
These were awkward to interrogate or change. These new APIs simplify setting these properties.
For IDOMPath
we’ve added:
setFillOverprints()
andgetFillOverprints()
setStrokeOverprints()
andgetStrokeOverprints()
setOverprintMode()
andgetOverprintMode()
setStrokeAdjust()
andgetStrokeAdjust()
For IDOMGlyphs
, where there are only fills:
setFillOverprints()
andgetFillOverprints()
setOverprintMode()
andgetOverprintMode()
MAKO-4874 Add discrete APIs for rendering intent and black point compensation
The following APIs are added to IDOMPathNode
, IDOMGlyphs
, and IDOMTransparencyGroup
(and by inheritance, IDOMCanvas
):
setRenderingIntent()
andgetRenderingIntent()
setBlackPointCompensation()
andgetBlackPointCompensation()
These can be used instead of the less direct method of getting or setting a named property.
MAKO-4103 MAKOSUP-11029 API to get ICC profile types
Responding to a customer request, new APIs are added to obtain additional information about an ICC profile: They are:
Profile Connection Space (or for device links, the output colour space):
uint32 getProfileConnectionSpaceForICCBasedSpace(const IDOMColorSpaceICCBasedPtr &space);
Supported rendering intents:
bool getProfileHasSupportForIntentForICCBasedSpace(const IDOMColorSpaceICCBasedPtr &space, eRenderingIntent intent, bool input);
Profile class/type (input/ output/ link/ abstract/ etc.):
uint32 getProfileClassForICCBasedSpace(const IDOMColorSpaceICCBasedPtr &space);
For details of any of the new APIs described above, remember you can search at https://api.globalgraphics.com/mako/
MAKO-4937 PCL performance improvements
These include IDOMTrivialImage
(documented below), and a more compact representation of rectangular paths. These changes result in significantly reduced memory overhead during PCL5 input, and faster subsequent processing.
MAKO-4844 Implement a trivial Image type to improve the PCL5 input
This class was added during work to improve the PCL interpreter, specifically to reduce memory overhead. A trivial image is used for cases where the image data is tiny, to the point that it is wasteful to store in a separate stream. The resolution is fixed to 96 dpi. Otherwise, supported color spaces, channel formats, and available depths are as per IDOMRawImage
.
MAKO-4918 MAKOSUP-11381 Fonts are always embedded on saving a file
Until now, Mako has always forced fonts that would be emitted as Identity CID
to be embedded, for good reasons; such fonts are unsafe. When not embedded, there is risk of incorrect output should a glyph that’s different from the original, but with the same glyph ID, is selected from a font resident on the consumer’s system .
A new API for IPDFOutput
controls this behavior, also available as a setParameter()
:
IPDFOutput::setEmbedIdentityCidFonts(bool embed)
setParameter()
:EmbedIdentityCidFonts
which can be set totrue
orfalse
This option should be used with caution, e.g. in situations where it is imperative that the font profile of a PDF processed by Mako is altered as little as possible.
MAKO-4881 MAKOSUP-11397 Using alternative fonts
To solve this customer problem, a new API is added to the IPDFInput
class that enables an alternative to be declared for base fonts. For example:
IPDFInputPtr pdfInput = IPDFInput::create(mako);
pdfInput->setAlternateBaseFont("Helvetica", "Arial");
pdfInput->setAlternateBaseFont("Helvetica-Bold", "Arial Bold");
pdfInput->setAlternateBaseFont("Helvetica-Oblique", "Arial Italic");
pdfInput->setAlternateBaseFont("Helvetica-BoldOblique", "Arial Bold Italic");
It can be used in situations where there is a need to protect against non-standard encoding of base fonts, thereby ensuring successful conversion to PDF/X or another ISO standard.
MAKO-4842 Add an IDOMPathNode::setDashPattern() AP
A convenience method added to IDOMPathNode
that takes a dash pattern in the form of a CEDLVector
of doubles. Simpler than resetting a dash pattern, then adding (dash spacing) entries one by one.
MAKO-4867 PRN input - better detection of PostScript/PDF
The IPRNInput
class is improved in this release with better detection of PostScript (by permitting various shebangs, the starting character sequence that identifies a file as PostScript) and improved support for PDF security.
MAKO-4827 SWIG : Add support for renderSeparationsToFrameBuffers() API
These IJawsRenderer
methods were missing from the SWIG (C#, Java) APIs. Now implemented.
MAKO-4863 PRN input - support PostScript with embedded TBCP
A new feature to allow IPRNInput
to handle jobs that use Adobe's Tagged Binary Communication Protocol (TBCP) with PostScript. A new method, IInputStream::createTbcpStream()
, is used by IPRNInput
to decode an underlying TBCP stream.
MAKO-4864 Enable PCL5 permanent resources to be reloaded in unencapsulated mode
Add new feature to IPCL5Input
to allow it to get/set a reference to an object to be used for storing PCL5 permanent resources. This knowledgebase article explains.
Support issues
MAKO-4898 MAKOSUP-11408 Converting PDF to PS results in very large output file
In this case we advised the customer via the support thread to change the compression method, and that was sufficient to bring the file size down to an acceptable level. Nonetheless we investigated further and made some changes to Mako in this release to reduce output size for their use case still further.
A new IPSOutput
API, setAllowReusableImageStreams()
, enables reuse of images that are repeated in the document, such as a company logo or similar. When set to true, source data for any images that Mako considers suitable for reuse will be emitted as a reusable stream that can be referenced later in the job. The default for this setting is false
; while it can produce smaller PostScript, it will increase printer memory which won't be desirable in all cases.
The use of setAllowReusableImageStreams(true)
in combination with flate
output produced an output file size that was smaller than the example the customer provided to us as a guide to what they needed.
MAKO-4907 MAKOSUP-11418 Text encoding when converting to SVG
An improvement to Mako’s ToUnicode
processing solved this customer problem, which was caused by a PDF with a poorly formed font.
MAKO-4951 MAKOSUP-11439 PostScript page range extraction is losing media control
This was caused by an error in the Java API that is now fixed.
MAKO-4908 MAKOSUP-11419 PCL5 to PDF conversion - Symbol font issue
Fixes an issue with Intellifonts that resulted in glyphs being incorrectly positioned.
MAKO-4925 MAKOSUP-11427 Glyphs rendered as black
This problem was caused by poorly defined hints in an embedded font found in the customer exhibit. A fix to work around the issues is implemented in this release.
MAKO-4939 MAKOSUP-11437 Mako fails to merge two XPS documents into a single XPS document
This problem was caused by a bad FontBBox
entry in one of the customer exhibits, which was not being rejected by Mako as it should have been. Now fixed.
MAKO-4968 MAKOSUP-11439 IPSCommentMonitor SWIG issues
A problem with the Java implementation of the IPSCommentMonitor
class affecting PostScript to PostScript processing is now fixed.
Distribution
MAKO Version 7.4.0 is built for the following platforms:
iOS
macOS
Linux (for Debian-based distributions, eg Ubuntu 22.04 LTS, Mint)
Linux (for Debian Bullseye)
Linux (for Debian Buster)
Linux (for Alpine Linux v3.17)
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)
Windows (static and dynamic libs, VS 2019 (V142), x86, x64 and ARM64)
Windows (static and dynamic libs, VS 2017 (V141), x64)
Windows UWP/WinRT
N.B. The Android build is excluded from this release. Contact MAKO support if you need MAKO for Android.
MAKO supports the following programming languages.
C++ (MAKO is written in C++)
C# (.Net Core (multiple platforms) and .Net Framework (Windows only))
Java (built with OpenJDK11 and therefore compatible with later versions.)
Python (v3.8 / 3.9)
The alternatives to C++ are built using SWIG (http://www.swig.org ) which provides a translation to the native libraries. They found in these distribution folders, found in the SWIG folder:
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)
Cross-platform Java build
The folder SWIG/CrossPlatformJAR contains Java builds that combine the implementations for multiple platforms into a single JAR package, thereby simplifying deployment. The folder contains two combinations, one for Windows & Linux and another for Windows, Linux and macOS. A pre-built sample app (MakoConverter.jar) is included.
ColorLogic
MAKO is available with the ColorLogic CMM, supplied by our Hybrid Group sister company, ColorLogic Gmbh. All builds can be found in the ColorLogic folder. C++ builds are available for Windows, macOS and Linux, and there is also a Windows SWIG build for development with C#, Java or Python that uses the ColorLogic CMM.