Example usage for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDFTemplateStructure getInnerFormResources

List of usage examples for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDFTemplateStructure getInnerFormResources

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible PDFTemplateStructure getInnerFormResources.

Prototype

public PDResources getInnerFormResources() 

Source Link

Document

Gets inner form Resource

Usage

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());/*  www. j a v a  2s.  c  o  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());//from   w w  w .  j  av  a 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;
}