Release Notes -- Apache PDFBox -- Version 2.0.18

Introduction
------------

The Apache PDFBox library is an open source Java tool for working with PDF documents.

This is an incremental bugfix release based on the earlier 2.0.17 release. It contains
a couple of fixes and small improvements.

For more details on these changes and all the other fixes and improvements
included in this release, please refer to the following issues on the
PDFBox issue tracker at https://issues.apache.org/jira/browse/PDFBOX.

Bug

[PDFBOX-4654] - PDFToImage shows reader image formats in usage
[PDFBOX-4655] - ImageIOUtil.WriteImage creates huge PNG images when used with default quality on jdk11
[PDFBOX-4659] - PDFBOX-3531 has re-appeared when trying to use  "sun.java2d.cmm.kcms.KcmsServiceProvider" in JAVA 1.8_222
[PDFBOX-4661] - Regression No Unicode mapping with Identity-H font
[PDFBOX-4662] - ClassCastException: org.bouncycastle.asn1.DLTaggedObject cannot be cast to org.bouncycastle.asn1.DERTaggedObject
[PDFBOX-4665] - PDImageXObject createFromFileByExtension does not close FileInputStream in event of error
[PDFBOX-4666] - StackOverflowError with PDFTextStripper.getText()
[PDFBOX-4667] - Issue in FontMapperImpl#isCharSetMatch when font codePageRange is -1
[PDFBOX-4672] - Draws the attachment image to the PDF document, and the image displays as a black block
[PDFBOX-4674] - PDF Page Render Background Image has Gray Smudges
[PDFBOX-4678] - Use PDFontFactory. CreateDefaultFont font to render text, the exported PDF document has a mistake
[PDFBOX-4683] - Could not find referenced cmap stream Adobe-Japan1-7
[PDFBOX-4687] - "Iterator.next()" methods should throw "NoSuchElementException"
[PDFBOX-4688] - "BigDecimal(double)" should not be used
[PDFBOX-4693] - PDF documents with rotated form field(90° degrees in my case) that apply form flattening appear squ
[PDFBOX-4696] - Endless loop in OCSP certificate check
[PDFBOX-4701] - TextPosition.equal() fails after getDir()
[PDFBOX-4706] - support /UserUnit
[PDFBOX-4711] - java.lang.ClassCastException: org.apache.pdfbox.cos.COSDictionary cannot be cast to org.apache.pdfbox.cos.COSStream
[PDFBOX-4712] - Appearance dictionary should not be empty
[PDFBOX-4713] - /AS is required if /AP contains a subdictionary
[PDFBOX-4716] - ipag00303.php does not exist, mvn clean install!

New Feature

[PDFBOX-4682] - NPE at PDSimpleFont.isStandard14()

Improvement

[PDFBOX-4341] - [Patch] PNGConverter: PNG bytes to PDImageXObject converter
[PDFBOX-4653] - Clarify what font is missing when not in resources
[PDFBOX-4657] - Use smooth interpolation for stencils too
[PDFBOX-4685] - Add example of usage of separation color (spot color)
[PDFBOX-4686] - Add text to AcroForm examples
[PDFBOX-4689] - Invisible Signature should have empty Appearance Dictionary
[PDFBOX-4691] - JPEGFactory should not decode JPEG files when only meta data is needed
[PDFBOX-4694] - LockedContents flag
[PDFBOX-4695] - PDPropBuildDataDict missing setNonEFontNoWarn
[PDFBOX-4710] - allow precise RGB stroke colors with setStrokingColor

Wish

[PDFBOX-4699] - ERROR FeatureRecord array not alphabetically sorted by FeatureTag

Task

[PDFBOX-4708] - Add PDAcroFormFlattenTest to 2.0 branch
[PDFBOX-4715] - Need to add release version for maven-compiler-plugin

Sub-task

[PDFBOX-4703] - Support acroform /Ff flag for signature fields

Release Contents
----------------

This release consists of a single source archive packaged as a zip file.
The archive can be unpacked with the jar tool from your JDK installation.
See the README.txt file for instructions on how to build this release.

The source archive is accompanied by a SHA512 checksum and a PGP signature
that you can use to verify the authenticity of your download.
The public key used for the PGP signature can be found at
https://www.apache.org/dist/pdfbox/KEYS.

About Apache PDFBox
-------------------

Apache PDFBox is an open source Java library for working with PDF documents.
This project allows creation of new PDF documents, manipulation of existing
documents and the ability to extract content from documents. Apache PDFBox
also includes several command line utilities. Apache PDFBox is published
under the Apache License, Version 2.0.

For more information, visit http://pdfbox.apache.org/

About The Apache Software Foundation
------------------------------------

Established in 1999, The Apache Software Foundation provides organizational,
legal, and financial support for more than 100 freely-available,
collaboratively-developed Open Source projects. The pragmatic Apache License
enables individual and commercial users to easily deploy Apache software;
the Foundation's intellectual property framework limits the legal exposure
of its 2,500+ contributors.

For more information, visit http://www.apache.org/
