如何使用 iText 将图形绘制为 PDF?

2023-11-29

我正在尝试完成一个绘制图形并将其写入 PDF 的示例,但我不断收到 PDF 没有页面的错误。如果我在打开后使用 document.add() 添加一些简单的东西,它工作正常,我只是永远看不到图形。这是我的代码:

Document document = new Document();
PdfWriter writer = new PdfWriter();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
    " attachment; filename=\"Design.pdf\"");

writer = PdfWriter.getInstance(document, response.getOutputStream());

document.open();    
PdfContentByte cb = writer.getDirectContent();
Graphics2D graphics2D = cb.createGraphics(36, 54);
graphics2D.drawString("Hello World", 36, 54);
graphics2D.dispose();   
document.close();

我是否需要执行其他操作才能将图形添加到文档中,或者我的语法是否不正确?


我不是 IText 专家,但上周我尝试用它画一些圆圈。这是我在测试过程中注意到的:

如果您绘制图形,则必须(或者说当我尝试时我必须这样做)将图形命令“包装”在以以下开头的部分中saveState()并以restoreState(),以及我需要调用fillStroke()-- 如果我不调用fillStroke()然后什么也没画。

Example

private void circle(float x, float y, PdfWriter writer) {
    PdfContentByte canvas = writer.getDirectContent();

    canvas.saveState();
    canvas.setColorStroke(GrayColor.BLACK);
    canvas.setColorFill(GrayColor.BLACK);
    canvas.circle(x, y, 2);
    canvas.fillStroke();

    canvas.restoreState();
}

@Test
public void testPossition() throws DocumentException, IOException {
    OutputStream outputStream = FileUtil.openOutputStream("testPosition.pdf");
    //this is my personal file util, but it does not anything more
    //then creating a file and opening the file stream.

    Document document = new Document(PageSize.A4, 50, 50, 50, 50);
    PdfWriter writer = PdfWriter.getInstance(document, outputStream);
    document.open();

    markPosition(100, 100, writer);
    document.add(new Paragraph("Total: 595 x 842 -- 72pt (1 inch)"));

    document.close();
    outputStream.flush();
    outputStream.close();
}

