List of usage examples for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDFTemplateStructure getHolderForm
public PDFormXObject getHolderForm()
From source file:at.gv.egiz.pdfas.lib.impl.stamping.pdfbox.PDFAsTemplateCreator.java
License:EUPL
public InputStream buildPDF(PDFAsVisualSignatureDesigner properties, PDDocument originalDocument) throws IOException, PdfAsException { logger.debug("pdf building has been started"); PDFTemplateStructure pdfStructure = pdfBuilder.getStructure(); // we create array of [Text, ImageB, ImageC, ImageI] this.pdfBuilder.createProcSetArray(); //create page this.pdfBuilder.createPage(properties); PDPage page = pdfStructure.getPage(); //create template this.pdfBuilder.createTemplate(page); PDDocument template = pdfStructure.getTemplate(); //create /AcroForm this.pdfBuilder.createAcroForm(template); PDAcroForm acroForm = pdfStructure.getAcroForm(); // AcroForm contains singature fields this.pdfBuilder.createSignatureField(acroForm); PDSignatureField pdSignatureField = pdfStructure.getSignatureField(); // create signature this.pdfBuilder.createSignature(pdSignatureField, page, properties.getSignatureFieldName()); // that is /AcroForm/DR entry this.pdfBuilder.createAcroFormDictionary(acroForm, pdSignatureField); // create AffineTransform this.pdfBuilder.createAffineTransform(properties.getAffineTransformParams()); //AffineTransform transform = pdfStructure.getAffineTransform(); // rectangle, formatter, image. /AcroForm/DR/XObject contains that form this.pdfBuilder.createSignatureRectangle(pdSignatureField, properties, properties.getRotation() + properties.getPageRotation()); this.pdfBuilder.createFormaterRectangle(properties.getFormaterRectangleParams()); PDRectangle formater = pdfStructure.getFormaterRectangle(); //this.pdfBuilder.createSignatureImage(template, properties.getImageStream()); // create form stream, form and resource. this.pdfBuilder.createHolderFormStream(template); PDStream holderFormStream = pdfStructure.getHolderFormStream(); this.pdfBuilder.createHolderFormResources(); PDResources holderFormResources = pdfStructure.getHolderFormResources(); this.pdfBuilder.createHolderForm(holderFormResources, holderFormStream, formater); // that is /AP entry the appearance dictionary. this.pdfBuilder.createAppearanceDictionary(pdfStructure.getHolderForm(), pdSignatureField, properties.getRotation() + properties.getPageRotation()); // 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.getInnterFormStream(), formater); PDXObjectForm innerForm = pdfStructure.getInnerForm(); // inner form must be in the holder form as we wrote this.pdfBuilder.insertInnerFormToHolerResources(innerForm, holderFormResources); // Image form is in this structure: /AcroForm/DR/FRM0/Resources/XObject/n0 //this.pdfBuilder.createImageFormStream(template); //PDStream imageFormStream = pdfStructure.getImageFormStream(); //this.pdfBuilder.createImageFormResources(); //PDResources imageFormResources = pdfStructure.getImageFormResources(); //this.pdfBuilder.createImageForm(imageFormResources, innerFormResource, imageFormStream, formater, transform, // pdfStructure.getJpedImage()); // now inject procSetArray /*this.pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, imageFormResources, holderFormResources, pdfStructure.getProcSet());*/ this.pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, null, holderFormResources, pdfStructure.getProcSet());// w ww .java 2 s . co m /*String imgFormName = pdfStructure.getImageFormName(); String imgName = pdfStructure.getImageName();*/ String innerFormName = pdfStructure.getInnerFormName(); // 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); this.pdfBuilder.createVisualSignature(template); this.pdfBuilder.createWidgetDictionary(pdSignatureField, holderFormResources); ByteArrayInputStream in = null; try { //COSDocument doc = pdfStructure.getVisualSignature(); //doc. //in = pdfStructure.getTemplateAppearanceStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); template.save(baos); baos.close(); in = new ByteArrayInputStream(baos.toByteArray()); } catch (COSVisitorException e) { logger.warn("COSVisitorException: can't get apereance stream ", e); } logger.debug("stream returning started, size= " + in.available()); // we must close the document this.pdfBuilder.closeTemplate(template); // return result of the stream return in; }
From source file:at.gv.egiz.pdfas.lib.impl.stamping.pdfbox2.PDFAsTemplateCreator.java
License:EUPL
public InputStream buildPDF(PDFAsVisualSignatureDesigner properties, PDDocument originalDocument) throws IOException, PdfAsException { logger.debug("pdf building has been started"); PDFTemplateStructure pdfStructure = pdfBuilder.getStructure(); // we create array of [Text, ImageB, ImageC, ImageI] this.pdfBuilder.createProcSetArray(); //create page this.pdfBuilder.createPage(properties); PDPage page = pdfStructure.getPage(); //create template this.pdfBuilder.createTemplate(page); PDDocument template = pdfStructure.getTemplate(); //create /AcroForm this.pdfBuilder.createAcroForm(template); PDAcroForm acroForm = pdfStructure.getAcroForm(); // AcroForm contains singature fields this.pdfBuilder.createSignatureField(acroForm); PDSignatureField pdSignatureField = pdfStructure.getSignatureField(); // create signature this.pdfBuilder.createSignature(pdSignatureField, page, properties.getSignatureFieldName()); // that is /AcroForm/DR entry this.pdfBuilder.createAcroFormDictionary(acroForm, pdSignatureField); // create AffineTransform this.pdfBuilder.createAffineTransform(properties.getAffineTransformParams()); //AffineTransform transform = pdfStructure.getAffineTransform(); // rectangle, formatter, image. /AcroForm/DR/XObject contains that form this.pdfBuilder.createSignatureRectangle(pdSignatureField, properties, properties.getRotation() + properties.getPageRotation()); this.pdfBuilder.createFormaterRectangle(properties.getFormaterRectangleParams()); PDRectangle formater = pdfStructure.getFormatterRectangle(); //this.pdfBuilder.createSignatureImage(template, properties.getImageStream()); // create form stream, form and resource. this.pdfBuilder.createHolderFormStream(template); PDStream holderFormStream = pdfStructure.getHolderFormStream(); this.pdfBuilder.createHolderFormResources(); PDResources holderFormResources = pdfStructure.getHolderFormResources(); this.pdfBuilder.createHolderForm(holderFormResources, holderFormStream, formater); // that is /AP entry the appearance dictionary. this.pdfBuilder.createAppearanceDictionary(pdfStructure.getHolderForm(), pdSignatureField, properties.getRotation() + properties.getPageRotation()); // 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); // Image form is in this structure: /AcroForm/DR/FRM0/Resources/XObject/n0 //this.pdfBuilder.createImageFormStream(template); //PDStream imageFormStream = pdfStructure.getImageFormStream(); //this.pdfBuilder.createImageFormResources(); //PDResources imageFormResources = pdfStructure.getImageFormResources(); //this.pdfBuilder.createImageForm(imageFormResources, innerFormResource, imageFormStream, formater, transform, // pdfStructure.getJpedImage()); // now inject procSetArray /*this.pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, imageFormResources, holderFormResources, pdfStructure.getProcSet());*/ this.pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, null, holderFormResources, pdfStructure.getProcSet());//w ww. ja va 2s . c o m /*String imgFormName = pdfStructure.getImageFormName(); String imgName = pdfStructure.getImageName();*/ String innerFormName = pdfStructure.getInnerFormName().getName(); // 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); this.pdfBuilder.createVisualSignature(template); this.pdfBuilder.createWidgetDictionary(pdSignatureField, holderFormResources); ByteArrayInputStream in = null; //COSDocument doc = pdfStructure.getVisualSignature(); //doc. //in = pdfStructure.getTemplateAppearanceStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); template.save(baos); baos.close(); SignatureProfileSettings signatureProfileSettings = this.pdfBuilder.signatureProfileSettings; boolean requirePDFA3 = signatureProfileSettings.isPDFA3(); if (requirePDFA3) { //FileOutputStream fos = new FileOutputStream("/tmp/signature.pdf"); //fos.write(baos.toByteArray()); //fos.close(); PDDocument cidSetRemoved = PDDocument.load(baos.toByteArray()); try { this.pdfBuilder.removeCidSet(cidSetRemoved); baos.reset(); baos = new ByteArrayOutputStream(); cidSetRemoved.save(baos); baos.close(); } finally { cidSetRemoved.close(); } } in = new ByteArrayInputStream(baos.toByteArray()); logger.debug("stream returning started, size= " + in.available()); // we must close the document this.pdfBuilder.closeTemplate(template); // return result of the stream return in; }