调整pdf中的图像大小而不流式传输(pdfbox)

时间:2018-02-23 17:16:05

标签: java pdfbox

我在将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

0 个答案:

没有答案