【发布时间】:2017-11-20 00:20:37
【问题描述】:
我正在使用 PDFBox 并尝试旋转图像并使其在屏幕上正确定位。我正在使用的设计编辑器输出以下有关可能有用的图像的信息。
图像边界框左上角坐标(我使用左下角坐标更好地适应 PDFBox 坐标空间。)
图像旋转度数
图像宽度和高度
翻译似乎已关闭。
// Rotation
AffineTransform rotation = new AffineTransform();
rotation.rotate(Math.toRadians(360 - element.getAngle()),
element.getLeft() + scaledWidth/2,
adjustedYPos + scaledHeight/2);
stream.transform(new Matrix(rotation));
// Position & scale
AffineTransform mat = new AffineTransform(scaledWidth,
0,
0,
scaledHeight,
element.getLeft(),
adjustedYPos);
// Draw the final image
stream.drawImage(pdfImage, new Matrix(mat));
旋转基于图像的中心作为锚点。
【问题讨论】:
-
您的代码不需要的结果是......?好的,我认为它没有正确定位,但它完全关闭了吗?还是一点点?
-
图像靠近所需位置,并且旋转正确。该问题似乎与边界框有关。当用户创建一个设计时,输出的 json 文件会以任何旋转方式存储图像的最终边界框。就定位而言,我可以进入大致范围,但由于在用户开始旋转图像之前我们没有原始边界框,因此我们无法重建他们在尝试在 PDF 上定位图像时所采取的过程。跨度>
-
但是你的数据引用的边界框(像往常一样)是最小的,不是吗?在这种情况下,确定所有数据应该是简单的数学运算。以及如何确定
adjustedYPos? -
是的,最小值是正确的。如果我可以访问图像的四个角位置,那么计算起来会很容易。但据我所知,我没有办法这样做吗?除非有什么我忽略了。 adjustedYPos = page.getMediaBox().getHeight() - (element.getTop() + scaledHeight)
-
我的回答有帮助吗?