PDFBox renderImage在指定比例下生成不正确的图像尺寸

时间:2019-11-10 20:27:14

标签: java pdf pdfbox

我正在使用非常有用的PDFBox构建简单的pdf冲压GUI。

但是我注意到特定文档存在严重问题。

当我为渲染指定特定的比例因子时,预期的输出图像大小会有所不同。

更糟的是什么?沿水平轴用于生成图像的比例因子与沿垂直轴不同。

这是我使用的代码:

/**
 * @param pdfPath The path to the pdf document
 * @param page The pdf page number(is zero based)
 */
public BufferedImage loadPdfImage(String pdfPath, int page) {
    File file = new File(pdfPath);

    try (PDDocument doc = PDDocument.load(file)) {

        pageCount = doc.getNumberOfPages();
        PDPage pDPage = doc.getPage(page);

       float w = pDPage.getCropBox().getWidth();
       float h = pDPage.getCropBox().getHeight();

       System.out.println("Pdf opening: width: "+w+", height: "+h);


        PDFRenderer renderer = new PDFRenderer(doc);

        float dpiRatio =  1.5f;

        BufferedImage img = renderer.renderImage(page, dpiRatio);

 float dpiXRatio = img.getWidth() / w;
 float dpiYRatio = img.getHeight()/ h;


       System.out.println("dpiXRatio: "+dpiXRatio+", dpiYRatio: "+dpiYRatio);

        return img;
    } catch (IOException ex) {
        System.out.println( "invalid pdf found. Please check");
    }

    return null;
}

上面的代码加载了我尝试过的大多数pdf文档,并将其中的给定页面转换为BufferedImage对象。

但是对于所述文档,似乎无法以提供的比例因子渲染转换后的图像。

我的代码有什么问题吗?还是已知的错误?

谢谢。

编辑

我正在使用PDFBOX v2.0.15

页面没有旋转。

1 个答案:

答案 0 :(得分:1)

错误是我的;大多数情况下。

我使用MediaBox计算比例因子,不幸的是,所讨论的pdf文件的MediaBox和CropBox不相同。

例如:

cropbox-rect: [8.50394,34.0157,586.496,807.984]
mediabox-rect: [0.0,0.0,595.0,842.0]

在对这些值进行校正之后,比例因子在两个轴上的匹配度都更好,但由于图像大小是整数而导致的误差除外。

这对我来说可以忽略不计。

冲压时,我所要做的就是对裁切盒进行必要的更正。例如,要在P(x,y)处绘制图像(邮票),我会这样做:

        x += cropBox.getLowerLeftX();
        y += cropBox.getLowerLeftY();

在调用绘图图像功能之前。

一切都很好!