Mako 5.2.0 Release Notes
New Feature: PDFLib Replacement
MAKO-2420 | IDistiller() classJaws PDF Library, usually abbreviated to PDFLib, was created to provide easy access to the Jaws RIP technology for the purpose of converting PostScript to PDF and vice versa. This role has been superseded by Mako. For most PDFLib use cases, the introduction of PostScript input in Mako 5.0 (the IPSInput() class) allowed a PDFLib user to make the switch to Mako, opening up many opportunities for document processing beyond the simple conversion task that PDFLib is able to handle. However, the two stage conversion (using IPSInput() followed by IPDFOutput(), for example) is slower than the direct conversion offered by PDFLib. Additionally, IPSInput() is less flexible in its handling of a PostScript prolog to modify the conversion process. Mako 5.2.0 introduces the IDistiller() class to overcome these limitations. Designed as a replacement for PDFLib, testing has shown up a significant speed improvement over the previous conversion route, matching or in many cases improving on the PDFLib performance. Fuller documentation of the new class can be found on the Mako documentation site: https://documentation.globalgraphics.com/support/mako/mako-core/mako-applications/mako-distiller |
MAKO-2421 | Add support for IDistiller::setProlog()An API to load a PostScript prolog, PostScript code that is executed before parsing of the input file begins. This example loads a prolog from a local file, prolog.ps: IDistillerPtr distiller = IDistiller::create(jawsMako) distiller->setProlog(setProlog(IInputStream::createFromFile(jawsMako, "prolog.ps")); |
MAKO-2422 | Add support for IDistiller::setEpilog()Similar to a prolog, an epilog is executed after parsing of the main file has completed. |
MAKO-2424 | Add support to IDistiller for PANOSE matchingPANOSE was an early standard for mapping unavailable fonts to a suitable alternative. It is available in PDFLib and is implemented in IDistiller() |
MAKO-2461 | Add new class enabling fonts to be installed permanently to diskThis work replicates in Mako’s For
|
MAKO-2423 | Create a testpdflibcmd.exe equivalent for IDistiller()PDFLib comes with a sample command-line application, testpdflibcmd, that provides a convenient method for exercising PDFLib without the need to write code. Mako provides an equivalent, MakoDistillerCmd, that supports the same command-line options and many of the arguments that can be added to a control file (usually referred to as an args file). In most cases it can replace testlibpdfcmd in a script or batch file. MakoDistillerCmd is supplied as sample code. Source code can be found on the developer pages referenced above. A ready-built version is included with the Mako SDK. |
Prototype feature: IJPDS support | |
MAKO-2332 | IJPDS implementation - Create a skeleton parserIJPDS (Inkjet Printer Data Stream) is a format developed by Kodak for input to their Versamark printing systems. In this release we have included a prototype of a new input, IIJPDSInput() to enable conversion of this format to PDF and other supported PDLs. This is a new feature that is in the early stages of development. As such its testing has been confined to a small number of input files. It is included in Mako 5.2.0 to facilitate evaluation by interested Mako developers, who do so at their own risk. It will be developed into a mature feature in subsequent releases of Mako. |
MAKO-1937 | Dash is lost after converting textFound during testing. Linjoin/linecaps properties not forwarded correctly. Now fixed. |
MAKO-2100 | RenderScreened unstableInconsistent hashing of screened images caused a unit test failure. Now fixed. |
Other New or Improved Features | |
MAKO-2379 | SWIG: Support Custom TransformsSupport for custom transforms in C# was absent from the implementation in Mako 5.1. It is now supported. |
MAKO-2256 | Crash caused by corrupt data stream in JPEG2000Fixed in Mako by porting a fix from Mako Jaws RIP to gracefully handle an error in the encoding of a JPEG2000 image. |
MAKO-2289 | Exception during PDF to PDF processing of veraPDF test suite file (6-2-5-t03-fail-a.pdf)Caused by insufficient checking of the data type. Now fixed. |
MAKO-2377 | Set internal renderer to run in 16-bit to improve accuracy of component values required for transparency blendingThe need for this change was uncovered during routine testing, to improve the rendering of ColorDodge and ColorBurn blend modes. |
MAKO-2107 | Implement a better solution for handling CFF fonts with non-standard FontMatrices in PDF input and XPS/SVG outputIn Mako’s PDF input, when a CFF font containing a non-standard CFF font matrix is encountered, it adjusts the font to have a standard CFF font matrix and adjusts the DOM to suit. This was to overcome what is now a very old Windows font system problem but causes problems in other contexts. This work removes the font manipulation on input and deals with the issue, via a transform, before outputting to formats such as XPS and SVG. This transform is also available externally should it be required by a Mako developer. |
MAKO-2298 | Populate print ticket entries from PostScript setPageDevice declarationsWhen parsing PCL5 or PXL/XL file streams, Mako populates print tickets to persist job information such as numbers of copies, duplex printing etc. A fuller explanation can be found on this documentation page: Mako 5.2.0 introduces the same concept for PostScript. Currently it only supports an IDocumentAssembly-level ticket for the number of copies, derived from this PostScript generated by an HP PostScript printer driver: %%BeginNonPPDFeature: NumCopies 3 This capability will be expanded in future releases of Mako. Linked to the developer page is a code sample that can automatically recognise the language of a PJL-prefixed print job, based on the @PJL ENTER LANGUAGE=… statement and switch to the correct parser. It also demonstrates the use of Mako print tickets. This is that link: https://gist.github.com/mako-sdk/d471cd43c882fbfe3a87c25a6977d2c6 |
MAKO-2480 | PostScript parsing errorThis issue was triggered by the presence of Adobe TBCP (tagged binary communications protocol) characters in the PostScript stream. Sample code was developed that intercepts these characters enabling the PostScript parser to complete normally. The code can be found here: https://gist.github.com/mako-sdk/d471cd43c882fbfe3a87c25a6977d2c6 |
MAKO-2448 | Prevent IPSInput() from downsampling imagesAutomatic downsampling to 288dpi is disabled by default and can be controlled via an API. |
MAKO-1979 | Incorrect output for a shading case in the Ghent GWG tests with overprint simulationA fix to the overprint simulation transform to ensure correct rendering of Ghent Working Group print examples. |
Support requests fixed | |
MAKO-2175 | (Mako Support Request #10371) Kerning IssueThe customer reported that text is moving very slightly after processing PDF to PDF with Mako. The problem was found to be the outputting of kerning parameters. Kerning parameters are expressed in PDF in thousandths of text units but Mako was rounding these to integral quantities. This change allows an extra two floating point digits for:
Now fixed and extensive regression testing proves that the problem is solved. |
MAKO-2469 | (Mako Support Request #10372) Color difference issueIf an input PDF page contains a transparency page group, Mako does not emit a page group in an output PDF unless it detects that the page contains transparency. In this instance the input page has a CMYK page group, but no transparency for that page. Had the original page group been present, the renderer would have converted the content to CMYK before converting back to RGB. Without it, it simply paints RGB, causing the rendering difference. Since the absence of the page group is the reason the results render differently, a new option is provided for PDF output (IPDFOutput::setForceEmitPageGroup()) that can be set to true to prevent color differences of this type from occurring. It can be set by either of these methods. Assuming:
Then use
or
It’s safe to use at all times (and may be made the default rendering behavior in future Mako versions). The sample makoconverter allows this parameter to be set on the command line. |
MAKO-2401 | (Mako Support Request #10389) Mako color issueA minor rendering issue was corrected by this fix. |
MAKO-2375 | (Mako Support Request #10391) Dotted path offsetThis issue was triggered by an output optimisation intended to reduce the possibility of identical paths being written multiple times. In this case it had a side effect of changing the way a dashed line was written, whose appearance is dependent on start point and direction. Now fixed. |
MAKO-2320 | (Mako Support Request #10396) RE: SigkillThis job was poorly constructed, with a number of patterns that each contained a ~30MB image that exhausted display list memory allocated for patterns. The introduction of an environment variable allows this limit to be changed: MAKO_RENDER_PATTERN_DL_LIMIT_BYTES Setting to 10MB solved the problem, improving processing time and reducing memory consumption. |
MAKO-2322 | (Mako Support Request #10402) Part of image missingThe job had a non-zero MediaBox that led to incorrect positioning of a pattern. Now fixed. |
MAKO-2470 | (Mako Support Request #10406) Ps undefined errorThis issue was triggered by an indirect reference to a color space array which is not expected. Now fixed. |
MAKO-2471 | (Mako Support Request #10424) Missing image with signature issuesThis issue was triggered by a PDF form (XObject) containing an image that is used multiple times. Subsequent instances incorrectly inherit a clipping path setting that renders it invisible when it should not be. Now fixed. |
MAKO-2439 | (Mako Support Request #10426) Mako evaluation issueAn incorrectly formed PCL/XL file triggered an arithmetic overflow. Bounds checking was added to enable the job to complete and produce output. |
MAKO-2430 | (Mako Support Request #10432) Add support for 16-bit anti-aliased output to IJawsRenderer::renderSeparations() methodSixteen-bit, anti-aliased rendering is now available from this API, producing high-quality renditions even at low resolutions. |
MAKO-2429 | (Mako Support Request #10434) Issue with PCL to PDF conversionThis issue triggered an exception in Mako’s PCL5 input parser, “PCL5 Processing Error: Unexpected stable font…”. Now fixed. |
MAKO-2494 | (Mako Support Request #10454) PDF parsing issueThis issue was triggered by incorrect handling of a CFF (Compact Font Format) font in the PDF. Now fixed. |
Bug fixes | |
MAKO-1865 | 8-bit rendering issues in MakoWhile testing fixes to some 16-bit rendering issues some 8-bit rendering issues were uncovered. Now fixed. |
MAKO-1864 | 16-bit rendering issues in MakoQuality issues affecting 16-bit rendering were fixed. |
MAKO-2334 | PCL file 94.jb2 causes Makoconverter to silently quitThis problem was solved by unrelated work to improve PCL ROP (Raster Operations) performance. |
MAKO-2378 | An image object with an imagemask is treated as opaque, not transparentAn issue with a PowerPoint-originated file and seen only when rendering to RGB, is now fixed. |
MAKO-2341 | Spacing incorrect when setting locale to de-DEThe issue was caused because code to convert a string to a floating-point number was not taking the locale into account and in this case not interpreting a comma as a decimal separator. Now fixed. |
MAKO-1447 | PCL5 & PCL/XL improvementsThe following are a list of customer-supplied PCL5 test files that caused problems in earlier versions of Mako. All were tested in this release and are producing the correct output. |
Filename(s) | Exception | |
repro-case.prn, barcode.prn | Bad arguments error when processing | |
job0-41551.sqjob | Line spacing incorrect when processing | |
ESCAPEEA.prn | Additional page output when processing | |
DTparsing_interpret_.prn | Undefined error when processing | |
75.jb3 | Incorrect output when processing | |
2.jb2 and 74.jb2 | Missing text when processing | |
job0-17126.sqjob | Grid lines are too dark when processing | |
job1-1536619375102807532.sqjob | Vertical lines in table missing or incorrect when processing | |
PCL5 test file 106.jb2 | Objects incorrectly placed when processing |
Distribution
Mako Version 5.2.0 is built for the following platforms:
Android
iOS
Linux (for Debian-based distributions, eg Ubuntu, Mint)
Linux (Centos)
Linux (for Debian Stretch)
Linux (for MUSL distributions, eg Alpine Linux)
macOS
Windows (static and non-static libs, VS 2019 (V142) x64 only)
Windows (static and non-static, VS2015 (V140), x86 and x64)
Windows UWP (Store apps, Windows 10 IoT)