Author: lehmi Date: Thu Jul 25 06:06:10 2024 New Revision: 1919511 URL: http://svn.apache.org/viewvc?rev=1919511&view=rev Log: PDFBOX-5481: wrap indirect objects whenever they are added directly to a COSDictionary or COSArray
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java?rev=1919511&r1=1919510&r2=1919511&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java Thu Jul 25 06:06:10 2024 @@ -82,8 +82,18 @@ public class COSArray extends COSBase im */ public void add( COSBase object ) { - objects.add( object ); - getUpdateState().update(object); + if ((object instanceof COSDictionary || object instanceof COSArray) && !object.isDirect() + && object.getKey() != null) + { + COSObject cosObject = new COSObject(object, object.getKey()); + objects.add(cosObject); + getUpdateState().update(cosObject); + } + else + { + objects.add(object); + getUpdateState().update(object); + } } /** @@ -98,8 +108,7 @@ public class COSArray extends COSBase im { base = object.getCOSObject(); } - objects.add(base); - getUpdateState().update(base); + add(base); } /** @@ -111,8 +120,18 @@ public class COSArray extends COSBase im */ public void add( int i, COSBase object) { - objects.add( i, object ); - getUpdateState().update(object); + if ((object instanceof COSDictionary || object instanceof COSArray) && !object.isDirect() + && object.getKey() != null) + { + COSObject cosObject = new COSObject(object, object.getKey()); + objects.add(i, cosObject); + getUpdateState().update(cosObject); + } + else + { + objects.add(i, object); + getUpdateState().update(object); + } } /** @@ -200,8 +219,18 @@ public class COSArray extends COSBase im */ public void set( int index, COSBase object ) { - objects.set( index, object ); - getUpdateState().update(object); + if ((object instanceof COSDictionary || object instanceof COSArray) && !object.isDirect() + && object.getKey() != null) + { + COSObject cosObject = new COSObject(object, object.getKey()); + objects.set(index, cosObject); + getUpdateState().update(cosObject); + } + else + { + objects.set(index, object); + getUpdateState().update(object); + } } /** @@ -229,8 +258,7 @@ public class COSArray extends COSBase im { base = object.getCOSObject(); } - objects.set( index, base ); - getUpdateState().update(base); + set(index, base); } /** Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java?rev=1919511&r1=1919510&r2=1919511&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java Thu Jul 25 06:06:10 2024 @@ -203,8 +203,18 @@ public class COSDictionary extends COSBa } else { - items.put(key, value); - getUpdateState().update(value); + if ((value instanceof COSDictionary || value instanceof COSArray) && !value.isDirect() + && value.getKey() != null) + { + COSObject cosObject = new COSObject(value, value.getKey()); + items.put(key, cosObject); + getUpdateState().update(cosObject); + } + else + { + items.put(key, value); + getUpdateState().update(value); + } } } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java?rev=1919511&r1=1919510&r2=1919511&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java Thu Jul 25 06:06:10 2024 @@ -686,12 +686,7 @@ public class Splitter destCatalog.setViewerPreferences(sourceCatalog.getViewerPreferences()); destCatalog.setLanguage(sourceCatalog.getLanguage()); destCatalog.setMarkInfo(sourceCatalog.getMarkInfo()); - // copy the COS-object itself instead of the PD-object to avoid a malformed result - COSObject metaData = sourceCatalog.getCOSObject().getCOSObject(COSName.METADATA); - if (metaData != null) - { - destCatalog.getCOSObject().setItem(COSName.METADATA, metaData); - } + destCatalog.setMetadata(sourceCatalog.getMetadata()); return document; }