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

时间:2018-10-10 13:01:57

标签: java list pdfbox

我正在将我的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。

代码是几年前写的,不是我写的。我已经尝试过一些诸如强制转换或更改类型的操作,但是始终会在不同的地方导致错误。

在此先感谢您的帮助

1 个答案:

答案 0 :(得分:2)

PDPageTree实现Iterable<PDPage>,因此您实际上需要一种为List生成Iterable的方法。

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

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