【发布时间】:2016-12-30 20:18:18
【问题描述】:
我想将 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);
}
}
}
输出示例:PDF 中的位置 = 535.68, 97.79052(用户空间单位)
不幸的是,我在旋转页面时遇到了问题。有很多 pdf 在“getCurrentPage().getRotation()”上返回 90。对于 90 度,我必须切换 getTranslateX 和 getTranslateY 值才能获得正确的位置,但这仅适用于 90 度。有什么很酷的矩阵转换可以用来旋转位置吗?
我认为在this 代码中,作者试图解决这个旋转问题,但是第一)我不明白转换在做什么,第二)它不能正常工作,因为在旋转后一个值为负.
【问题讨论】: