如何使用 itext 7.1.0 将以文本为内容的矩形旋转到某个角度(例如逆时针方向 90')?

2023-11-29

我必须有一个矩形,其中包含一些上下文作为文本。我必须将矩形旋转到某个角度(例如逆时针 90'),这样内容也会旋转。然而,当我编写这段代码时,它只显示一个矩形。

这是代码:

package main;

import java.io.FileNotFoundException;

import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.Property;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.VerticalAlignment;

public class main {

    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub
        String dest = "C:\\Users\\beast\\Desktop\\samplePdf";
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfPage page = pdf.addNewPage();
        PdfCanvas pdfCanvas = new PdfCanvas(page);
        Rectangle rect1 = new Rectangle(183, 488, 180, 32);
//      cordinates after rotation 90' counter clockwise
        Rectangle rect2 = new Rectangle(151, 488, 32, 180);
        pdfCanvas.rectangle(rect1);
        pdfCanvas.stroke();
        Canvas canvas = new Canvas(pdfCanvas, pdf, rect1);
        Text title = new Text("Thbvhs ybhsvb");
        Paragraph p = new Paragraph().add(title);
        canvas.add(p);
        AffineTransform transform=AffineTransform.getRotateInstance((float)(Math.PI/2));
        pdfCanvas.concatMatrix(transform);
        canvas.close();
        canvas=new Canvas(pdfCanvas, pdf, rect2);
        pdfCanvas.rectangle(rect2);
        pdfCanvas.stroke();
        canvas.add(p);
        canvas.close();
        pdf.close();

    }

}

这是 pdf 的输出:

enter image description here


随着您的介绍AffineTransform transform你已经走在正确的道路上了。但你必须应用旋转before添加您想要旋转的内容。这里的转换不会更改已添加的内容,而是更改即将出现的内容的坐标系。

另外你需要做transform围绕合理的旋转中心旋转。您的实例围绕坐标系的原点(即页面的左下角)旋转,但您显然希望围绕矩形的左下角旋转。

Thus:

try (PdfDocument pdf = new PdfDocument(new PdfWriter("RotatedForAnkushGupta.pdf"))) {
    PdfPage page = pdf.addNewPage();
    PdfCanvas pdfCanvas = new PdfCanvas(page);

    Rectangle rect1 = new Rectangle(183, 488, 180, 32);

    AffineTransform transform = AffineTransform.getRotateInstance(Math.PI/2, rect1.getX(), rect1.getY());
    pdfCanvas.concatMatrix(transform);

    pdfCanvas.rectangle(rect1);
    pdfCanvas.stroke();

    try (Canvas canvas = new Canvas(pdfCanvas, rect1)) {
        Text title = new Text("Thbvhs ybhsvb");
        Paragraph p = new Paragraph().add(title);
        canvas.add(p);
    }
}

(旋转一些内容 test testForAnkushGupta)

您可能需要添加pdf作为第二个参数Canvas构造函数。在 iText 7.2.x(我在这里使用的)中,该参数已被删除,但在您使用的版本 7.1.0 中似乎仍然需要该参数。

结果:

screenshot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 itext 7.1.0 将以文本为内容的矩形旋转到某个角度(例如逆时针方向 90')? 的相关文章

  • 用 @DataJpaTest 注释的测试不是用 @Autowired 注释的自动装配字段

    我有一个 Spring Boot 应用程序 其中包含 Spring Data Jpa 存储库 我需要围绕这个存储库运行单元 或组件 测试 我对 Spring Data Jpa 没有太多经验 这是我的测试 这很简单 我无法让它通过 impor
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序

随机推荐

  • 2048年制作转变功能

    假设我有一个清单 board 2 4 0 2 8 4 4 8 0 2 0 0 4 0 2 2 我已经有一些代码可以使列表显示如下 2 4 0 2 8 4 4 8 0 2 0 0 4 0 2 2 那么有没有办法让我从每行中删除每个 0 并将其
  • 在 SELECT 语句中执行存储过程

    例如 我有一个 select 语句 它返回 1000 行 我需要为 select 语句返回的每一行执行特定的存储过程 你知道我该怎么做吗 在您的 select 中构造 EXECUTE 语句 如下所示 SELECT EXEC sp whate
  • iOS 11.1 游戏顶部和底部触摸无响应

    自从安装 iOS 11 1 以来 我们发现屏幕顶部和底部的条带对触摸没有响应 这会影响我开发的横向应用程序和纵向应用程序 它们使用金属 API 进行渲染 在其他一些开发者的应用程序上也观察到了这个问题 例如Golf Clash 但不是其他
  • 实体框架错误 - 使用的 SQL Server 版本不支持数据类型“datetime2”

    我在 ASP NET 4 0 Web 窗体中使用 Entity Framework 4 0 开发服务器上一切正常 但是当我到达生产服务器时 我的 Elmah 记录了此错误 系统参数异常使用的SQL Server版本不支持 数据类型 date
  • 为什么 Chrome 会取消 302 下载?

    Edit 在解决了一些可能或可能不会引起问题的问题后 进一步的测试显示受影响的用户无法下载文件 甚至无法直接下载文件 这就提示了这个问题在 Webmasters Stackexchange 上 我接受似乎已经解决了问题的答案 如果这一切都与
  • PHP 无头浏览器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 PHP 有无头浏览器库吗
  • Python:kernel32.CreateProcessA() 它在做什么?

    我目前正在学习调试器以及它们如何停止进程 这是我的代码 from ctypes import WORD c ushort DWORD c ulong LPBYTE POINTER c ubyte LPTSTR POINTER c char
  • Python - YouTube API v3 - 如何仅获取视频ID?

    如何只获取视频的视频ID 据我所知 我应该使用字段来实现这一点 但我不明白它们是如何工作的 我的代码 service build youtube v3 developerKey api key request service search
  • Apache POI 与 Android — 如何创建、读取、写入、删除 PowerPoint 演示文稿? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我必须将 Apache POI API 与 android 一起使用是否可能 Provide me some tutorial links about this 请解释一下这一点 A
  • 如何使 Bootstrap 3 导航栏在所有屏幕尺寸下保持折叠状态

    在 Bootstrap 3 中 我希望所有屏幕尺寸的导航栏默认折叠 我已经发现hereBootstrap 3 是移动优先的 它的导航栏默认是 折叠 的 并且当它达到某个最小尺寸时 展开 在那篇文章之后 我尝试着搞乱 grid float b
  • Android:展开/折叠动画

    假设我有一个垂直的 LinearLayout v1 v2 默认情况下 v1 可见 GONE 我想用展开动画显示 v1 并同时按下 v2 我尝试过这样的事情 Animation a new Animation int initialHeigh
  • python zlib如何解压多个对象

    我尝试在我的文件上写入许多 zlib 块 有没有办法可以从我的文件中获取所有未压缩的内容 从下面的示例代码我只能得到我的第一个数据 预先感谢您的任何意见 Python 3 6 8 Anaconda Inc default Dec 29 20
  • xsd 从枚举或等效类型中选择多个值

    我有以下 XSD 示例
  • 以编程方式设置 AUTO_INCRMENT 值

    所以这有效 ALTER TABLE variation AUTO INCREMENT 10 但我想这样做 ALTER TABLE variation AUTO INCREMENT SELECT MAX id 1 FROM old db va
  • Java 中的字符串解析,使用 split 分隔符选项卡“\t”

    我正在处理一个以制表符分隔的字符串 我正在使用以下方法来完成此操作split功能 并且在大多数情况下都有效 当某个字段丢失时就会出现问题 因此我不会在该字段中获取 null 而是获取下一个值 我将解析后的值存储在字符串数组中 String
  • 为什么我要 make() 或 new() ?

    介绍文档用了很多段落来解释之间的区别new and make 但实际上 您可以在本地范围内创建对象并返回它们 为什么要使用这对分配器 Go 有多种内存分配和值初始化的方式 T someLocalVar new make 创建复合文字时也可能
  • 如何在 IIS 中托管 WCF 服务而无需 SVC 文件

    我想在 IIS 中部署双接口 SOAP REST XML JSON WCF 服务 只需一个配置文件和二进制文件 URL 中没有 svc 文件 我们使用VS2012和 Net 4 5 我们有类似的东西 我遵循这里的指南 http blogs
  • 使用 chrome 驱动程序/firefox 驱动程序时如何更改 Webdriver 中的文件下载位置

    我试图通过使用特定文件夹内的 另存为 选项来保存图像 我找到了一种方法 可以右键单击要使用另存为选项保存的图像 但我遇到的问题是在获取操作系统窗口询问在哪里保存文件后 我无法发送所需的位置 因为我不知道该怎么做 我浏览了这个论坛上提出的类似
  • SwiftUI - Mapkit - 绑定 Mapkit 并在注释标注按钮上显示视图

    我有一个 SwiftUI 应用程序 其中显示了一张地图 使用由 UIViewRepresentable 制作的 Mapkit 并显示了不同的注释 在每个注释上 我都实现了一个标注按钮 我想在按下按钮时完全更改主视图 我的想法是使用主视图和地
  • 如何使用 itext 7.1.0 将以文本为内容的矩形旋转到某个角度(例如逆时针方向 90')?

    我必须有一个矩形 其中包含一些上下文作为文本 我必须将矩形旋转到某个角度 例如逆时针 90 这样内容也会旋转 然而 当我编写这段代码时 它只显示一个矩形 这是代码 package main import java io FileNotFou