diff options
author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2016-02-22 08:50:45 +0100 |
---|---|---|
committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2016-02-22 08:50:45 +0100 |
commit | a51e5b49070a6e6d4e4723e714b08e08884ddd7b (patch) | |
tree | 1176c6c4e6e0d25a82806f6c2ca5a2fc6c5d6682 | |
parent | 36ddff26736c03a0f02ca636889a130fa1548f35 (diff) | |
download | pdf-as-4-a51e5b49070a6e6d4e4723e714b08e08884ddd7b.tar.gz pdf-as-4-a51e5b49070a6e6d4e4723e714b08e08884ddd7b.tar.bz2 pdf-as-4-a51e5b49070a6e6d4e4723e714b08e08884ddd7b.zip |
introduced minimum width for visual signature when positioned with a placeholder
4 files changed, 205 insertions, 235 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java index a73a4846..7a955e3f 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java @@ -42,6 +42,7 @@ public interface IConfigurationConstants { public static final String LEGACY_POSITIONING = ".legacy.pos"; + public static final String MIN_WIDTH = "minWidth"; public static final String PLACEHOLDER_ID = "placeholder_id"; public static final String PLACEHOLDER_MODE = "placeholder_mode"; diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java index 04448b96..789094cb 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/SignatureProfileConfiguration.java @@ -23,12 +23,17 @@ ******************************************************************************/ package at.gv.egiz.pdfas.lib.impl.configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import at.gv.egiz.pdfas.common.settings.ISettings; import at.gv.egiz.pdfas.lib.api.IConfigurationConstants; public class SignatureProfileConfiguration extends SpecificBaseConfiguration implements IConfigurationConstants { + private static final Logger logger = LoggerFactory.getLogger(SignatureProfileConfiguration.class); + protected String profileID; public SignatureProfileConfiguration(ISettings configuration, @@ -37,6 +42,25 @@ public class SignatureProfileConfiguration extends SpecificBaseConfiguration this.profileID = profileID; } + public float getMinWidth() { + String key = SIG_OBJECT + SEPERATOR + profileID + SEPERATOR + MIN_WIDTH; + + String minWidthValue = this.configuration.getValue(key); + + float result = Float.MAX_VALUE; + + if(minWidthValue != null) { + try { + result = Float.parseFloat(minWidthValue); + logger.debug("Got min width for profile {}: {}", profileID, result); + } catch(NumberFormatException e) { + logger.warn("Configuration Entry: {} should be a float number", key); + } + } + + return result; + } + public boolean isVisualSignature() { String key = SIG_OBJECT + SEPERATOR + profileID + SEPERATOR + TABLE + SEPERATOR + MAIN; diff --git a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TablePos.java b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TablePos.java index e49b481e..ce32e467 100644 --- a/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TablePos.java +++ b/pdf-as-lib/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TablePos.java @@ -86,7 +86,7 @@ public class TablePos implements Serializable /** * The width of the block. */ - private float width = 0.0f; + public float width = 0.0f; /** * The top y position of the footer line. */ diff --git a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java index 31098e97..3e9fa702 100644 --- a/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java +++ b/pdf-as-pdfbox/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java @@ -103,15 +103,13 @@ import iaik.x509.X509Certificate; public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { - private static final Logger logger = LoggerFactory - .getLogger(PADESPDFBOXSigner.class); - - public void signPDF(PDFObject genericPdfObject, - RequestedSignature requestedSignature, + private static final Logger logger = LoggerFactory.getLogger(PADESPDFBOXSigner.class); + + public void signPDF(PDFObject genericPdfObject, RequestedSignature requestedSignature, PDFASSignatureInterface genericSigner) throws PdfAsException { String fisTmpFile = null; - PDFAsVisualSignatureProperties properties=null; + PDFAsVisualSignatureProperties properties = null; if (!(genericPdfObject instanceof PDFBOXObject)) { // tODO: @@ -148,10 +146,9 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } doc = pdfObject.getDocument(); - + SignaturePlaceholderData signaturePlaceholderData = PlaceholderFilter - .checkPlaceholderSignature(pdfObject.getStatus(), - pdfObject.getStatus().getSettings()); + .checkPlaceholderSignature(pdfObject.getStatus(), pdfObject.getStatus().getSettings()); TablePos tablePos = null; @@ -159,41 +156,42 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { // Placeholder found! logger.info("Placeholder data found."); if (signaturePlaceholderData.getProfile() != null) { - logger.debug("Placeholder Profile set to: " - + signaturePlaceholderData.getProfile()); - requestedSignature - .setSignatureProfileID(signaturePlaceholderData - .getProfile()); + logger.debug("Placeholder Profile set to: " + signaturePlaceholderData.getProfile()); + requestedSignature.setSignatureProfileID(signaturePlaceholderData.getProfile()); } tablePos = signaturePlaceholderData.getTablePos(); if (tablePos != null) { - logger.debug("Placeholder Position set to: " - + tablePos.toString()); + + SignatureProfileConfiguration signatureProfileConfiguration = pdfObject.getStatus() + .getSignatureProfileConfiguration(requestedSignature.getSignatureProfileID()); + + float minWidth = signatureProfileConfiguration.getMinWidth(); + + if (tablePos.getWidth() < minWidth) { + tablePos.width = minWidth; + logger.debug("Correcting placeholder with to minimum width {}", minWidth); + } + + logger.debug("Placeholder Position set to: " + tablePos.toString()); } } PDSignature signature = new PDSignature(); signature.setFilter(COSName.getPDFName(signer.getPDFFilter())); // default // filter - signature.setSubFilter(COSName.getPDFName(signer - .getPDFSubFilter())); + signature.setSubFilter(COSName.getPDFName(signer.getPDFSubFilter())); SignatureProfileSettings signatureProfileSettings = TableFactory - .createProfile( - requestedSignature.getSignatureProfileID(), - pdfObject.getStatus().getSettings()); - - ValueResolver resolver = new ValueResolver(requestedSignature, - pdfObject.getStatus()); - String signerName = resolver.resolve("SIG_SUBJECT", - signatureProfileSettings.getValue("SIG_SUBJECT"), + .createProfile(requestedSignature.getSignatureProfileID(), pdfObject.getStatus().getSettings()); + + ValueResolver resolver = new ValueResolver(requestedSignature, pdfObject.getStatus()); + String signerName = resolver.resolve("SIG_SUBJECT", signatureProfileSettings.getValue("SIG_SUBJECT"), signatureProfileSettings); signature.setName(signerName); signature.setSignDate(Calendar.getInstance()); - String signerReason = signatureProfileSettings - .getSigningReason(); + String signerReason = signatureProfileSettings.getSigningReason(); if (signerReason == null) { signerReason = "PAdES Signature"; @@ -202,21 +200,20 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { signature.setReason(signerReason); logger.debug("Signing reason: " + signerReason); - logger.debug("Signing @ " - + signer.getSigningDate().getTime().toString()); + logger.debug("Signing @ " + signer.getSigningDate().getTime().toString()); // the signing date, needed for valid signature // signature.setSignDate(signer.getSigningDate()); signer.setPDSignature(signature); - + int signatureSize = 0x1000; try { String reservedSignatureSizeString = signatureProfileSettings.getValue(SIG_RESERVED_SIZE); - if(reservedSignatureSizeString != null) { + if (reservedSignatureSizeString != null) { signatureSize = Integer.parseInt(reservedSignatureSizeString); } logger.debug("Reserving {} bytes for signature", signatureSize); - } catch(NumberFormatException e) { + } catch (NumberFormatException e) { logger.warn("Invalid configuration value: {} should be a number using 0x1000", SIG_RESERVED_SIZE); } options.setPreferedSignatureSize(signatureSize); @@ -225,9 +222,8 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { if (requestedSignature.isVisual()) { logger.info("Creating visual siganture block"); - SignatureProfileConfiguration signatureProfileConfiguration = pdfObject - .getStatus().getSignatureProfileConfiguration( - requestedSignature.getSignatureProfileID()); + SignatureProfileConfiguration signatureProfileConfiguration = pdfObject.getStatus() + .getSignatureProfileConfiguration(requestedSignature.getSignatureProfileID()); if (tablePos == null) { // ================================================================ @@ -235,17 +231,14 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { // fixed // position - String posString = pdfObject.getStatus() - .getSignParamter().getSignaturePosition(); + String posString = pdfObject.getStatus().getSignParamter().getSignaturePosition(); TablePos signaturePos = null; - String signaturePosString = signatureProfileConfiguration - .getDefaultPositioning(); + String signaturePosString = signatureProfileConfiguration.getDefaultPositioning(); if (signaturePosString != null) { - logger.debug("using signature Positioning: " - + signaturePos); + logger.debug("using signature Positioning: " + signaturePos); signaturePos = new TablePos(signaturePosString); } @@ -264,20 +257,16 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { tablePos = new TablePos(); } } - boolean legacy32Position = signatureProfileConfiguration - .getLegacy32Positioning(); + + boolean legacy32Position = signatureProfileConfiguration.getLegacy32Positioning(); // create Table describtion - Table main = TableFactory.createSigTable( - signatureProfileSettings, MAIN, - pdfObject.getStatus(), requestedSignature); + Table main = TableFactory.createSigTable(signatureProfileSettings, MAIN, pdfObject.getStatus(), + requestedSignature); - IPDFStamper stamper = StamperFactory - .createDefaultStamper(pdfObject.getStatus() - .getSettings()); + IPDFStamper stamper = StamperFactory.createDefaultStamper(pdfObject.getStatus().getSettings()); - IPDFVisualObject visualObject = stamper - .createVisualPDFObject(pdfObject, main); + IPDFVisualObject visualObject = stamper.createVisualPDFObject(pdfObject, main); /* * PDDocument originalDocument = PDDocument .load(new @@ -285,12 +274,10 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { * .getPdfObject().getOriginalDocument())); */ - PositioningInstruction positioningInstruction = Positioning - .determineTablePositioning(tablePos, "", doc, - visualObject, legacy32Position); + PositioningInstruction positioningInstruction = Positioning.determineTablePositioning(tablePos, "", + doc, visualObject, legacy32Position); - logger.debug("Positioning: {}", - positioningInstruction.toString()); + logger.debug("Positioning: {}", positioningInstruction.toString()); if (positioningInstruction.isMakeNewPage()) { int last = doc.getNumberOfPages() - 1; @@ -307,22 +294,19 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } // handle rotated page - PDDocumentCatalog documentCatalog = doc - .getDocumentCatalog(); + PDDocumentCatalog documentCatalog = doc.getDocumentCatalog(); PDPageNode documentPages = documentCatalog.getPages(); List<PDPage> documentPagesKids = new ArrayList<PDPage>(); documentPages.getAllKids(documentPagesKids); int targetPageNumber = positioningInstruction.getPage(); logger.debug("Target Page: " + targetPageNumber); // rootPages.getAllKids(kids); - PDPage targetPage = documentPagesKids - .get(targetPageNumber - 1); + PDPage targetPage = documentPagesKids.get(targetPageNumber - 1); int rot = targetPage.findRotation(); logger.debug("Page rotation: " + rot); // positioningInstruction.setRotation(positioningInstruction.getRotation() // + rot); - logger.debug("resulting Sign rotation: " - + positioningInstruction.getRotation()); + logger.debug("resulting Sign rotation: " + positioningInstruction.getRotation()); SignaturePositionImpl position = new SignaturePositionImpl(); position.setX(positioningInstruction.getX()); @@ -333,10 +317,8 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { requestedSignature.setSignaturePosition(position); - properties = new PDFAsVisualSignatureProperties( - pdfObject.getStatus().getSettings(), pdfObject, - (PdfBoxVisualObject) visualObject, - positioningInstruction, signatureProfileSettings); + properties = new PDFAsVisualSignatureProperties(pdfObject.getStatus().getSettings(), pdfObject, + (PdfBoxVisualObject) visualObject, positioningInstruction, signatureProfileSettings); properties.buildSignature(); @@ -352,8 +334,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { // replace placeholder InputStream is = null; try { - is = PADESPDFBOXSigner.class - .getResourceAsStream("/placeholder/empty.jpg"); + is = PADESPDFBOXSigner.class.getResourceAsStream("/placeholder/empty.jpg"); PDJpeg img = new PDJpeg(doc, is); img.getCOSObject().setNeedToBeUpdate(true); @@ -366,20 +347,13 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { // rootPages.getAllKids(kids); PDPage page = kids.get(pageNumber - 1); - logger.info("Placeholder name: " - + signaturePlaceholderData - .getPlaceholderName()); - COSDictionary xobjectsDictionary = (COSDictionary) page - .findResources().getCOSDictionary() + logger.info("Placeholder name: " + signaturePlaceholderData.getPlaceholderName()); + COSDictionary xobjectsDictionary = (COSDictionary) page.findResources().getCOSDictionary() .getDictionaryObject(COSName.XOBJECT); - xobjectsDictionary.setItem(signaturePlaceholderData - .getPlaceholderName(), img); + xobjectsDictionary.setItem(signaturePlaceholderData.getPlaceholderName(), img); xobjectsDictionary.setNeedToBeUpdate(true); - page.findResources().getCOSObject() - .setNeedToBeUpdate(true); - logger.info("Placeholder name: " - + signaturePlaceholderData - .getPlaceholderName()); + page.findResources().getCOSObject().setNeedToBeUpdate(true); + logger.info("Placeholder name: " + signaturePlaceholderData.getPlaceholderName()); } finally { IOUtils.closeQuietly(is); } @@ -387,8 +361,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { if (signatureProfileSettings.isPDFA()) { PDDocumentCatalog root = doc.getDocumentCatalog(); - COSBase base = root.getCOSDictionary().getItem( - COSName.OUTPUT_INTENTS); + COSBase base = root.getCOSDictionary().getItem(COSName.OUTPUT_INTENTS); if (base == null) { InputStream colorProfile = null; try { @@ -396,8 +369,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { .getResourceAsStream("/icm/sRGB Color Space Profile.icm"); try { - PDOutputIntent oi = new PDOutputIntent(doc, - colorProfile); + PDOutputIntent oi = new PDOutputIntent(doc, colorProfile); oi.setInfo("sRGB IEC61966-2.1"); oi.setOutputCondition("sRGB IEC61966-2.1"); oi.setOutputConditionIdentifier("sRGB IEC61966-2.1"); @@ -408,8 +380,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { logger.info("added Output Intent"); } catch (Throwable e) { e.printStackTrace(); - throw new PdfAsException( - "Failed to add Output Intent", e); + throw new PdfAsException("Failed to add Output Intent", e); } } finally { IOUtils.closeQuietly(colorProfile); @@ -417,18 +388,15 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } } - - options.setPage(positioningInstruction.getPage()); options.setVisualSignature(properties.getVisibleSignature()); } - + visualSignatureDocumentGuard = options.getVisualSignature(); doc.addSignature(signature, signer, options); - String sigFieldName = signatureProfileSettings - .getSignFieldValue(); + String sigFieldName = signatureProfileSettings.getSignFieldValue(); if (sigFieldName == null) { sigFieldName = "PDF-AS Signatur"; @@ -440,18 +408,18 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { PDAcroForm acroFormm = doc.getDocumentCatalog().getAcroForm(); - // PDStructureTreeRoot pdstRoot = doc.getDocumentCatalog().getStructureTreeRoot(); - // COSDictionary dic = doc.getDocumentCatalog().getCOSDictionary(); - // PDStructureElement el = new PDStructureElement("Widget", pdstRoot); - - + // PDStructureTreeRoot pdstRoot = + // doc.getDocumentCatalog().getStructureTreeRoot(); + // COSDictionary dic = + // doc.getDocumentCatalog().getCOSDictionary(); + // PDStructureElement el = new PDStructureElement("Widget", + // pdstRoot); PDSignatureField signatureField = null; if (acroFormm != null) { @SuppressWarnings("unchecked") List<PDField> fields = acroFormm.getFields(); - if (fields != null) { for (PDField pdField : fields) { if (pdField != null) { @@ -459,13 +427,9 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { PDSignatureField tmpSigField = (PDSignatureField) pdField; if (tmpSigField.getSignature() != null - && tmpSigField.getSignature() - .getDictionary() != null) { - if (tmpSigField - .getSignature() - .getDictionary() - .equals(signature - .getDictionary())) { + && tmpSigField.getSignature().getDictionary() != null) { + if (tmpSigField.getSignature().getDictionary() + .equals(signature.getDictionary())) { signatureField = (PDSignatureField) pdField; } @@ -478,11 +442,11 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } if (signatureField != null) { - signatureField.setPartialName(sigFieldName); + signatureField.setPartialName(sigFieldName); } - if(properties!=null){ + if (properties != null) { signatureField.setAlternateFieldName(properties.getAlternativeTableCaption()); - }else{ + } else { signatureField.setAlternateFieldName(sigFieldName); } } else { @@ -491,94 +455,94 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { // PDF-UA logger.info("Adding pdf/ua content."); - try{ + try { PDDocumentCatalog root = doc.getDocumentCatalog(); PDStructureTreeRoot treeRoot = root.getStructureTreeRoot(); - if(treeRoot != null) { - logger.info("Tree Root: {}", treeRoot.toString()); - List<Object> kids = treeRoot.getKids(); - - if(kids==null){ - logger.info("No kid-elements in structure tree Root, maybe not PDF/UA document"); - } + if (treeRoot != null) { + logger.info("Tree Root: {}", treeRoot.toString()); + List<Object> kids = treeRoot.getKids(); - PDStructureElement docElement = null; - for(Object k: kids){ - if(k instanceof PDStructureElement){ - docElement=(PDStructureElement) k; - break; - // if(((PDStructureElement) k).getStructureType().equals("Document")){ - // docElement=(PDStructureElement) k; - // } + if (kids == null) { + logger.info("No kid-elements in structure tree Root, maybe not PDF/UA document"); } - } - - PDStructureElement sigBlock = new PDStructureElement( - "Form", docElement); - - //create object dictionary and add as child element - COSDictionary objectdic= new COSDictionary(); - objectdic.setName("Type", "OBJR"); - objectdic.setItem("Pg", signatureField.getWidget().getPage()); - objectdic.setItem("Obj", signatureField.getWidget()); - - List<Object> l = new ArrayList<Object>(); - l.add(objectdic); - sigBlock.setKids(l); - - sigBlock.setTitle("Signature Table"); - sigBlock.setParent(docElement); - docElement.appendKid(sigBlock); - - //Create and add Attribute dictionary to mitigate PAC warning - COSDictionary sigBlockDic = (COSDictionary) sigBlock.getCOSObject(); - COSDictionary sub = new COSDictionary(); - - sub.setName("O", "Layout"); - sub.setName("Placement", "Block"); - sigBlockDic.setItem(COSName.A, sub); - sigBlockDic.setNeedToBeUpdate(true); + PDStructureElement docElement = null; + for (Object k : kids) { + if (k instanceof PDStructureElement) { + docElement = (PDStructureElement) k; + break; + // if(((PDStructureElement) + // k).getStructureType().equals("Document")){ + // docElement=(PDStructureElement) k; + // } + } + } - //Modify number tree - PDNumberTreeNode ntn = treeRoot.getParentTree(); - if(ntn==null){ - ntn = new PDNumberTreeNode(objectdic, null); - logger.info("No number-tree-node found!"); - } + PDStructureElement sigBlock = new PDStructureElement("Form", docElement); + + // create object dictionary and add as child element + COSDictionary objectdic = new COSDictionary(); + objectdic.setName("Type", "OBJR"); + objectdic.setItem("Pg", signatureField.getWidget().getPage()); + objectdic.setItem("Obj", signatureField.getWidget()); + + List<Object> l = new ArrayList<Object>(); + l.add(objectdic); + sigBlock.setKids(l); + + sigBlock.setTitle("Signature Table"); + sigBlock.setParent(docElement); + docElement.appendKid(sigBlock); + + // Create and add Attribute dictionary to mitigate PAC + // warning + COSDictionary sigBlockDic = (COSDictionary) sigBlock.getCOSObject(); + COSDictionary sub = new COSDictionary(); + + sub.setName("O", "Layout"); + sub.setName("Placement", "Block"); + sigBlockDic.setItem(COSName.A, sub); + sigBlockDic.setNeedToBeUpdate(true); + + // Modify number tree + PDNumberTreeNode ntn = treeRoot.getParentTree(); + if (ntn == null) { + ntn = new PDNumberTreeNode(objectdic, null); + logger.info("No number-tree-node found!"); + } - COSDictionary ntndic=ntn.getCOSDictionary(); - COSArray ntndicnumbersarray = (COSArray)ntndic.getDictionaryObject(COSName.NUMS); - int arrindex = ntndicnumbersarray.size(); - int treeindex = arrindex/2; + COSDictionary ntndic = ntn.getCOSDictionary(); + COSArray ntndicnumbersarray = (COSArray) ntndic.getDictionaryObject(COSName.NUMS); + int arrindex = ntndicnumbersarray.size(); + int treeindex = arrindex / 2; - ntndicnumbersarray.add(arrindex, COSInteger.get(treeindex)); - ntndicnumbersarray.add(arrindex+1, sigBlock.getCOSObject()); + ntndicnumbersarray.add(arrindex, COSInteger.get(treeindex)); + ntndicnumbersarray.add(arrindex + 1, sigBlock.getCOSObject()); - treeRoot.setParentTree(ntn); - treeRoot.setParentTreeNextKey(treeindex+1); + treeRoot.setParentTree(ntn); + treeRoot.setParentTreeNextKey(treeindex + 1); - //setStructureParent - PDAnnotationWidget widg=signatureField.getWidget(); - widg.setStructParent(treeindex); + // setStructureParent + PDAnnotationWidget widg = signatureField.getWidget(); + widg.setStructParent(treeindex); - //add the Tabs /S Element for Tabbing through annots - PDPage p = signatureField.getWidget().getPage(); - p.getCOSDictionary().setName("Tabs", "S"); - p.getCOSObject().setNeedToBeUpdate(true); + // add the Tabs /S Element for Tabbing through annots + PDPage p = signatureField.getWidget().getPage(); + p.getCOSDictionary().setName("Tabs", "S"); + p.getCOSObject().setNeedToBeUpdate(true); - ntndic.setNeedToBeUpdate(true); - sigBlock.getCOSObject().setNeedToBeUpdate(true); - treeRoot.getCOSObject().setNeedToBeUpdate(true); - objectdic.getCOSObject().setNeedToBeUpdate(true); - docElement.getCOSObject().setNeedToBeUpdate(true); + ntndic.setNeedToBeUpdate(true); + sigBlock.getCOSObject().setNeedToBeUpdate(true); + treeRoot.getCOSObject().setNeedToBeUpdate(true); + objectdic.getCOSObject().setNeedToBeUpdate(true); + docElement.getCOSObject().setNeedToBeUpdate(true); } - }catch(Throwable e){ - if (signatureProfileSettings.isPDFUA()==true){ + } catch (Throwable e) { + if (signatureProfileSettings.isPDFUA() == true) { logger.error("Could not create PDF-UA conform document!"); throw new PdfAsException("error.pdf.sig.pdfua.1", e); - }else{ + } else { logger.info("Could not create PDF-UA conform signature"); } } @@ -634,8 +598,8 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { tmpFileIs.close(); } finally { IOUtils.closeQuietly(tmpFileIs); - if(options != null) { - if(options.getVisualSignature() != null) { + if (options != null) { + if (options.getVisualSignature() != null) { options.getVisualSignature().close(); } } @@ -655,8 +619,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { // bos.write(); // bos.close(); - pdfObject.setSignedDocument(StreamUtils - .inputStreamToByteArray(readReadyFile)); + pdfObject.setSignedDocument(StreamUtils.inputStreamToByteArray(readReadyFile)); readReadyFile.close(); } finally { IOUtils.closeQuietly(readReadyFile); @@ -681,7 +644,7 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } } - if(fisTmpFile != null) { + if (fisTmpFile != null) { helper.deleteFile(fisTmpFile); } logger.debug("Signature done!"); @@ -695,21 +658,19 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } @Override - public PDFASSignatureInterface buildSignaturInterface(IPlainSigner signer, - SignParameter parameters, RequestedSignature requestedSignature) { + public PDFASSignatureInterface buildSignaturInterface(IPlainSigner signer, SignParameter parameters, + RequestedSignature requestedSignature) { return new PdfboxSignerWrapper(signer, parameters, requestedSignature); } @Override - public PDFASSignatureExtractor buildBlindSignaturInterface( - X509Certificate certificate, String filter, String subfilter, - Calendar date) { + public PDFASSignatureExtractor buildBlindSignaturInterface(X509Certificate certificate, String filter, + String subfilter, Calendar date) { return new SignatureDataExtractor(certificate, filter, subfilter, date); } @Override - public void checkPDFPermissions(PDFObject genericPdfObject) - throws PdfAsException { + public void checkPDFPermissions(PDFObject genericPdfObject) throws PdfAsException { if (!(genericPdfObject instanceof PDFBOXObject)) { // tODO: throw new PdfAsException(); @@ -727,10 +688,8 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { } @Override - public Image generateVisibleSignaturePreview(SignParameter parameter, - java.security.cert.X509Certificate cert, int resolution, - OperationStatus status, RequestedSignature requestedSignature) - throws PDFASError { + public Image generateVisibleSignaturePreview(SignParameter parameter, java.security.cert.X509Certificate cert, + int resolution, OperationStatus status, RequestedSignature requestedSignature) throws PDFASError { try { PDFBOXObject pdfObject = (PDFBOXObject) status.getPdfObject(); @@ -740,37 +699,30 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { origDoc.save(baos); baos.close(); - pdfObject.setOriginalDocument(new ByteArrayDataSource(baos - .toByteArray())); + pdfObject.setOriginalDocument(new ByteArrayDataSource(baos.toByteArray())); SignatureProfileSettings signatureProfileSettings = TableFactory - .createProfile(requestedSignature.getSignatureProfileID(), - pdfObject.getStatus().getSettings()); + .createProfile(requestedSignature.getSignatureProfileID(), pdfObject.getStatus().getSettings()); // create Table describtion - Table main = TableFactory.createSigTable(signatureProfileSettings, - MAIN, pdfObject.getStatus(), requestedSignature); + Table main = TableFactory.createSigTable(signatureProfileSettings, MAIN, pdfObject.getStatus(), + requestedSignature); - IPDFStamper stamper = StamperFactory.createDefaultStamper(pdfObject - .getStatus().getSettings()); + IPDFStamper stamper = StamperFactory.createDefaultStamper(pdfObject.getStatus().getSettings()); - IPDFVisualObject visualObject = stamper.createVisualPDFObject( - pdfObject, main); + IPDFVisualObject visualObject = stamper.createVisualPDFObject(pdfObject, main); - SignatureProfileConfiguration signatureProfileConfiguration = pdfObject - .getStatus().getSignatureProfileConfiguration( - requestedSignature.getSignatureProfileID()); + SignatureProfileConfiguration signatureProfileConfiguration = pdfObject.getStatus() + .getSignatureProfileConfiguration(requestedSignature.getSignatureProfileID()); - String signaturePosString = signatureProfileConfiguration - .getDefaultPositioning(); + String signaturePosString = signatureProfileConfiguration.getDefaultPositioning(); PositioningInstruction positioningInstruction = null; if (signaturePosString != null) { - positioningInstruction = Positioning.determineTablePositioning( - new TablePos(signaturePosString), "", origDoc, - visualObject, false); + positioningInstruction = Positioning.determineTablePositioning(new TablePos(signaturePosString), "", + origDoc, visualObject, false); } else { - positioningInstruction = Positioning.determineTablePositioning( - new TablePos(), "", origDoc, visualObject, false); + positioningInstruction = Positioning.determineTablePositioning(new TablePos(), "", origDoc, + visualObject, false); } origDoc.close(); @@ -785,15 +737,13 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { requestedSignature.setSignaturePosition(position); PDFAsVisualSignatureProperties properties = new PDFAsVisualSignatureProperties( - pdfObject.getStatus().getSettings(), pdfObject, - (PdfBoxVisualObject) visualObject, positioningInstruction, - signatureProfileSettings); + pdfObject.getStatus().getSettings(), pdfObject, (PdfBoxVisualObject) visualObject, + positioningInstruction, signatureProfileSettings); properties.buildSignature(); PDDocument visualDoc; synchronized (PDDocument.class) { - visualDoc = PDDocument.load(properties - .getVisibleSignature()); + visualDoc = PDDocument.load(properties.getVisibleSignature()); } // PDPageable pageable = new PDPageable(visualDoc); List<PDPage> pages = new ArrayList<PDPage>(); @@ -805,23 +755,18 @@ public class PADESPDFBOXSigner implements IPdfSigner, IConfigurationConstants { float targetRes = resolution; float factor = targetRes / stdRes; - BufferedImage outputImage = firstPage.convertToImage( - BufferedImage.TYPE_4BYTE_ABGR, (int) targetRes); + BufferedImage outputImage = firstPage.convertToImage(BufferedImage.TYPE_4BYTE_ABGR, (int) targetRes); - BufferedImage cutOut = new BufferedImage( - (int) (position.getWidth() * factor), - (int) (position.getHeight() * factor), - BufferedImage.TYPE_4BYTE_ABGR); + BufferedImage cutOut = new BufferedImage((int) (position.getWidth() * factor), + (int) (position.getHeight() * factor), BufferedImage.TYPE_4BYTE_ABGR); Graphics2D graphics = (Graphics2D) cutOut.getGraphics(); - graphics.drawImage(outputImage, 0, 0, cutOut.getWidth(), cutOut - .getHeight(), (int) (1 * factor), (int) (outputImage - .getHeight() - ((position.getHeight() + 1) * factor)), - (int) ((1 + position.getWidth()) * factor), - (int) (outputImage.getHeight() - - ((position.getHeight() + 1) * factor) + (position - .getHeight() * factor)), null); + graphics.drawImage(outputImage, 0, 0, cutOut.getWidth(), cutOut.getHeight(), (int) (1 * factor), + (int) (outputImage.getHeight() - ((position.getHeight() + 1) * factor)), + (int) ((1 + position.getWidth()) * factor), (int) (outputImage.getHeight() + - ((position.getHeight() + 1) * factor) + (position.getHeight() * factor)), + null); return cutOut; } catch (PdfAsException e) { logger.warn("PDF-AS Exception", e); |