gpt4 book ai didi

java - iText setRotateContents(false) 横向 PDF 的奇怪行为?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:37:32 25 4
gpt4 key购买 nike

我连接了几个 PDF 文件,其中一些是横向文件。我现在正在为最终 PDF 的每一页加盖印记。

我意识到不使用 setRotateContents(false) 将导致您的修改以 -90 度添加到您期望的位置。除了我的一些横向页面在这个阶段实际上正确地将修改定位在 0 度。

如果我使用 setRotateContents(false) 那么所有这些修改都会顺时针旋转 90 度,这意味着我在横向页面上的大部分页面修改现在都是 0 度,但我的一些横向页面现在是在 +90 度。

问题是我无法弄清楚是什么导致我的页面出现这种奇怪的行为?他们都使用非常相似的代码来生成报告。以前有人遇到过类似的问题吗?

最佳答案

有 3 种不同的方式来制作横向页面,这三种方式都被使用(我在这里使用 8.5x11 作为基础,YMMV):

  1. 11x8.5(这些是“看起来正确”的页面。
  2. 8.5x11 90顺时针
  3. 8.5x11 90 逆时针

所以你需要检查页面的旋转。

int rot = PdfReader.getPageRotation(pageNum);

如果你想让你的图章“均匀”出来,你需要根据那个旋转来改变它。基本的转换是这样的:

cos(rot), sin(rot), -sin(rot), cos(rot), xoff, yoff

旋转围绕原点,0,0。您需要 xoffyoff 将图章移回您想要的位置。因为您可以组合转换,所以一个常见的技巧是:

  1. 移动您的对象,使其以原点为中心。
  2. 旋转
  3. 将其移回。

当您以正确的顺序组合这三个单独的转换时,您最终会得到一个可以完成您想要的操作的单个转换。

或者您可以作弊并使用 AffineTransform.getRotateInstance(theta, centerX, centerY),但这有什么乐趣呢? PdfContentByte.transform(AffineTransform) 将为您提取数组,但所有元素都按正确的顺序简单地将它们传递给接受转换为六个 float 的任何内容字节函数(参数通常称为“a、b、c、d、h、v”)。

关于java - iText setRotateContents(false) 横向 PDF 的奇怪行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6383669/

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