Skip to main content
Skip table of contents

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() and getFillOverprints()

  • setStrokeOverprints() and getStrokeOverprints()

  • setOverprintMode() and getOverprintMode()

  • setStrokeAdjust() and getStrokeAdjust()

For IDOMGlyphs, where there are only fills:

  • setFillOverprints() and getFillOverprints()

  • setOverprintMode() and getOverprintMode()

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() and getRenderingIntent()

  • setBlackPointCompensation() and getBlackPointCompensation()

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 to true or false

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:

CPP
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.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.