Fixed in https://issues.apache.org/jira/browse/PDFBOX-6186
Snapshot available in a few hours here:
https://repository.apache.org/content/groups/snapshots/org/apache/pdfbox/pdfbox-app/3.0.8-SNAPSHOT/
Tilman
Am 03.04.2026 um 20:28 schrieb Tilman Hausherr:
Hi,
Thank you for reporting this, you're right, the behavior contradicts
the javadoc. I looked at the history and it was introduced in 2020 in
PDFBOX-4954. The previous implementation used
COSArrayList.converterToCOSArray() which would return an empty
COSArray. But even that isn't correct, with null the thread item
should just be removed. I'll create an issue. In the meantime pass an
empty list, or call
documentCatalog.getCOSObject().removeItem(COSName.THREADS);
Tilman
Am 03.04.2026 um 19:56 schrieb Predrag Stojkovi� via users:
Hello all,
In new release of Apache PDFBox 3.0.7 there is a problem with
PDDocumentCatalog.setThreads(null).
This worked fine with version 3.0.1 (or at least I think so), but with new
version it will cause an exception:
java.lang.IllegalArgumentException: List of COSObjectables cannot be null
at org.apache.pdfbox.cos.COSArray.<init>(COSArray.java:56)
at
org.apache.pdfbox.pdmodel.PDDocumentCatalog.setThreads(PDDocumentCatalog.java:241)
at com.ct.ecm.pdf.PDFCompress.compressPDFbyRemovingInfo(PDFCompress.java:156)
When you look at source code of PDDocumentCatalog, it shows that parameter
threads can be null:
/**
* Sets the list of threads for this pdf document.
*
* @param threads The list of threads, or null to clear it.
*/
public void setThreads(List<PDThread> threads)
{
COSArray threadsArray = new COSArray(threads);
threadsArray.setDirect(false);
root.setItem(COSName.THREADS, threadsArray);
}
So, it is supposed to accept null as value for threads parameter.
However, the constructor of COSArray class is testing if this argument is null,
and throws an exception:
/**
* Use the given list to initialize the COSArray.
*
* @param cosObjectables the initial list of COSObjectables
*/
public COSArray(List<? extends COSObjectable> cosObjectables)
{
if (cosObjectables == null)
{
throw new IllegalArgumentException("List of COSObjectables cannot be
null");
}
updateState = new COSUpdateState(this);
setDirect(true);
cosObjectables.forEach(cosObjectable ->
objects.add(cosObjectable != null ? cosObjectable.getCOSObject() :
null));
}
Please fix this in new version, and for now please tell me the alternative way
to clear threads in PDDocumentCatalog.
Thank you and best regards,
Predrag