Java 通过将多个PDF文件和内容合并到一个PDF文件中,生成合并的PDF文件报告

Java 通过将多个PDF文件和内容合并到一个PDF文件中,生成合并的PDF文件报告,java,pdf,pdf-generation,itext,Java,Pdf,Pdf Generation,Itext,我正在构建一个工具,根据用户提供的输入生成pdf报告 但我的情况是,假设用户提供的输入,输入必须在一个pdf报告中合并20项(或者可能是更多项),每个项都有一些记录存储在DB中,还有一个pdf文件存储在DB中。现在,我需要从数据库中获取每个项目的记录以及所有20个项目的pdf文件,然后将它们合并到单个报告中,这些报告将在用户系统中下载 我是如何做到的:我为每20个项目创建一个单独的pdf文件,然后将所有项目合并到一个pdf文件中,但这似乎更耗时,也会影响页码。我还尝试读取pdf内容,并将其附加到

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

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

我是如何做到的:我为每20个项目创建一个单独的pdf文件,然后将所有项目合并到一个pdf文件中,但这似乎更耗时,也会影响页码。我还尝试读取pdf内容,并将其附加到一个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();
}
publicstaticvoiddomerge(列表列表,OutputStream-OutputStream)
抛出DocumentException,IOException{
文档=新文档();
com.lowagie.text.Rectangle pageSize1=新的com.lowagie.text.Rectangle(695.0F,942.0F);
文件。设置页面大小(页面大小1);
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
document.open();
PdfContentByte cb=writer.getDirectContent();
writer.setPageEvent(null);
PdfReader reader=null;
用于(输入流输入:列表){
读卡器=新的PDF读卡器(in);

对于(int i=1;i您是如何合并文件的?如果您做得对,您使用的是
PdfCopy
,但是由于您没有显示任何代码,您的问题可能是您做得不对。还不清楚您在页码方面存在哪些问题。最后,您尝试在StringBuffers中附加PDF文件时告诉我们,您没有阅读任何e文档。这是我用来合并PDF的代码…关于页码每一页都有它的页码,就像第1/10页,第2/10页。当我合并PDF时,它会显示它们各自的相同页码,而不是最终的PDF。很明显,你不理解PDF。一个页面不知道它的页码。只是在页面的某个位置添加了一些内容。如果你认为这些内容可以自动“适应”,那么你对PDF的一些假设是完全错误的。请阅读一本关于PDF的书。请下载(这是免费的,将是一个很大的帮助)。通过阅读此文档,您将了解到您的代码是错误的。例如,请参阅。文档也进行了解释。非常感谢@Bruno Lowagie..是的,您是对的,我是第一次使用iText API…现在,我使用PdfCopy完成了此操作,问题得到了解决…非常高兴看到您的评论…您做得非常好…您如何合并此应用程序文件?如果您做得对,您使用的是
PdfCopy
,但由于您没有显示任何代码,您的问题可能是您做得不对。还不清楚您在页码方面存在哪些问题。最后,您尝试在StringBuffers中附加PDF文件时告诉我们,您没有阅读任何文档。这就是我习惯于合并PDF…关于页码,每页都有自己的页码,比如第1/10页,第2/10页等。当我合并PDF时,它会单独显示相同的页码,而不是最终的PDF。很明显,你不理解PDF。一个页面不知道它的页码。它只是在某个页面上添加的一些内容在页面上的位置。如果你认为内容可以自动“适应”,那么你对PDF的一些假设是完全错误的。请阅读一本关于PDF的书。请下载(这是免费的,会有很大帮助)。通过阅读此文档,您将了解到您的代码是错误的。例如,请参阅。文档也进行了解释。非常感谢@Bruno Lowagie。。是的,您是对的,我是新使用iText API的……现在我使用PdfCopy完成了此操作,问题得到了解决……非常高兴看到您的评论……您做得非常好。。。。