如何在不创建新数组的情况下获取 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();
}
我的代码工作得很好但是
- 我创建了额外的 List< byte[] > 以节省页面字节数。我只想拥有字节位置 - 如果我知道页面的字节索引 (页面起始位置,页面结束位置) 我将从主字节数组中提取它。
也许我可以在 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 的大小。
是否可以只在字节数组中找出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();
}
我的代码工作得很好但是
- 我创建了额外的 List< byte[] > 以节省页面字节数。我只想拥有字节位置 - 如果我知道页面的字节索引 (页面起始位置,页面结束位置) 我将从主字节数组中提取它。
也许我可以在 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 的大小。