You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2017/05/06 14:14:03 UTC
svn commit: r1794147 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
Author: tilman
Date: Sat May 6 14:14:03 2017
New Revision: 1794147
URL: http://svn.apache.org/viewvc?rev=1794147&view=rev
Log:
PDFBOX-3781: insert xobjects instead of overwrite AcroForm /DR entry when it exists, as suggested by Marco Monacelli
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1794147&r1=1794146&r2=1794147&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Sat May 6 14:14:03 2017
@@ -515,16 +515,32 @@ public class PDDocument implements Close
signatureField.getWidgets().get(0).setAppearance(ap);
}
- private void assignAcroFormDefaultResource(PDAcroForm acroForm, COSDictionary dict)
+ private void assignAcroFormDefaultResource(PDAcroForm acroForm, COSDictionary newDict)
{
- // read and set AcroForm default resource dictionary /DR if available
- COSBase base = dict.getDictionaryObject(COSName.DR);
- if (base instanceof COSDictionary)
+ // read and set/update AcroForm default resource dictionary /DR if available
+ COSBase newBase = newDict.getDictionaryObject(COSName.DR);
+ if (newBase instanceof COSDictionary)
{
- COSDictionary dr = (COSDictionary) base;
- dr.setDirect(true);
- dr.setNeedToBeUpdated(true);
- acroForm.getCOSObject().setItem(COSName.DR, dr);
+ COSDictionary newDR = (COSDictionary) newBase;
+ PDResources defaultResources = acroForm.getDefaultResources();
+ if (defaultResources == null)
+ {
+ acroForm.getCOSObject().setItem(COSName.DR, newDR);
+ newDR.setDirect(true);
+ newDR.setNeedToBeUpdated(true);
+ }
+ else
+ {
+ COSDictionary oldDR = defaultResources.getCOSObject();
+ COSBase newXObjectBase = newDR.getItem(COSName.XOBJECT);
+ COSBase oldXObjectBase = oldDR.getItem(COSName.XOBJECT);
+ if (newXObjectBase instanceof COSDictionary &&
+ oldXObjectBase instanceof COSDictionary)
+ {
+ ((COSDictionary) oldXObjectBase).addAll((COSDictionary) newXObjectBase);
+ oldDR.setNeedToBeUpdated(true);
+ }
+ }
}
}