我在将pdf提取到图像(png)时遇到了一些问题。我收到了一些OOM错误[已经检查了pdfbox常见问题中关于oom错误的所有问题]所以我决定在转换之前创建一个检查。像这样:
private static boolean checkPDFImagesSize(PDDocument document) {
PDPageTree list = document.getPages();
PDXObject o;
for (PDPage page : list) {
PDResources pdResources = page.getResources();
for (COSName cosName : pdResources.getXObjectNames()) {
try {
o = pdResources.getXObject(cosName);
} catch (IOException e) {
LOG.info(e.toString());
}
if (o instanceof org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) {
if (((PDImageXObject) o).getHeight() * ((PDImageXObject) o).getWidth() * ((PDImageXObject) o)
.getBitsPerComponent() * 3.0 > ALERT_IMAGE_SIZE_INSIDE_PDF) {
return false;
}
}
}
}
return true;
}
基本上我在这里做的是尝试“猜测”推断流式传输和创建图像所需的值。如果它大于ALERT_IMAGE_SIZE_INSIDE_PDF,则返回false并向用户显示一条消息。
我的问题是用户抱怨这种方法。我需要知道的是,是否可以在pdf内调整图像大小(不流式传输)。我尝试了PDImageXObject.setHeight,但图像大小不起作用。这个问题还有其他方法!?
pdf例证: https://drive.google.com/file/d/13RIPcjj4EghOCcNSggUDcSaeUeqdqaZD/view?usp=sharing