In this release of your favorite open-source PDF library for Java and .NET (and more!), we’re announcing something our development team have been working on for a while: iText Core now has support for GraalVM Native Image compilation. This is something we’re pretty excited about, and we hope you are too! However, if you still need convincing you can learn more about what exactly this means below.
Before we begin though, allow us to give you a quick overview of the development of iText over the past twelve months.
A Brief History of iText 8
Around this time last year, we released version 8.0 of the iText Suite PDF SDK; the first release since iText joined the Apryse family of products. Version 8 brought significant enhancements to the iText Core library, with new features like FIPS-140-2 support, layout-based forms creation, and supporting the latest digital signature standards. Naturally, many of these improvements also benefitted the add-ons making up the rest of the iText Suite.
Subsequent releases included support for the latest PDF/A-4 and PDF/UA-2 standards for archiving and accessibility. We also introduced great features to iText Core, such as new high-level APIs for PAdES signing, and customizable annotation flattening.
Elsewhere in the iText Suite, the popular pdfHTML add-on received improved CSS flex capabilities and advanced multi-column support. Not only that, pdfOCR gained the ability to intelligently recognize and convert table data to the correct tag structure.
Now, the introduction of GraalVM Native Image support for iText Core is just one more step in iText’s evolution - which now reaches back almost a quarter of a century!
That’s by no means all the news we have for this release though. There’s also significant improvements for PDF/UA creation and digital signature validation, and more besides.
Release iText Core 8.0.4
GraalVM Native Image Support
If you’re not familiar with GraalVM’s ahead-of-time compilation technology, it means code is compiled to a binary standalone executable - rather than running in a virtual machine. The iText Core 8.0.4 libraries are listed on the GraalVM Native Image Libraries and Frameworks page, and are already rated with the highest test rating level.
We are planning to go into more detail about the how and why of implementing support in iText; stay tuned for a future article on this subject.
For now though, some cool things about why you might use Native Image executables:
- Resource Efficiency: They are cheaper to run, since they use a fraction of the resources required by a Java Virtual Machine.
- Fast Startup: Native Image executables start in milliseconds.
- Immediate Peak Performance: They deliver peak performance immediately, with no warmup.
- Efficient Deployment: Native executables can be packaged into lightweight container images for fast and efficient deployment.
- Reduced Attack Surface: Since they only include the code required at runtime, native executables present a reduced attack surface.
Native Image executables can require significantly less CPU and memory, and be especially ideal for cloud deployments. since they are small, fast, and don’t require spinning up a virtual machine to use. You might even squeeze a little more performance with profile-guided optimization - if you really need it!
Enhanced PDF/UA Creation
If you remember from our previous release, we introduced some general checks and helper logic for PDF/A and PDF/UA generation. This time we’ve added some additional APIs for even more user-friendly PDF/UA document creation - which you can see in action in our updated PDF/UA (Java/.NET) example on GitHub. In addition, form field metadata can now be accessed and changed using the IAccessibleElement
layout element.
If you need to generate conformant PDF/UA-1 documents, we’ve implemented some helpful automated checks that will run during document creation. These will alert you with descriptive exceptions based on the Matterhorn Protocol if any missing tags or incorrectly tagged content are detected.
Of course, it’s not possible to identify all failure conditions in software alone - at least not yet! However, the additional detail provided by these more descriptive exceptions will be a boon when tracking down and resolving issues.
See this example on our Knowledge Base for more details (and handy code snippets) on these changes!
Digital Signature Validation
Improved OCSP Validation
Our work on enhancing digital signing functionality continues, with improved validation of digital signatures. Firstly, we’ve revised the logic of the OCSPVerifier
class (Java/.NET) which allows you to verify a digital certificate against one or more Online Certificate Status Protocol responses. This is useful when you want to determine the status of a certificate without requiring Certificate Revocation Lists (CRLs).
Read and Roll Back Document Revisions
We have incorporated new features into the kernel
and sign
modules. You can now get iText to parse and gather revisions made to a signed document, and if required, roll back to an earlier version.
Bug fixes and miscellaneous
We’ve improved iText’s tagging for interactive form fields, and fixed a bug for list boxes if the number of items exceeded what the page size would allow. There’s also some font-related fixes; one where the font changed after a special character, and one for not selecting an appropriate font if the character was neither first nor significant.
The license key library has been updated to version 4.1.4 in order to resolve a vulnerability in the ion-java
library - see CVE-2024-21634 for more details. While we were not directly affected, this library is a transitive dependency for our licensing-remote
module. We resolved the issue by updating our licensing system to use a newer version of Amazon Kinesis.
As always, check the Changelog for more details. Also, the release notes contain links to our Java and .NET GitHub repositories which are continually updated with useful code samples for iText Core and its add-ons.
Release pdfHTML 5.0.4
pdfHTML is an iText Core add-on for creating PDF from HTML/XML (and associated CSS).
This release of pdfHTML now allows more flexible customization of bookmarks (known as outlines in the PDF specification) using the OutlineHandler component. We’ve also introduced the option for improved out-of-the-box behavior using class-based outline handling rather than the previous purely tag-based behavior. More details can be found in our documentation, along with code samples demonstrating how to use the new functionality.
In addition, we’ve fixed some bugs relating to the conversion of rows in tables.
Release pdfXFA 4.0.4
pdfXFA is an iText Core add-on that enables flattening dynamic XFA forms to static PDF. Converted XFA forms can also be digitally signed for additional security, for further processing in PDF workflows, or for archiving.
This release of pdfXFA fixes a bug where in certain scenarios, flattening data in an XFA form field could overflow the page. The new behavior splits the data onto the following page, and preserving the data in the flattened PDF.
Final thoughts
Since becoming part of the Apryse family in February of last year, we’ve added a ton of new features and capabilities to iText. We’ve focused on key areas like improving digital signing capabilities, supporting the latest PDF standards, and enhanced document creation/templating.
Our mission is to support and popularize new standards and technology for the open-source community, and make iText developers' lives easier and more productive. Implementing GraalVM Native Image support for iText Core reinforces that commitment to the community, and we’ll continue along that path for future releases.
Don't forget that our free 30-day trial allows you to try out the entire iText Suite, which includes iText Core and all our open and closed source add-ons. The trial is covered by the terms of our commercial license, which releases you from the AGPLv3 conditions and keeps your intellectual property safe.
Until next time, happy coding!