IText使用PDF Reader为现有pdf添加新页面

时间:2014-12-17 19:15:59

标签: jsf pdf itext

我要做的是在setFields()方法之后立即在我正在编辑的当前pdf的末尾添加一个新页面。我用PdfReader得到它并且从来没有Document对象所以我不确定如何做到这一点。以下是创建PDF的两种方法。

编辑:

经过进一步调查,我发现你可以插入一个带有stamper.insertPage的页面。但这似乎有点太难以做到我想要它。有没有办法将两个pdf与acrofields合并在一起?通过合并我的意思是第一个pdf有2页,第二个pdf有1页并将它们放在一起,现在pdf有3页。

public static void createPdf(MyDocument document) {
    try {
        PdfReader pdfTemplate = initPdfReader();

        if (pdfTemplate != null) {
            OutputStream output = FacesContext.getCurrentInstance().getExternalContext().getResponseOutputStream();

            PdfStamper stamper = new PdfStamper(pdfTemplate, output);
            stamper.setFormFlattening(true);

            AcroFields fields = stamper.getAcroFields();
            setFields(document, fields, stamper);

            stamper.close();
            FacesContext.getCurrentInstance().responseComplete();
        }
    } catch (Exception e) {
        BeanUtils.addMessage(new Message("An error has occurred while crating PDF.:" + ExceptionUtils.getStackTrace(e)));
        LOG.error(e);
    }
}

InitPdfReader()

public static PdfReader initPdfReader() throws Exception {
    PdfReader pdfReader = null;
    InputStream inStream = null;

    try {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();

        ec.responseReset();
        ec.setResponseContentType("pdf");
        ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + "FileName" + "\"");

        inStream = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/resources/documents/MyDocument.pdf");
        pdfReader = new PdfReader(inStream);
        pdfReader.close();
    } finally {
        if (inStream != null) {
            inStream.close();
        }
    }
    return pdfReader;
}

0 个答案:

没有答案