iText - 将内容添加到现有 PDF 文件

2023-12-09

我想用 iText 执行以下操作:

(1) 解析现有的PDF文件

(2) 在文档的现有单页上添加一些数据(例如时间戳)

(3) 写出文件

我似乎不知道如何使用 iText 来做到这一点。在伪代码中我会这样做:

Document document = reader.read(input);
document.add(new Paragraph("my timestamp"));
writer.write(document, output);

但由于某种原因,iText 的 API 非常复杂,我无法理解它。 PdfReader 实际上保存了文档模型或其他东西(而不是吐出文档),并且您需要一个 PdfWriter 来从中读取页面......嗯?


iText 有不止一种方法可以做到这一点。这PdfStamper班级是一种选择。但我发现最简单的方法是创建一个新的 PDF 文档,然后将现有文档中的各个页面导入到新的 PDF 中。

// Create output PDF
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();

// Load existing PDF
PdfReader reader = new PdfReader(templateInputStream);
PdfImportedPage page = writer.getImportedPage(reader, 1); 

// Copy first page of existing PDF into output PDF
document.newPage();
cb.addTemplate(page, 0, 0);

// Add your new data / text here
// for example...
document.add(new Paragraph("my timestamp")); 

document.close();

这将从 PDF 中读取templateInputStream并将其写出outputStream。这些可能是文件流或内存流或任何适合您的应用程序的内容。

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

iText - 将内容添加到现有 PDF 文件 的相关文章

  • 如何使用 Java Swing 创建图像映射?

    我需要使用 Swing 制作一个显示背景图像的图像地图 然后当鼠标悬停在 或单击 特定热点上时 我需要弹出一个 放大 图像并显示它 我正在考虑扩展 JPanel 以包含图像引用并通过 PaintComponent g 方法绘制该图像 到目前
  • n 个素数之和 java,困惑

    我读过几篇关于这方面的文章 我什至在一次考试中这样做过 但是是在 vb net 中 它工作得很好 但是当我尝试执行我的程序时 Eclipse 只是不停地运行 否则它会给我错误的答案 这是我的第四次尝试 我需要将前 n 个素数相加 因此我检查
  • Java:如何将所有 java 日期分组到相应的周中?

    Problem 我有一个很大的日期清单 我需要按周安排它们 问题 如何按以下方式对日期进行分组一年中的一周他们在吗 示例数据集 Date date new SimpleDateFormat parse 04 01 2015 Date dat
  • GSON:如何从 Json 中获取不区分大小写的元素?

    下面显示的代码在以下情况下效果很好JSON对象包含jsonKey因为它被传递给该方法 我想知道 是否有一种方法可以获取分配给不区分大小写的键表示的值 Example public String getOutputEventDescripti
  • 读取时 R 中的内存错误.xlsx

    我正在使用以下 R 代码 也利用 Java 参数来增加内存 library xlsx options java parameters Xmx1g library XLConnect NiVe lt read xlsx version1 xl
  • 如何在 Spring Data MongoDB 中仅返回查询的特定字段?

    我们如何在 Spring Data Mongo 中选择特定字段 我尝试了以下操作 但我得到了强制转换异常Foo to String Using Query Query value path 0 fields path 0 String fi
  • 如何将背景图像设置到 JPanel 中的 JTextArea

    我想在JTextArea 我在谷歌上查找过 但没有结果 背景可能是一个标志 我也想知道如何设置背景的分辨率 我的包中只有一门课 我有一个 MySQL 连接器驱动程序作为参考库 我的工作台是 Eclipse 使用 Fat jar 插件导出 j
  • 在准备好的语句中使用“like”通配符

    我正在使用准备好的语句来执行 mysql 数据库查询 我想实现基于某种关键字的搜索功能 为此我需要使用LIKE关键字 我知道的就这么多 我以前也使用过准备好的语句 但我不知道如何使用它LIKE因为从下面的代码中我将在哪里添加 keyword
  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • 原子/易失性/同步之间有什么区别?

    原子 易失性 同步内部如何工作 下面的代码块有什么区别 Code 1 private int counter public int getNextUniqueIndex return counter Code 2 private Atomi
  • 信用卡号应该存储为字符串还是整数?

    是啊 只是想想而已 我应该将在我的网站上输入的信用卡号存储为字符串还是整数 我的意思是 它们由数字组成 这让我认为它是一个整数 但我不对它们进行数学运算 所以也许字符串更合适 编辑 所以我必须在加密之前存储在某个时刻输入的数字 我可能应该更
  • Java错误:线程“main”中出现异常java.lang.ArrayIndexOutOfBoundsException

    我是 Java 初学者 正在学习该课程算法 由普林斯顿大学提供 我按照书上的例子 二分查找在第 9 页 import edu princeton cs algs4 import java util Arrays public class B
  • MyBatis 遵循 JPA 吗?

    作为我的第一个 ORM 我已经使用 myBatis 几个月了 现在我正在尝试学习其他东西 例如 Hibernate JPA 起初很难理解 Hibernate 和 JPA 之间的区别 经过几分钟的研究 我明白 JPA 只是一个规范 Hiber
  • java.util.Currency.getInstance 抛出 IllegalArgumentException

    我只是想尝试一下java util Currency 但对于少数货币代码来说它让我困惑java lang IllegalArgumentException 这是我的简单代码 java util Currency c java util Cu
  • 是否有更现代的面向对象版本的“让我们构建一个编译器”? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有更现代的 也许是面向对象的 相当于 Jack Crenshaw 的 让我们构建一个编译器 http
  • org.openqa.selenium.remote.service.DriverService$Builder.createArgs()Lcom/google/common/collect/ImmutableList;使用 Selenium 3.5.3

    我正在使用 IntelliJ 编写 Selenium Junit 测试 如果我直接从测试触发 测试运行正常 但是 如果我使用 JunitCore 触发 TestRunnerSuite 的测试 我遇到了以下奇怪的错误 在谷歌研究后我没有找到解
  • Log4j 不打印完整的堆栈跟踪

    我检查了 SO 中的所有答案 但没有一个真正帮助我 我的 Log4j 属性文件 log4j rootLogger debug console file log4j appender console org apache log4j Cons
  • 使用 Appengine 进行多线程处理

    既然Appengine不允许java多线程 那么我们如何将现有的多线程代码迁移到该平台呢 例如我有以下代码 Thread t new Thread public boolean alive true public void run whil
  • 可选的比较器

    I have abstract class OptionalComparator
  • 如何更改 Java 中不同类的变量?

    如何更改 Java 中不同类的变量 我正在尝试更改另一个类中的变量 然后在第一个类中使用它 我在 First 类中创建了一个变量 并将其值设置为 1 然后我尝试在 Second 类中将同一变量的值更改为 2 但是当我在 First 类中使用

随机推荐