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 2019/08/07 18:14:52 UTC
svn commit: r1864663 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java
Author: tilman
Date: Wed Aug 7 18:14:52 2019
New Revision: 1864663
URL: http://svn.apache.org/viewvc?rev=1864663&view=rev
Log:
PDFBOX-4071: use try-with-resources
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java?rev=1864663&r1=1864662&r2=1864663&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java Wed Aug 7 18:14:52 2019
@@ -86,88 +86,71 @@ public class PDFTemplateCreator
//create template
pdfBuilder.createTemplate(page);
- PDDocument template = pdfStructure.getTemplate();
-
- //create /AcroForm
- pdfBuilder.createAcroForm(template);
- PDAcroForm acroForm = pdfStructure.getAcroForm();
- // AcroForm contains signature fields
- pdfBuilder.createSignatureField(acroForm);
- PDSignatureField pdSignatureField = pdfStructure.getSignatureField();
-
- // create signature
- //TODO
- // The line below has no effect with the CreateVisibleSignature example.
- // The signature field is needed as a "holder" for the /AP tree,
- // but the /P and /V PDSignatureField entries are ignored by PDDocument.addSignature
- pdfBuilder.createSignature(pdSignatureField, page, "");
-
- // that is /AcroForm/DR entry
- pdfBuilder.createAcroFormDictionary(acroForm, pdSignatureField);
-
- // create AffineTransform
- pdfBuilder.createAffineTransform(properties.getTransform());
- AffineTransform transform = pdfStructure.getAffineTransform();
-
- // rectangle, formatter, image. /AcroForm/DR/XObject contains that form
- pdfBuilder.createSignatureRectangle(pdSignatureField, properties);
- pdfBuilder.createFormatterRectangle(properties.getFormatterRectangleParameters());
- PDRectangle bbox = pdfStructure.getFormatterRectangle();
- pdfBuilder.createSignatureImage(template, properties.getImage());
-
- // create form stream, form and resource.
- pdfBuilder.createHolderFormStream(template);
- PDStream holderFormStream = pdfStructure.getHolderFormStream();
- pdfBuilder.createHolderFormResources();
- PDResources holderFormResources = pdfStructure.getHolderFormResources();
- pdfBuilder.createHolderForm(holderFormResources, holderFormStream, bbox);
-
- // that is /AP entry the appearance dictionary.
- pdfBuilder.createAppearanceDictionary(pdfStructure.getHolderForm(), pdSignatureField);
-
- // inner form stream, form and resource (hlder form containts inner form)
- pdfBuilder.createInnerFormStream(template);
- pdfBuilder.createInnerFormResource();
- PDResources innerFormResource = pdfStructure.getInnerFormResources();
- pdfBuilder.createInnerForm(innerFormResource, pdfStructure.getInnerFormStream(), bbox);
- PDFormXObject innerForm = pdfStructure.getInnerForm();
-
- // inner form must be in the holder form as we wrote
- pdfBuilder.insertInnerFormToHolderResources(innerForm, holderFormResources);
-
- // Image form is in this structure: /AcroForm/DR/FRM/Resources/XObject/n2
- pdfBuilder.createImageFormStream(template);
- PDStream imageFormStream = pdfStructure.getImageFormStream();
- pdfBuilder.createImageFormResources();
- PDResources imageFormResources = pdfStructure.getImageFormResources();
- pdfBuilder.createImageForm(imageFormResources, innerFormResource, imageFormStream, bbox,
- transform, pdfStructure.getImage());
-
- pdfBuilder.createBackgroundLayerForm(innerFormResource, bbox);
-
- // now inject procSetArray
- pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, imageFormResources,
- holderFormResources, pdfStructure.getProcSet());
-
- COSName imageFormName = pdfStructure.getImageFormName();
- COSName imageName = pdfStructure.getImageName();
- COSName innerFormName = pdfStructure.getInnerFormName();
-
- // now create Streams of AP
- pdfBuilder.injectAppearanceStreams(holderFormStream, imageFormStream, imageFormStream,
- imageFormName, imageName, innerFormName, properties);
- pdfBuilder.createVisualSignature(template);
- pdfBuilder.createWidgetDictionary(pdSignatureField, holderFormResources);
-
- InputStream in = getVisualSignatureAsStream(pdfStructure.getVisualSignature());
- LOG.info("stream returning started, size= " + in.available());
-
- // we must close the document
- template.close();
-
- // return result of the stream
- return in;
+ try (PDDocument template = pdfStructure.getTemplate())
+ {
+ //create /AcroForm
+ pdfBuilder.createAcroForm(template);
+ PDAcroForm acroForm = pdfStructure.getAcroForm();
+ // AcroForm contains signature fields
+ pdfBuilder.createSignatureField(acroForm);
+ PDSignatureField pdSignatureField = pdfStructure.getSignatureField();
+ // create signature
+ //TODO
+ // The line below has no effect with the CreateVisibleSignature example.
+ // The signature field is needed as a "holder" for the /AP tree,
+ // but the /P and /V PDSignatureField entries are ignored by PDDocument.addSignature
+ pdfBuilder.createSignature(pdSignatureField, page, "");
+ // that is /AcroForm/DR entry
+ pdfBuilder.createAcroFormDictionary(acroForm, pdSignatureField);
+ // create AffineTransform
+ pdfBuilder.createAffineTransform(properties.getTransform());
+ AffineTransform transform = pdfStructure.getAffineTransform();
+ // rectangle, formatter, image. /AcroForm/DR/XObject contains that form
+ pdfBuilder.createSignatureRectangle(pdSignatureField, properties);
+ pdfBuilder.createFormatterRectangle(properties.getFormatterRectangleParameters());
+ PDRectangle bbox = pdfStructure.getFormatterRectangle();
+ pdfBuilder.createSignatureImage(template, properties.getImage());
+ // create form stream, form and resource.
+ pdfBuilder.createHolderFormStream(template);
+ PDStream holderFormStream = pdfStructure.getHolderFormStream();
+ pdfBuilder.createHolderFormResources();
+ PDResources holderFormResources = pdfStructure.getHolderFormResources();
+ pdfBuilder.createHolderForm(holderFormResources, holderFormStream, bbox);
+ // that is /AP entry the appearance dictionary.
+ pdfBuilder.createAppearanceDictionary(pdfStructure.getHolderForm(), pdSignatureField);
+ // inner form stream, form and resource (hlder form containts inner form)
+ pdfBuilder.createInnerFormStream(template);
+ pdfBuilder.createInnerFormResource();
+ PDResources innerFormResource = pdfStructure.getInnerFormResources();
+ pdfBuilder.createInnerForm(innerFormResource, pdfStructure.getInnerFormStream(), bbox);
+ PDFormXObject innerForm = pdfStructure.getInnerForm();
+ // inner form must be in the holder form as we wrote
+ pdfBuilder.insertInnerFormToHolderResources(innerForm, holderFormResources);
+ // Image form is in this structure: /AcroForm/DR/FRM/Resources/XObject/n2
+ pdfBuilder.createImageFormStream(template);
+ PDStream imageFormStream = pdfStructure.getImageFormStream();
+ pdfBuilder.createImageFormResources();
+ PDResources imageFormResources = pdfStructure.getImageFormResources();
+ pdfBuilder.createImageForm(imageFormResources, innerFormResource, imageFormStream, bbox,
+ transform, pdfStructure.getImage());
+ pdfBuilder.createBackgroundLayerForm(innerFormResource, bbox);
+ // now inject procSetArray
+ pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, imageFormResources,
+ holderFormResources, pdfStructure.getProcSet());
+ COSName imageFormName = pdfStructure.getImageFormName();
+ COSName imageName = pdfStructure.getImageName();
+ COSName innerFormName = pdfStructure.getInnerFormName();
+ // now create Streams of AP
+ pdfBuilder.injectAppearanceStreams(holderFormStream, imageFormStream, imageFormStream,
+ imageFormName, imageName, innerFormName, properties);
+ pdfBuilder.createVisualSignature(template);
+ pdfBuilder.createWidgetDictionary(pdSignatureField, holderFormResources);
+ InputStream in = getVisualSignatureAsStream(pdfStructure.getVisualSignature());
+ LOG.info("stream returning started, size= " + in.available());
+ // return result of the stream
+ return in;
+ }
}
private InputStream getVisualSignatureAsStream(COSDocument visualSignature) throws IOException