如何在不创建新数组的情况下获取 PDF 页面位置

How to get PDF page location without creating new array

是否可以只在字节数组中找出PDF页面的位置?

目前我解析完整的 PDF 以找出页面字节数:

  public static List<byte[]> splitPdf(byte[] pdfDocument) throws Exception {
        InputStream inputStream = new ByteArrayInputStream(pdfDocument);
        PDDocument document = PDDocument.load(inputStream);
        Splitter splitter = new Splitter();
        List<PDDocument> PDDocs = splitter.split(document);
        inputStream.close();
        List<byte[]> pages = PDDocs.stream()
                .map(PDFUtils::getResult).collect(Collectors.toList());
}

private  static byte[] getResult(PDDocument pd) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    pd.save(byteArrayOutputStream);
    return byteArrayOutputStream.toByteArray();
}

我的代码工作得很好但是

也许我可以在 PDF header 或其他地方找到此信息...

现在我正在尝试优化内存,因为我并行解析了数百个文档。所以我不想创建重复的数组。

If I know byte indexes of page (page start location, page end location) I'll extract this from main byte array.

正如@Amedee 已经在评论中暗示的那样,每个页面都不是简单的 pdf 部分。

pdf 由多个对象(内容流、字体资源、图像资源...)构成,两个页面可能使用相同的对象(例如使用相同的字体或图像)。此外,pdf 可能包含未使用的对象。

所以您的部分 pdf 的大小总和可能已经小于、大于甚至等于完整 pdf 的大小。