gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:19:24 25 4
gpt4 key购买 nike

我正在使用非常有用的 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

并且页面没有旋转。

最佳答案

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

我使用 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();

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

一切顺利!

关于java - PDFBox renderImage 在指定比例下生成不正确的图像尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58792648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com