通过在一个pdf文件中组合多个pdf文件和内容来生成合并的PDF文件报告

时间:2015-07-04 05:38:14

标签: java pdf pdf-generation itext

我正在构建一个工具,根据用户提供的输入生成pdf报告。

但我所拥有的情况就像让我们说用户提供的输入而且输入必须在pdf报告中合并20个项目(或者可能是更多项目)并且每个项目都有一些记录存储在DB中并且还有pdf存储在DB中的文件。现在我需要从数据库及其pdf文件以及所有20个项目中获取每个项目记录,然后将所有项目合并到将在用户系统中下载的单个报告中。

我是怎么做的:我为每20个项目创建一个单独的pdf文件,然后将它们合并到一个pdf文件中,但这似乎更耗时,也影响了页码。我也尝试通过阅读pdfs内容并将它们附加到一个StringBuffer中然后在最终的pdf中写入StringBuffer但是在这之后我无法读取pdf的内容,因为它是不可读的格式。 我正在使用iText和Yahp jar来整合报告。有人可以建议我,如果我能以更好的方式取得同样的结果。

public static void doMerge(List<InputStream> list, OutputStream outputStream)
        throws DocumentException, IOException {

    Document document = new Document();

    com.lowagie.text.Rectangle pageSize1 = new com.lowagie.text.Rectangle(695.0F, 942.0F);

     document.setPageSize(pageSize1);

    PdfWriter writer = PdfWriter.getInstance(document, outputStream);

    document.open();

    PdfContentByte cb = writer.getDirectContent();

    writer.setPageEvent(null);

    PdfReader reader = null;

    for (InputStream in : list) {

        reader = new PdfReader(in);

        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            document.newPage();
            PdfImportedPage page = writer.getImportedPage(reader, i);
            cb.addTemplate(page, 0, 0);
        }
    }

    outputStream.flush();
    document.close();
    outputStream.close();
    writer.close();
    reader.close();
}

0 个答案:

没有答案