gpt4 book ai didi

java - 使用 pdfbox 在 PDF 中获取正确(旋转)的图像尺寸

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:15 25 4
gpt4 key购买 nike

我想将 PDF 渲染为图像,并在其上绘制所有包含图像的边框。为此,我需要页面上图像的正确尺寸。

这适用于以下代码:

public class PrintImageLocations extends PDFStreamEngine
{
@Override
protected void processOperator( Operator operator, List<COSBase> operands) throws IOException
{
String operation = operator.getName();
if( "Do".equals(operation) )
{
COSName objectName = (COSName) operands.get( 0 );
PDXObject xobject = getResources().getXObject( objectName );
if( xobject instanceof PDImageXObject)
{
PDImageXObject image = (PDImageXObject)xobject;
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();

System.out.println("Found image " + objectName.getName());

Matrix ctmNew = getGraphicsState().getCurrentTransformationMatrix();
float imageXScale = ctmNew.getScalingFactorX();
float imageYScale = ctmNew.getScalingFactorY();
// position in user space units. 1 unit = 1/72 inch at 72 dpi
System.out.println("position in PDF = " + ctmNew.getTranslateX() + ", " + ctmNew.getTranslateY() + " in user space units");
}
else if(xobject instanceof PDFormXObject)
{
PDFormXObject form = (PDFormXObject)xobject;
showForm(form);
}
}
else
{
super.processOperator( operator, operands);
}
}

}

来源:PrintImageLocations.java

输出示例:PDF 中的位置 = 535.68,用户空间单位中的 97.79052

不幸的是,当页面旋转时我遇到了问题。有很多 pdf 在“getCurrentPage().getRotation()”上返回 90。对于 90 度,我必须切换 getTranslateX 和 getTranslateY 值才能获得正确的位置,但这仅适用于 90 度。是否有任何很酷的矩阵变换可以用来旋转位置?

我认为在this代码中,作者试图解决这个旋转问题,但是第一)我不明白转换正在做什么,第二)它无法正常工作,因为旋转后一个值为负数。

最佳答案

旋转

您可以使用以下旋转矩阵在欧几里得空间中执行旋转。

逆时针:

R = ⎡ cosθ -sinθ ⎤
⎣ sinθ cosθ ⎦

顺时针:

R = ⎡  cosθ  sinθ ⎤
⎣ -sinθ cosθ ⎦

每个矩阵都会将二维笛卡尔平面中的点绕原点旋转角度 θ。该技术假设每个点都表示一个列 vector v。每个点的新值通过 R * v 计算,其中 * 表示矩阵乘法。

<小时/>

“负”值

对于两个维度中的至少一个维度上的至少某些点,此技术将产生负值(无论如何,相对于初始值)。为了相对于笛卡尔原点进行校正,请将旋转图像“向上”平移 min(y) - min(y'),将旋转图像“右”平移 min(x) - min(x'),其中 min(d) 表示沿任意点的维度的最小值。

<小时/>

使用库

这样您就不必自己完成所有样板文件,您应该看看 AffineTransform类。

关于java - 使用 pdfbox 在 PDF 中获取正确(旋转)的图像尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41373262/

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