diff options
| author | Thomas <> | 2023-12-19 13:29:12 +0100 | 
|---|---|---|
| committer | Thomas <> | 2023-12-19 13:29:12 +0100 | 
| commit | 1bf5a6f022837a28a41778f68c1b278bd2462512 (patch) | |
| tree | a5cd0aaef58aeb119f3f2b7d3a42dba85559b0b3 | |
| parent | e139d108925c6c5bdd8eaf6aab09f4275b7c2171 (diff) | |
| parent | f6d416f004ed294cff71e25358d7b37a9750a1b6 (diff) | |
| download | pdf-as-4-1bf5a6f022837a28a41778f68c1b278bd2462512.tar.gz pdf-as-4-1bf5a6f022837a28a41778f68c1b278bd2462512.tar.bz2 pdf-as-4-1bf5a6f022837a28a41778f68c1b278bd2462512.zip | |
Merge branch 'feature/issue_68' into development
# Conflicts:
#	pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java
#	pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java
| -rw-r--r-- | pdf-as-cli/src/test/java/at/gv/egiz/pdfas/cli/test/SigblockPreviewMain.java | 37 | ||||
| -rw-r--r-- | pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/SignatureBlockParameterTest.java (renamed from pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/SignatureBlockParameterTest.java) | 2 | ||||
| -rw-r--r-- | pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java | 15 | ||||
| -rw-r--r-- | pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsTemplateCreator.java | 49 | ||||
| -rw-r--r-- | pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsVisualSignatureProperties.java | 10 | ||||
| -rw-r--r-- | pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java | 3 | 
6 files changed, 91 insertions, 25 deletions
| diff --git a/pdf-as-cli/src/test/java/at/gv/egiz/pdfas/cli/test/SigblockPreviewMain.java b/pdf-as-cli/src/test/java/at/gv/egiz/pdfas/cli/test/SigblockPreviewMain.java new file mode 100644 index 00000000..dba52463 --- /dev/null +++ b/pdf-as-cli/src/test/java/at/gv/egiz/pdfas/cli/test/SigblockPreviewMain.java @@ -0,0 +1,37 @@ +package at.gv.egiz.pdfas.cli.test; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileInputStream; + +import javax.imageio.ImageIO; + +import at.gv.egiz.pdfas.lib.api.PdfAs; +import at.gv.egiz.pdfas.lib.api.PdfAsFactory; +import at.gv.egiz.pdfas.lib.api.sign.SignParameter; +import iaik.x509.X509Certificate; +import lombok.SneakyThrows; + +public class SigblockPreviewMain { + +  private static final String PDFAS_CONFIG_DIR = "/home/tlenz/Projekte/pdfas4/config/default_4.2.0/"; +  + +  @SneakyThrows +  public static void main(String[] args) throws Exception { +    String cwd = System.getProperty("user.dir"); +    File output = new File(cwd + File.separator + "build/output.png"); +    X509Certificate cert = new X509Certificate(new FileInputStream("/home/tlenz/diverses/cert_debug/binding3.pem")); + +    PdfAs pdfas = PdfAsFactory.createPdfAs(new File(PDFAS_CONFIG_DIR)); +    SignParameter param = PdfAsFactory.createSignParameter(pdfas.getConfiguration(), null, null); +    param.setSignatureProfileId("ERROR_LOGO");     +    //param.setSignatureProfileId("SIGNATURBLOCK_DE"); +     +     +    Image placeholder = pdfas.generateVisibleSignaturePreview(param, cert, 72 * 4); +    ImageIO.write((BufferedImage)placeholder, "png", output); +  } + +} diff --git a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/SignatureBlockParameterTest.java b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/SignatureBlockParameterTest.java index 23422e8e..378cc19d 100644 --- a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/SignatureBlockParameterTest.java +++ b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/stamping/SignatureBlockParameterTest.java @@ -1,4 +1,4 @@ -package at.gv.egiz.pdfas.lib.test.mains; +package at.gv.egiz.pdfas.lib.test.stamping;  import at.gv.egiz.pdfas.common.settings.DefaultSignatureProfileSettings;  import at.gv.egiz.pdfas.common.utils.CheckSignatureBlockParameters; diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java index ea139e87..36d7dade 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java +++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox2/PADESPDFBOXSigner.java @@ -252,7 +252,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {          }          properties = new PDFAsVisualSignatureProperties(pdfObject.getStatus().getSettings(), pdfObject, -            (PdfBoxVisualObject) visualObject, positioningInstruction, signatureProfileSettings); +            (PdfBoxVisualObject) visualObject, positioningInstruction, signatureProfileSettings, false);          properties.buildSignature();          if (signatureProfileSettings.isPDFA() || signatureProfileSettings.isPDFA3()) { @@ -763,7 +763,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {          positioningInstruction = Positioning.determineTablePositioning(new TablePos(), origDoc,              visualObject, pdfObject.getStatus().getSettings(), signatureProfileSettings);        } - +                  origDoc.close();        final SignaturePositionImpl position = new SignaturePositionImpl(); @@ -777,15 +777,16 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {        final PDFAsVisualSignatureProperties properties = new PDFAsVisualSignatureProperties(            pdfObject.getStatus().getSettings(), pdfObject, (PdfBoxVisualObject) visualObject, -          positioningInstruction, signatureProfileSettings); - +          positioningInstruction, signatureProfileSettings, true); +       +      // build visual-signature form        properties.buildSignature(); -      PDDocument visualDoc; +             +      PDDocument visualDoc;             synchronized (PDDocument.class) {          visualDoc = PDDocument.load(properties.getVisibleSignature());        } -        final float stdRes = 72;        final float targetRes = resolution;        final float factor = targetRes / stdRes; @@ -797,7 +798,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants {        visualDoc.close();        pdfRenderer = null; -       +                    final BufferedImage cutOut = new BufferedImage(            (int) (position.getWidth() * factor),            (int) (position.getHeight() * factor),  diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsTemplateCreator.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsTemplateCreator.java index b07e6ed5..62ad4dbf 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsTemplateCreator.java +++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsTemplateCreator.java @@ -23,11 +23,11 @@   ******************************************************************************/  package at.gv.egiz.pdfas.lib.impl.stamping.pdfbox2; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; -import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings; -import at.gv.egiz.pdfas.lib.impl.stamping.TableFactory; -import org.apache.pdfbox.cos.COSName;  import org.apache.pdfbox.pdmodel.PDDocument;  import org.apache.pdfbox.pdmodel.PDPage;  import org.apache.pdfbox.pdmodel.PDResources; @@ -42,6 +42,7 @@ import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import at.gv.egiz.pdfas.common.exceptions.PdfAsException; +import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings;  public class PDFAsTemplateCreator extends PDFTemplateCreator { @@ -54,7 +55,7 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {  	} -	public InputStream buildPDF(PDFAsVisualSignatureDesigner properties, PDDocument originalDocument) +	public InputStream buildPDF(PDFAsVisualSignatureDesigner properties, PDDocument originalDocument, boolean buildPreviewOnly)  			throws IOException, PdfAsException {  		logger.debug("pdf building has been started");          PDFTemplateStructure pdfStructure = pdfBuilder.getStructure(); @@ -80,7 +81,7 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {          // create signature          this.pdfBuilder.createSignature(pdSignatureField, page, properties.getSignatureFieldName()); -        +                         // that is /AcroForm/DR entry          this.pdfBuilder.createAcroFormDictionary(acroForm, pdSignatureField); @@ -92,6 +93,8 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {          this.pdfBuilder.createSignatureRectangle(pdSignatureField, properties, properties.getRotation() + properties.getPageRotation());          this.pdfBuilder.createFormaterRectangle(properties.getFormaterRectangleParams());          PDRectangle formater = pdfStructure.getFormatterRectangle(); +        +                  //this.pdfBuilder.createSignatureImage(template, properties.getImageStream()); @@ -108,11 +111,13 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {          // inner formstream, form and resource (hlder form containts inner form)          this.pdfBuilder.createInnerFormStreamPdfAs(template, originalDocument); +                  this.pdfBuilder.createInnerFormResource();          PDResources innerFormResource = pdfStructure.getInnerFormResources(); +                  this.pdfBuilder.createInnerForm(innerFormResource, pdfStructure.getInnerFormStream(), formater);          PDFormXObject innerForm = pdfStructure.getInnerForm(); -        +                  // inner form must be in the holder form as we wrote          this.pdfBuilder.insertInnerFormToHolerResources(innerForm, holderFormResources); @@ -127,10 +132,10 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {          // now inject procSetArray          /*this.pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, imageFormResources, holderFormResources,                  pdfStructure.getProcSet());*/ +                  this.pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, null, holderFormResources,                  pdfStructure.getProcSet()); -          /*String imgFormName = pdfStructure.getImageFormName();          String imgName = pdfStructure.getImageName();*/          String innerFormName = pdfStructure.getInnerFormName().getName(); @@ -138,13 +143,16 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {          // now create Streams of AP          /*this.pdfBuilder.injectAppearanceStreams(holderFormStream, imageFormStream, imageFormStream, imgFormName,                  imgName, innerFormName, properties);*/ -        this.pdfBuilder.injectAppearanceStreams(holderFormStream, null, null, null, -        		null, innerFormName, properties); +         +        if (!buildPreviewOnly) {         +          this.pdfBuilder.injectAppearanceStreams(holderFormStream, null, null, null, +              null, innerFormName, properties); +           +        } +                  this.pdfBuilder.createVisualSignature(template);          this.pdfBuilder.createWidgetDictionary(pdSignatureField, holderFormResources); - -          ByteArrayInputStream in = null;          	//COSDocument doc = pdfStructure.getVisualSignature(); @@ -152,8 +160,8 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {              //in = pdfStructure.getTemplateAppearanceStream();          	ByteArrayOutputStream baos = new ByteArrayOutputStream();          	template.save(baos); -        	baos.close(); - +        	baos.close();                     +        	          SignatureProfileSettings signatureProfileSettings =                  this.pdfBuilder.signatureProfileSettings; @@ -188,4 +196,17 @@ public class PDFAsTemplateCreator extends PDFTemplateCreator {          // return result of the stream           return in;  	} +	 +//	@SneakyThrows +//	private void saveDebuggingSnapshot(PDDocument template, String fileName) { +//	  ByteArrayOutputStream baos = new ByteArrayOutputStream(); +//    template.save(baos); +//    baos.close(); +// +//    FileOutputStream fos = new FileOutputStream("/home/tlenz/Projekte/pdfas4/source/pdf-as-cli/build/" + fileName + ".pdf"); +//    fos.write(baos.toByteArray()); +//    fos.close();   +//	   +//	} +	  } diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsVisualSignatureProperties.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsVisualSignatureProperties.java index 8a030927..623347ff 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsVisualSignatureProperties.java +++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox2/PDFAsVisualSignatureProperties.java @@ -57,9 +57,13 @@ public class PDFAsVisualSignatureProperties extends PDVisibleSigProperties {  	private String alternativeTableCaption=""; +  private boolean buildPreviewOnly; +  	public PDFAsVisualSignatureProperties(ISettings settings, PDFBOXObject object,  -			PdfBoxVisualObject visObj, PositioningInstruction pos, SignatureProfileSettings signatureProfileSettings) { -		this.settings = settings; +			PdfBoxVisualObject visObj, PositioningInstruction pos, SignatureProfileSettings signatureProfileSettings,  +			boolean buildPreviewOnly) { +		this.buildPreviewOnly = buildPreviewOnly; +	  this.settings = settings;  		this.signatureProfileSettings = signatureProfileSettings;  		try {  			main = visObj.getTable(); @@ -114,7 +118,7 @@ public class PDFAsVisualSignatureProperties extends PDVisibleSigProperties {  		PDFAsVisualSignatureBuilder builder = new PDFAsVisualSignatureBuilder(this, this.settings, designer, this.signatureProfileSettings);  		PDFAsTemplateCreator creator = new PDFAsTemplateCreator(builder);  		try { -			setVisibleSignature(creator.buildPDF(designer, this.origDoc)); +			setVisibleSignature(creator.buildPDF(designer, this.origDoc, buildPreviewOnly));  		} catch (PdfAsException e) {  			throw new PdfAsWrappedIOException(e);  		} diff --git a/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java b/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java index 61a1199d..0ed05eb5 100644 --- a/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java +++ b/pdf-as-pdfbox-2/src/test/java/at/gv/egiz/pdfas/lib/testpdfbox/SignatureFieldsAndPlaceHolderExtractorTest.java @@ -8,10 +8,13 @@ import java.util.List;  import org.apache.pdfbox.pdmodel.PDDocument;  import org.junit.Assert;  import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4;  import at.gv.egiz.pdfas.lib.impl.pdfbox2.placeholder.SignatureFieldsAndPlaceHolderExtractor;  import at.gv.egiz.pdfas.lib.impl.placeholder.SignaturePlaceholderData; +@RunWith(JUnit4.class)  public class SignatureFieldsAndPlaceHolderExtractorTest {    public String getPath(String resourceName) { | 
