Skip to main content
Skip table of contents

Release RUPS 26.01

Release date: Jan 12th, 2026

We are pleased to announce the release of RUPS version 26.01! This release focuses on improving support for some of the more cutting edge PDF features, like adding support for ASN.1 structures coming with the ISO/TS 32004 extension.

As for something even beyond the cutting edge, we've also added experimental support for the upcoming Brotli stream compression, with some stream filter manipulation features to boot.

Brotli compression support

It has been a while since a new stream filter has been added to PDF. You would need to dig pretty far back to find that the most recently added /JPXDecode filter was a part of the PDF 1.5 spec, released in 2003. But that's JPEG2000. If we were to look for a general purpose filter, you will find good-old /FlateDecode, which was added... 30 years ago.

But that's about to change, as Brotli compression is coming to PDF and we will have a brand new /BrotliDecode filter to play with. While it hasn't been officially standardized yet, proof-of-concept support for Brotli has been added in iText Core 9.5.0. And since we tend to thoroughly dogfood our own products, Brotli compression is now available within RUPS as one of the earliest adopters of the feature.

So there is now support for reading and writing Brotli compressed streams with RUPS. This brings a convenient way of testing whether your own Brotli PDF implementation is compatible with the one found in iText Core, and vice versa.

Stream filter manipulation support

Even though we've added support for a brand new stream filter, there wasn't a good way to interact with stream filters in any meaningful way within RUPS. You were pretty much limited to editing streams, which would remove all filters and then the stream would be auto-magically compressed with Flate during save. This also meant that the edited stream you saw in RUPS would not match what you would get in the resulting PDF file, which is pretty annoying.

However, this is no longer the case with the 26.01 release! First of all, now you can change the default compression behavior. By default, we still compress streams with Flate when editing or when recreating object streams. But now you can select Brotli as your compression option of choice, or just disable compression all together. This option can be changed in the Preferences window.

What is more interesting though is that all the magic, which was happening invisibly at the end before, now happens immediately and the changes are reflected in the PDF object tree. This means that as soon as you click Save to Stream, stream data gets compressed according to what you have selected in Preferences with /Length and /Filter values being updated along with it.

Additionally, there are two new context menu options, when you are working with streams. With the Remove All Filters option you can decompress the stream and store it in plain bytes, without any filters applied. And with the Apply Filter option you can add another filter on top of what is already there. So if you ever wanted to do an RLE pass on your stream, further compress it with Flate and then encode the resulting binary data in hex, for some odd reason, now you can do that.

As for which filters you can apply, here is a list:

  • /ASCII85Decode

  • /ASCIIHexDecode

  • /BrotliDecode

  • /FlateDecode

  • /RunLengthDecode

All of the available filters currently use the default compression settings, which are defined in iText Core.

ISO/TS 32004 MAC extension support

In the previous release we added ASN.1 data structure support for objects related to digital signatures. But there is another place where ASN.1 parsing could be useful. And that is working with message authentication codes, which were added in ISO/TS 32004 to add integrity protection for encrypted PDF documents. With this release, you should be able to easily view cryptographic data related to MAC, whether it is /Standalone or /AttachedToSig.

While implementing this, we've also noticed that byte strings of signatures were broken in RUPS when you operated with encrypted documents. This has now also been fixed.

Other improvements

There have been some additional fixes and QoL improvements:

  • Shortcuts on macOS now use the correct modifier key (Cmd instead of Ctrl).

  • There is now a menu entry to exit RUPS in the File menu. Available via a Ctrl/Cmd + Q shortcut.

  • Error handling has been improved, when opening invalid documents.

  • Structure tree parsing has been improved and should show a tree with proper node titles more often.

  • Some additional "OID to text" mappings were added.

Pull requests

For this release we would like to thank @YoungJules for their contribution to improve error messaging when RUPS fails to open a document properly. Now it should be more clear what happened, as before you would need to dig through the exception stack trace to figure that out.

Downloads:

Changelog

New features

  • Brotli compression support.

  • Stream filter manipulation support.

  • ISO/TS 32004 MAC extension support.

Improvements

  • Add "Exit" menu item (Ctrl/Cmd + Q).

  • Change hotkeys on macOS to use Cmd instead of Ctrl.

  • Improve initial error dialog size calculations and make it resizable.

  • Add human-readable descriptions for more OIDs.

  • Improve error message, when opening broken documents. Thanks @YoungJules!

Bugfixes

  • Fix NullPointerException being thrown, when opening broken documents.

  • Fix signature /Contents strings being incorrect, when opening encrypted documents.

  • Fix structure tree node not having proper titles, when structure elements nodes are missing an explicit /Type.

  • Fix structure tree parsing throwing a NullPointerException in some niche cases.

Miscellaneous

  • Update dependencies to their latest versions.

Full Changelog: 25.03...26.01

FAQ (latest ones)

JavaScript errors detected

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

If this problem persists, please contact our support.