在 pdfbox 2.00 中使用 PDFMergerUtility 合并文档

Posted

技术标签:

【中文标题】在 pdfbox 2.00 中使用 PDFMergerUtility 合并文档【英文标题】:Merge document with PDFMergerUtility in pdfbox 2.00 【发布时间】:2016-06-24 23:15:05 【问题描述】:

Pdfbox 将文档与 1.8.xx 合并,就像 mergePdf.mergeDocuments() 一样工作正常。现在 pdfbox 版本 2.0.0 包含一些参数,例如 org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(MemoryUsageSetting arg0) 什么是 MemoryUsageSetting 如何与 mergeDocuments 一起使用。我读起来像 合并源文档列表,将结果保存在目标文件中。 请提供一些相当于 2.0 版的代码.0

public void combine()
    
        try
        
        PDFMergerUtility mergePdf = new PDFMergerUtility();
        String folder ="pdf";
        File _folder = new File(folder);
        File[] filesInFolder;
        filesInFolder = _folder.listFiles();
        for (File string : filesInFolder)
        
            mergePdf.addSource(string);    
        
    mergePdf.setDestinationFileName("Combined.pdf");
    mergePdf.mergeDocuments();
        
        catch(Exception e)
        

          
    

【问题讨论】:

【参考方案1】:

根据javadoc,MemoryUsageSetting 控制如何使用内存/临时文件进行缓冲。

两个最简单的用法是:

MemoryUsageSetting.setupMainMemoryOnly()

这会将缓冲内存使用设置为仅使用大小不受限制的主内存(无临时文件)。

MemoryUsageSetting.setupTempFileOnly()

这会将缓冲内存使用设置为仅使用大小不受限制的临时文件(无主内存)。

所以对你来说,电话是

mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());

mergePdf.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());

或者只是传递null。这将默认仅用于主内存。这也是javadoc 告诉的内容:memUsageSetting 定义了如何使用内存来缓冲 PDF 流;在 null 的情况下使用不受限制的主内存。

【讨论】:

appendchild 在 1.8.8 的 PDDocumentOutline 中使用,现在我们使用 2.00 作为 addLast 它有什么不同 @SenthilKumar 这是一个不同的问题,但是是的,您可以使用它。我看到迁移指南中没有提到它。作为一般规则 - 始终查看示例源。还有一个关于 2.0 文档的建议问题(但不是关于“如何”的问题!):issues.apache.org/jira/browse/PDFBOX-3030 今天晚些时候我会提到大纲。 @SenthilKumar 如果答案有用,请点击绿色复选标记。 (这适用于您在此处提出的所有问题)。如果答案没有帮助或不清楚,请向此人提供反馈,以便她/他可以改进答案。

以上是关于在 pdfbox 2.00 中使用 PDFMergerUtility 合并文档的主要内容,如果未能解决你的问题,请参考以下文章

Java 使用PDFBox提取PDF文件中的图片

使用 PDFbox 确定文档中单词的坐标

“2.00”和“2.00f”之间有功能区别吗?

不知道如何运行此pdfbox注释示例

使用 pdfbox 编辑 pdf 页面

PDFBox 2.0:在 TextStripper 中获取颜色信息