首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何合并Pdfs?

如何合并Pdfs?
EN

Stack Overflow用户
提问于 2018-05-11 09:09:15
回答 1查看 4.6K关注 0票数 1

我有问题,需要你的帮助。我正在运行电话分机7.0.2。java和我正在尝试将一个类型为ArrayList的列表PdfDocument合并到一个pdf中。

我尝试了以下几点:

代码语言:javascript
运行
复制
        ByteArrayOutputStream bosGes = new ByteArrayOutputStream();
        PdfWriter writerGes = new PdfWriter(bosGes);
        PdfDocument docGes = new PdfDocument(writerGes);
        ArrayList<PdfDocument> pdfs = AListOfSomePreviousCreatedPdfDocuments;

        for (int i=0; i < pdfs.size(); i++) {
            PdfDocument d = pdfs.get(i);
            PdfPage p = d.getFirstPage().copyTo(docGes);
            docGes.addPage(p);
            d.close();
        }

导致此错误:

com.itextpdf.kernel.PdfException:不能从正在写入的文档中复制间接对象。

然后我尝试了以下几点:

代码语言:javascript
运行
复制
        ByteArrayOutputStream bosGes = new ByteArrayOutputStream();
        PdfWriter writerGes = new PdfWriter(bosGes);
        PdfDocument docGes = new PdfDocument(writerGes);

        for (int i=0; i < pdfs.size(); i++) {
            PdfDocument d = pdfs.get(i);
            docGes.addPage(d.getFirstPage());
            d.close();
        }

com.itextpdf.kernel.PdfException:页面com.itextpdf.kernel.pdf.PdfPage@1d85315f不能添加到文档com.itextpdf.kernel.pdf.PdfDocument@32ae81bb中,因为它属于文档com.itextpdf.kernel.pdf.PdfDocument@32ae81bb

我要做的是,将这个PdfDocuments (每个页面只有一个页面)合并成一个Pdf吗?

好吧,我要疯了。从一开始就解释。

我创建如下pdf格式

代码语言:javascript
运行
复制
        ArrayList<PdfDocument> pdfs = new ArrayList<PdfDocument>();
        while (rs.next()) {
            URL fullPath = context.getResource("/formulare/kontrollbogen.pdf");
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            PdfWriter writer = new PdfWriter(bos);
            PdfReader reader = new PdfReader(fullPath.getFile());
            PdfDocument doc = new PdfDocument(reader, writer);
            PdfAcroForm form = PdfAcroForm.getAcroForm(doc, true);

            String firma = rs.getString("firma");
            if (firma != null && !firma.equals("")) {
                form.getField("firma").setValue(firma);
            }
                .
                .
                .
            pdfs.add(doc);
       }

然后我想将这个PdfDocuments合并到我的ArrayList中,如下所示:

代码语言:javascript
运行
复制
        ByteArrayOutputStream bosGes = new ByteArrayOutputStream();
        PdfWriter writerGes = new PdfWriter(bosGes);
        PdfDocument resultDoc = new PdfDocument(writerGes);

        for (int i=0; i < pdfs.size(); i++) {
            PdfReader r = pdfs.get(i).getReader();
            PdfDocument sourceDoc1 = new PdfDocument(r);
            int n1 = sourceDoc1.getNumberOfPages();             

            for (int j = 1; j <= n1; j++) {
                PdfPage page = sourceDoc1.getPage(j).copyTo(resultDoc);
                resultDoc.addPage(page);
            }
            sourceDoc1.close();
        }

        resultDoc.close();

不起作用。结果是一个pdf与更多的页,但表格没有填写。

因此,我尝试RTFM和Bruno的例子,合并扁平的表单,但结果总是一个pdf的空表单。

有人能帮我把我的ArrayList中的pdf -表格(所有相同的表格)转换成一个pdf吗?

我试过布鲁诺的小费但不管用。我所做的是:

代码语言:javascript
运行
复制
        //Initialize PDF document with output intent
        PdfDocument pdf = new PdfDocument(writerGes);
        PdfMerger merger = new PdfMerger(pdf);
        //Add pages from the first document
        PdfDocument firstSourcePdf = pdfs.get(0);
        merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());
        //Add pages from the second pdf document
        PdfDocument secondSourcePdf = pdfs.get(1);
        merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());
        firstSourcePdf.close();
        secondSourcePdf.close();
        pdf.close();

但最后又出现了这样的错误:

com.itextpdf.kernel.PdfException:无法从正在写入的文档中复制间接对象。

这可能是因为我的pdf是表单,合并时我必须重置值吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-28 15:35:27

这就是我如何将两个pdf文档合并在一起的方法。

代码语言:javascript
运行
复制
if (1 <= listOfFiles.Count)
{
    masterSrc = subPath + "/" + date + " - " + dateEnd + ".pdf";

    PdfDocument merged = new PdfDocument(new PdfWriter(Server.MapPath(masterSrc)));

    for (int a = 0; a < listOfFiles.Count; a++)
    {
        PdfDocument origPdf2 = new PdfDocument(new PdfReader(Server.MapPath(listOfFiles[a])));
        PdfMerger merger = new PdfMerger(merged);
        merger.Merge(origPdf2, 1, origPdf2.GetNumberOfPages());

    }
    merged.Close();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50288864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档