Created Date: Mar 24, 2021 18:26
Last Modifed Date: Mar 24, 2021 18:26
Mako 6.0 was a six-month effort (Mako’s usual release cycle is quarterly) because we needed to incorporate a major architectural change. Until now, Mako relied on a separate library (a DLL on Windows or an SO on macOS/Linux) to write PDF. With this change the need for this separate component disappears, and with it some longstanding memory and resource management limitations. Moreover, it enabled us to align the versions of the Jaws RIP components integrated into Mako to a common version, i.e. Jaws 4001.0 (aka Jaws 4)
This improvement earns Mako its major version increment, from Mako 5.x.x to Mako 6.0.0. Besides this, there are one or two new features
- We have added Java to the list of supported languages, alongside C++, C# and Python. This is an exciting development as we have had many requests for Java support.
- Mako’s macOS libraries are now universal binaries, supporting the new Apple Silicon-based Macs
The release notes are presented in terms of the development tasks (MAKO-XXXX) that had to be undertaken to complete this release. Only items of significance – those that add new features in this release or address identifiable support issues – are included. It is worth noting that the Mako releases made while Mako 6.0 was in development – Mako 5.2.0, Mako 5.2.1 and Mako 5.2.2 – delivered many new features and improvements that are also present in Mako 6.0.0.
Remove the “libs dir” parameter from IJawsMako::create()
Previously, the first parameter of the IJawsMako::create() was a path to the location of the library edlpspdfout. This is no longer required and has been removed.
The first parameter is now
In most cases the method can be called without any parameters. See the API documentation for further details.
Create a SWIG binding for Java
Mako 6.0 adds language support for Java. As with C# and Python, it is made possible by the use of SWIG, a technology that connects the C++ of Mako with other languages.
A “Using Mako with Java” page can be found on the documentation site at http://documentation.globalgraphics.com, and the simpleexamples which provide code samples for everything from document creation to watermarking, rendering and more, are translated to Java.
Enable linking MAKO as a single static library
Until now it was necessary to link several libs from the Mako distribution, i.e.
jawsmako.lib, edllib.lib, makojaws.lib, edlxpsin.lib, edlpcl5out.lib & edlpclxlout.lib
These are now replaced by a single library, mako.lib.
Compile edlerrors.cpp into the MAKO libs
Previously this source file, which provides human-readable descriptions of exceptions that could be thrown by Mako, had to be included in projects manually. It is now compiled in. You can remove it from your build, or if you are on Windows and using the NuGet package, this will happen automatically.
Remove VS2015 builds and reinstate x86 builds for VS2019
The distribution for Visual Studio 2015 (VC140) is removed from the distribution. This included a build for 32-bit Windows, and although there is little demand for it, we have reinstated the x86 build for Visual Studio 2019 (VC142).
This is a change for exclusively for Windows as macOS & Linux are 64-bit only.
Support for ARM64 on macOS
MAKO libraries for macOS are now built as universal binaries. You can build projects that will run natively on Apple Silicon or Intel-based Macs. This change means that MAKO now requires a minimum of macOS 10.12 (Sierra) or iOS 10 as deployment environments.
Although MAKO development has necessarily moved to the 11.1 SDK and Xcode 12.3, OEMs should be able to continue to use older versions as required.
If you are looking for a specific support issue, bear in mind it may have been fixed in an earlier version and therefore will not be listed here. Refer to release notes for past Mako versions if necessary.
(MAKO Support Request #10443) pagemodesource.cpp undefined
A customer’s XPS triggered an issue in Mako’s PNG reader. Now fixed.
(MAKO Support Request #10479) Supressing MAKO to write to console output?
Mako’s code was scanned for instances of console messages and these were either removed or wrapped in #ifdef…#endif so that they are supressed in the release build.
(MAKO Support Request #10502) Slow page->getContent()
The solution for this issue led to the development of a new renderer designed for ROP operations. A simpler and faster renderer that can render all types of objects we expect to see for PCL/XL and PCL/5e ROP flattening duties, into plain grey or RGB.
(MAKO Support Request #10540) Customer-supplied file throws exception in MAKO
An unusual glyph configuration triggered an error. Now fixed.
(MAKO Support Request #10561) Issue with customer file
An error was thrown by code attempting to extract text from a PDF. Issue found and fixed.
(MAKO Support Request #10565) PJL wrapped PDF
PJL has an ENTER_LANGUAGE command that instructs a parser to switch to reading a PDL such as PCL or PostScript. The customer-supplied exhibit instead embedded a PDF which Mako’s PJL parser was unable to handle. To solve this, the parser was enhanced to recognize PDF, and sample code is provided to demonstrate its use, published here on GitHub.
Incorrect handling of forms in PDF input where graphics state parameters change and the form doesn't explicitly set them
These two issues were worked together as both are concerned with PDF forms (XObject). Building on work in Mako 4.8.5 and Mako 5.2.1 that offered finer-grained control over the caching of forms to control memory usage, this work ensures that graphics state changes are not interfered with by the caching process.
RIP Error when running MakoDistillerCmd.exe
The error was triggered by the presence of PJL at the start of a PostScript file. This required additional work to allow IDistiller() to ignore PJL commands.
Jaws PDFLib config issue for MakoDistillerCmd
The solution required to allow this job to complete successfully required a PostScript prolog that was used by MakoDistillerCmd’s predecessor, PDFLib’s testpdflibcmd.exe. It sets up some useful preconditions for the PostScript interpreter.
This prolog whose filename is prologue-pdflib+enabletransparency+pjl.ps available in the MakoDistillerCmd folder of the Mako distribution folder. To use, add this to the arguments file: -Jpdfprologue-pdflib+enabletransparency+pjl.ps
Add support for getting/setting the attribute field in a structure element
This change adds the ability to get and set Attributes in a structure element - i.e. the /A entry of the Structure dictionary. Attributes can be free form, so instead of having some sort of structured interface, we allow access to the attributes as a low level IPDFObject.
See the API documentation for more details.
Add BPC (black point compensation) controls
Sets (or gets) the default behavior for black point compensation when (and only when)
See the API documentation for full details.
SWIG for C# : Make C# API compatible with .NET Framework 4.6 and later
The C# implementation on Windows is built for three targets:
You can build apps for .Net Framework or .NET Core using the supplied NuGet package in Visual Studio 2019.
Update SWIG implementation to Python 3
The Python API now targets Python 3.8.
SWIG: Unable to call PValue::getStringVect() in C#
In PDF metadata the Author entry can present as a list rather than a single string. This change to the C# API makes it possible to access the complete list as a string vector object.
IPageLayoutData::getNumberOfColumns does not return the correct number of columns
The fix solved a problem that could result in an incorrect number of columns being returned by this API.
Spurious messages appearing during conversion to PCL
Affected both PCL5 and PCL/XL output. Messages to stdout are no longer emitted.
Exception when processing QualityLogic test file A003.pxl to PDF
This test file included a deliberate error to test the PCL/XL parser’s ability to recover, which Mako is now able to handle correctly.
iOS Simulator builds do not work on M1 Macs
As part of the Mako build process for iOS, we build a simulator version for arm64, but Xcode fails to link it, claiming that the library we have made is built for iOS and not the simulator.
The problem has yet to be investigated and fixed. In the meantime, the use of a real device for debugging is suggested.
Ensure all the open source libraries in use have private prefixes
As it’s possible for a Mako customer to be using a third-party library independently of its use in Mako, to avoid a clash private prefixes are in use.
Improve Doxygen API docs
The API documentation in HTML and PDF has been improved with the addition of new sidebar headings (bookmarks in the case of PDF) to simplify navigation. The HTML version is online at http://api.globalgraphics.com/mako.
MAKO Version 6.0.0 is built for the following platforms:
- Linux (for Debian-based distributions, eg Ubuntu, Mint)
- Linux (Centos)
- Linux (for Debian Stretch)
- Linux (for MUSL distributions, eg Alpine Linux)
- Windows (static and dynamic libs, VS 2019 (V142), x86 and x64)
- Windows UWP (Store apps, Windows 10 IoT)
Mako supports the following programming languages
- C++ (Mako is written in C++)
- C# (.Net Framework and .Net Core)
- Java (built with JDK 15)
- Python (v3.8)
The alternatives to C++ are built using SWIG (www.swig.org) which provides a translation to the native libraries. These are located in the distribution folder Windows_SWIG_(C#-Java-Python).