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 2015/04/23 17:56:03 UTC
svn commit: r1675664 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
Author: tilman
Date: Thu Apr 23 15:56:02 2015
New Revision: 1675664
URL: http://svn.apache.org/r1675664
Log:
PDFBOX-2576: split long method
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=1675664&r1=1675663&r2=1675664&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 Thu Apr 23 15:56:02 2015
@@ -223,32 +223,15 @@ public class PDDocument implements Close
List<PDAnnotation> annotations = page.getAnnotations();
List<PDFieldTreeNode> fields = acroForm.getFields();
- PDSignatureField signatureField = null;
- if(fields == null)
+ if (fields == null)
{
fields = new ArrayList<PDFieldTreeNode>();
acroForm.setFields(fields);
}
- for (PDFieldTreeNode pdField : fields)
- {
- if (pdField instanceof PDSignatureField)
- {
- PDSignature signature = ((PDSignatureField) pdField).getSignature();
- if (signature != null && signature.getDictionary().equals(sigObject.getDictionary()))
- {
- signatureField = (PDSignatureField) pdField;
- }
- }
- }
+ PDSignatureField signatureField = findSignatureField(fields, sigObject);
if (signatureField == null)
{
- signatureField = new PDSignatureField(acroForm);
-
- // append the signature object
- signatureField.setSignature(sigObject);
-
- // backward linking
- signatureField.getWidget().setPage(page);
+ signatureField = createSignatureField(acroForm, sigObject, page);
}
// Set the AcroForm Fields
@@ -284,6 +267,35 @@ public class PDDocument implements Close
page.getCOSObject().setNeedToBeUpdated(true);
}
+ private PDSignatureField createSignatureField(PDAcroForm acroForm, PDSignature sigObject, PDPage page)
+ throws IOException
+ {
+ PDSignatureField signatureField = new PDSignatureField(acroForm);
+ // append the signature object
+ signatureField.setSignature(sigObject);
+ // backward linking
+ signatureField.getWidget().setPage(page);
+ return signatureField;
+ }
+
+ // search acroform field list for signature field with specific signature dictionary
+ private PDSignatureField findSignatureField(List<PDFieldTreeNode> fields, PDSignature sigObject)
+ {
+ PDSignatureField signatureField = null;
+ for (PDFieldTreeNode pdField : fields)
+ {
+ if (pdField instanceof PDSignatureField)
+ {
+ PDSignature signature = ((PDSignatureField) pdField).getSignature();
+ if (signature != null && signature.getDictionary().equals(sigObject.getDictionary()))
+ {
+ signatureField = (PDSignatureField) pdField;
+ }
+ }
+ }
+ return signatureField;
+ }
+
// return true if the field already existed in the field list, in that case, it is marked for update
private boolean checkSignatureField(List<PDFieldTreeNode> acroFormFields, PDSignatureField signatureField)
{
@@ -306,15 +318,12 @@ public class PDDocument implements Close
}
private void prepareVisibleSignature(PDSignatureField signatureField, PDAcroForm acroForm,
- COSDocument visualSignature) throws IllegalArgumentException
+ COSDocument visualSignature)
{
// Obtain visual signature object
- List<COSObject> cosObjects = visualSignature.getObjects();
-
boolean annotNotFound = true;
boolean sigFieldNotFound = true;
- COSDictionary acroFormDict = acroForm.getDictionary();
- for (COSObject cosObject : cosObjects)
+ for (COSObject cosObject : visualSignature.getObjects())
{
if (!annotNotFound && !sigFieldNotFound)
{
@@ -325,37 +334,22 @@ public class PDDocument implements Close
if (base instanceof COSDictionary)
{
COSDictionary cosBaseDict = (COSDictionary) base;
- COSBase ft = cosBaseDict.getDictionaryObject(COSName.FT);
- COSBase type = cosBaseDict.getDictionaryObject(COSName.TYPE);
- COSBase apDict = cosBaseDict.getDictionaryObject(COSName.AP);
-
+
// Search for signature annotation
+ COSBase type = cosBaseDict.getDictionaryObject(COSName.TYPE);
if (annotNotFound && COSName.ANNOT.equals(type))
{
- // Read and set the Rectangle for visual signature
- COSArray rectAry = (COSArray) cosBaseDict.getDictionaryObject(COSName.RECT);
- PDRectangle rect = new PDRectangle(rectAry);
- signatureField.getWidget().setRectangle(rect);
+ assignSignatureRectangle(signatureField, cosBaseDict);
annotNotFound = false;
}
-
- // Search for Signature-Field
+
+ // Search for signature field
+ COSBase ft = cosBaseDict.getDictionaryObject(COSName.FT);
+ COSBase apDict = cosBaseDict.getDictionaryObject(COSName.AP);
if (sigFieldNotFound && COSName.SIG.equals(ft) && apDict != null)
{
- // read and set Appearance Dictionary
- PDAppearanceDictionary ap =
- new PDAppearanceDictionary((COSDictionary)cosBaseDict.getDictionaryObject(COSName.AP));
- ap.getCOSObject().setDirect(true);
- signatureField.getWidget().setAppearance(ap);
-
- // read and set AcroForm DefaultResource
- COSDictionary dr = (COSDictionary) cosBaseDict.getDictionaryObject(COSName.DR);
- if (dr != null)
- {
- dr.setDirect(true);
- dr.setNeedToBeUpdated(true);
- acroFormDict.setItem(COSName.DR, dr);
- }
+ assignAppearanceDictionary(signatureField, cosBaseDict);
+ assignAcroFormDefaultResource(acroForm, cosBaseDict);
sigFieldNotFound = false;
}
}
@@ -367,10 +361,41 @@ public class PDDocument implements Close
}
}
- private void prepareNonVisibleSignature(PDSignatureField signatureField, PDAcroForm acroForm) throws IOException
+ private void assignSignatureRectangle(PDSignatureField signatureField, COSDictionary cosBaseDict)
+ {
+ // Read and set the Rectangle for visual signature
+ COSArray rectAry = (COSArray) cosBaseDict.getDictionaryObject(COSName.RECT);
+ PDRectangle rect = new PDRectangle(rectAry);
+ signatureField.getWidget().setRectangle(rect);
+ }
+
+ private void assignAppearanceDictionary(PDSignatureField signatureField, COSDictionary dict)
+ {
+ // read and set Appearance Dictionary
+ PDAppearanceDictionary ap
+ = new PDAppearanceDictionary((COSDictionary) dict.getDictionaryObject(COSName.AP));
+ ap.getCOSObject().setDirect(true);
+ signatureField.getWidget().setAppearance(ap);
+ }
+
+ private void assignAcroFormDefaultResource(PDAcroForm acroForm, COSDictionary dict)
+ {
+ // read and set AcroForm DefaultResource
+ COSDictionary dr = (COSDictionary) dict.getDictionaryObject(COSName.DR);
+ if (dr != null)
+ {
+ dr.setDirect(true);
+ dr.setNeedToBeUpdated(true);
+ COSDictionary acroFormDict = acroForm.getDictionary();
+ acroFormDict.setItem(COSName.DR, dr);
+ }
+ }
+
+ private void prepareNonVisibleSignature(PDSignatureField signatureField, PDAcroForm acroForm)
+ throws IOException
{
- // Set rectangle for non-visual signature to 0 0 0 0
- signatureField.getWidget().setRectangle(new PDRectangle()); // rectangle array [ 0 0 0 0 ]
+ // Set rectangle for non-visual signature to rectangle array [ 0 0 0 0 ]
+ signatureField.getWidget().setRectangle(new PDRectangle());
// Clear AcroForm / Set DefaultRessource
acroForm.setDefaultResources(null);
// Set empty Appearance-Dictionary