我正在构建一个工具,根据用户提供的输入生成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();
}