private void markPosition(float x, float y, PdfWriter writer)
        throws DocumentException, IOException {
    placeChunck("x: " + x + " y: " + y, x, y, writer);
    circle(x, y, writer);
}

 private void placeChunck(String text, float x, float y, PdfWriter writer)
       throws DocumentException, IOException {
    PdfContentByte canvas = writer.getDirectContent();
    BaseFont font = BaseFont.createFont(BaseFont.HELVETICA,
                  BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    canvas.saveState();
    canvas.beginText();
    canvas.moveText(x, y);
    canvas.setFontAndSize(font, 9);
    canvas.showText(text);
    canvas.endText();
    canvas.restoreState();
}

But PdfContentByte(canvas) 有更多的功能,例如rectangle.

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

如何使用 iText 将图形绘制为 PDF? 的相关文章

  • 如何在log4j的配置文件中为文件附加器提供环境变量路径

    我有一个log4j xml配置文件 和一个RollingFileAppender我需要提供用于存储日志的文件路径 问题是我的代码将作为可运行的 jar 部署在 Unix 机器上 所以如果我传递这样的参数 value logs message
  • Java 读取大文本文件时出现 OutOfMemoryError

    我是 Java 新手 正在读取非常大的文件 需要一些帮助来理解问题并解决它 我们有一些遗留代码 必须对其进行优化才能正常运行 文件大小仅在 10mb 到 10gb 之间变化 只有当文件开始大小超过 800mb 时才会出现启动问题 Input
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • JTextField 和 JTextArea

    JTextField 和 JTextArea 有什么不同 是否可以在一个班级中使用这两个班级 总之 JTextField 是单行文本字段 而 JTextArea 可以跨越多行 文档中清楚地解释了这些差异 文本区 http docs orac
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 使用 JSch 分别为各个提示提供输入

    问题是 SSH 连接需要在常规登录后提供另一个用户 ID 和密码信息 我正在使用 JSch 连接到远程服务器 它接受以下形式的输入InputStream 和这个InputStream只能通过一次 由于会话是交互式的 这会导致问题 我尝试将输
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • 如何使用 Spring Boot 传输音频

    我想让用户能够播放声音 我的实现在 Firefox 上运行良好 在 Safari 上 不播放声音 我验证了音频控制可以在 Safari 中与其他网站一起使用 所以 我认为我必须更改控制器中的某些内容 控制器 RequestMapping v
  • LocalDate 减去 period 得到错误的结果

    LocalDate减去一个Period 如 28年1个月27天 得到错误的结果 但减去一个Period 只有天单位 如 10282 天 得到正确的结果 有什么需要注意的吗 public static void main String arg
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • Java8:流映射同一流中的两个属性

    我有课Model带有以下签名 class Model private String stringA private String stringB public Model String stringA String stringB this
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • java.lang.ClassCastException:com.sun.proxy.$Proxy8 无法转换为 org.openqa.selenium.internal.WrapsDriver

    我有以下切入点和 AspectJ 中给出的建议 Pointcut call org openqa selenium WebElement sendKeys public void onWebElementAction After onWeb
  • @Embeddable 中的 @GenerateValue

    我已将实体的 id 分离到一个单独的 Embeddable 类中 该实体如下 Entity Table name users public class Users EmbeddedId private Users pk id private
  • Android Google 地图无法在当前主题中找到样式“mapViewStyle”

    添加谷歌地图视图时 我扩展了MapView 使用xml编辑器将其添加到活动中 并将我的谷歌地图api密钥手动添加到布局xml文件中 我的权限在清单文件中允许互联网 我想知道的是 在 xml 编辑器中 我收到错误 无法在当前主题中找到样式 m
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • Facebook API 和 Spring Social -- 如何发布朋友墙

    我有一个 Facebook 应用程序设置为需要扩展权限 publish stream 设置 gt gt 权限 gt gt 扩展权限 publish stream 我还有一个名为 scope 的隐藏输入字段 其值包括 publish stre
  • 更好地理解 Javascript OOP 架构 [重复]

    这个问题在这里已经有答案了 当我阅读 Angularjs 的 UI 插件的一些示例时 我偶然发现了一些代码 这些代码表明我对 Javascript 的了解还有待提高 以下是 Angular 提供程序内部的一个类 function Dialo
  • nvarchar(MAX) 最多可容纳多少个字符?

    我对这个概念很陌生nvarchar MAX 它可以容纳多少个字符 最大限度 容量为 2 GB 空间 因此您看到的 2 字节字符刚好可以容纳在一个NVARCHAR MAX field 使用其他答案的更详细的数字 您应该能够存储 2 31 1
  • 为什么 1>>32 == 1?

    我想知道这是否是一个 JVM 错误 java版本 1 6 0 0 OpenJDK 运行时环境 IcedTea6 1 4 1 6b14 1 4 1 0ubuntu13 OpenJDK 64 位服务器 VM 内部版本 14 0 b08 混合模式
  • 解码 Azure 移动服务 JWT 令牌时出现 JwtSecurityToken 异常

    以下代码 using System IdentityModel Tokens JwtSecurityToken jwtSecurityToken new JwtSecurityToken rawToken 生成以下异常 Jwt10113 U
  • 如何按升序对包含星期几名称的字符串进行排序

    我有一个包含星期几名称 开始时间和结束时间的字符串列表 List
  • 为什么 Ping 超时无法正常工作?

    我有 5 台电脑 我想 ping 这台电脑是否可用 所以我使用 C Ping 类 两台电脑可用 但当我对它们执行 ping 操作时 另外 3 台电脑已关闭 我的程序等待至少 7 秒才能响应 我只想检查 1000 毫秒并返回 OK 或 ERR
  • 如何从 Kotlin 资源中读取文本文件?

    我想用 Kotlin 编写 Spek 测试 如何从 HTML 文件中读取src test resources folder class MySpec Spek describe blah blah given blah blah var f
  • 如何确定 swf 是独立播放还是在其他 swf 中加载?

    我有两个 swf 一种某种 节目 以及一个充当 节目 加载程序的 菜单 show swf 可以以其自身的方式运行 或者通过 菜单 加载 有没有办法确定 显示 是独立运行还是加载到 菜单 中 一种解决方案是提供 菜单 Loader对象在加载的
  • 在 Dart 中将子类分配给工厂构造函数

    The KeyFlutter 中的类有一个factory构造函数更像是一个变量 abstract class Key const factory Key String value ValueKey
  • 有没有办法在 SQL Server 中获取自定义格式的日期?

    在 Oracle 中 您可以使用 SELECT to char sysdate yyyy mm FROM dual 仅显示日期的年份和月份部分 此外 您还可以设置NLS DATE FORMAT更改默认返回日期的方式 我知道在 SQL Ser
  • 打开图元标签

    我使用 Facebook 应用程序 shortstack 来制作我的页面 当我使用短 URL 共享出版物时 我想对其进行个性化 我已经测试创建开放图元标记 但它不起作用 您需要在页面中添加 opengraph 元标记 例如
  • android 支持 v14 PreferenceFragment 崩溃

    我正在尝试使用 PreferenceFragment 在 Android 应用程序中显示设置android support v14 preference图书馆 但是 当我尝试打开首选项时 应用程序崩溃并出现奇怪的 NullPointerEx
  • 扩展 UserCreationForm 以包含电子邮件、名字和姓氏

    我已经被困在这个问题上有一段时间了 似乎无法弄清楚发生了什么 我刚刚开始学习 Django 我设置了登录 现在想要实现一个注册页面 我首先使用 UserCreationForm 表单 效果很好 但我想添加电子邮件 名字和姓氏字段 我想我可以
  • 为什么在 C++/Java 和类似语言中以美元符号开头的变量名不好?

    为什么在 C Java 和 PHP 中的类似变量名中以美元符号开头是不好的 编辑 有什么风险吗 在Java中 使用 in 变量是合法的 但绝对是一个坏主意 如果这样做 则存在意外使用与编译器本身或某些代码生成器使用的名称冲突的名称的风险 结
  • Firebase 在大数据集上的性能

    我正在为一个项目测试 firebase 该项目可能有相当多的密钥 可能有数百万个 我已经测试过使用节点加载几万条记录 加载性能看起来不错 然而 如果我展开根节点 FORGE Web UI 会变得极其缓慢 并且会渲染每条记录 Firebase
  • 将属性注册为 DependencyProperty

    我有一个名为 ChartView 的用户控件 我有一个 ObservableCollection 类型的属性 我已经在 ChartView 中实现了 INotifyPropertyChanged ChartEntry 的代码是 public
  • 获取 popover 的 data-content 内 HTML 标签的元素

    我正在 Bootstrap3 的 popover 中工作 我在这里放置了如下 HTML 内容 a href class btn title Test Click Here a 我无法引用 data content 属性中存在的 html 元
  • boost binary_oarchive 对于不同的编译器的工作方式不同

    我需要在客户端和服务器之间传输数据 当我将服务器从 Windows msvc140 移动到 Debian gcc 64 位 时 我的字节流类出现了问题boost 他们的档案是不同的 include
  • 如何使用 iText 将图形绘制为 PDF?

    我正在尝试完成一个绘制图形并将其写入 PDF 的示例 但我不断收到 PDF 没有页面的错误 如果我在打开后使用 document add 添加一些简单的东西 它工作正常 我只是永远看不到图形 这是我的代码 Document document