将 PDFBox 迁移到 2.x 时出现 GetPages 错误

Posted

技术标签:

【中文标题】将 PDFBox 迁移到 2.x 时出现 GetPages 错误【英文标题】:GetPages error while migrating PDFBox to 2.x 【发布时间】:2019-03-15 09:43:13 【问题描述】:

我正在将我的 PDFBox 1.8.x 迁移到 2.0.12,并且必须进行一些更改。

我无法弄清楚的最后一个发生在下面的代码中。

    public static byte[] mergeDocuments(byte[] document1, byte[] document2) 
    try (PDDocument pdDocument1 = load(document1); PDDocument pdDocument2 = load(document2)) 
        final List<PDPage> pages1 = getPages(pdDocument1);
        final List<PDPage> pages2 = getPages(pdDocument2);
        pages1.addAll(pages2);
        return createDocument(pages1);
     catch (IOException e) 
        throw new RuntimeException(e);
    


private static List getPages(PDDocument pdDocumentTarget) 
    return pdDocumentTarget.getDocumentCatalog().getAllPages();

最后一行发生错误,我必须将旧的“.getAllPages()”更改为“.getPages”,但随后我将 PDPageTree 作为返回而不是 List。

代码是几年前写的,不是我写的。我已经尝试过一些事情,比如强制转换或更改类型,但它总是会在不同的地方导致错误。

提前感谢您的帮助

【问题讨论】:

除了答案,你也可以试试document.getPage(i)document.getNumberOfPages() 【参考方案1】:

PDPageTree 实现了Iterable&lt;PDPage&gt;,因此您实际上需要一种为Iterable 生成List 的方法。

This question 说明了许多方法,例如假设 Java 8:

private static List<PDPage> getPages(PDDocument pdDocumentTarget) 
    List<PDPage> result = new ArrayList<>();
    pdDocumentTarget.getPages().forEach(result::add);
    return result;

【讨论】:

以上是关于将 PDFBox 迁移到 2.x 时出现 GetPages 错误的主要内容,如果未能解决你的问题,请参考以下文章

迁移到 androidX 时出现异常

使用 Workbench 将 MS Access 迁移到 MySQL 时出现日期时间错误

将存储库从 Windows 迁移到 Linux 时出现格式错误的转储文件头(编码问题?)

将 API 迁移到 .net Core 3 时出现 JWT 401 未经授权的错误

使用 Hibernate 将 Java 应用程序从 DB2 迁移到 BigQuery 时出现错误“找到:int64,预期:整数”

将Wix 3.0迁移到Wix 4.0时出现错误:WXCP0006:此节点前的空格不正确(WhitespacePrecedingNodeWrong)