是否可能只找出字节数组中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标头中或某处找到此信息...
现在,我正在尝试优化内存,因为我并行解析了数百个文档。所以我不想创建重复的数组。
答案 0 :(得分:1)
如果我知道页面的字节索引(页面开始位置,页面结束位置),我将从主字节数组中提取出来。
正如@Amedee在评论中所暗示的那样,每个页面上都没有单独的pdf部分。
pdf由多个对象(内容流,字体资源,图像资源等)构成,并且两个页面可能使用相同的对象(例如,使用相同的字体或图像)。此外,pdf可能包含未使用的对象。
因此,部分pdf大小的总和可能已经小于,大于甚至等于完整pdf的大小。