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

标签 java pdf itext

我想用 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();

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

关于java - iText - 将内容添加到现有的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3335126/

相关文章:

objective-c - 如何在 objective-c 中标记 pdf 文本?

iOS pdf在特定坐标处缩放

java - 无法设置参数使用itextpdf生成的PDF

java - 打印解决方案

java - Windows 支持 Java 6 中的 native GSS-API

java - JDBC 未检测到存储过程异常

python - 使用 pyPdf 合并非标准 PDF

java - Java 中 <<= 或 >>= 是什么意思?

java - servlet 发生 mySql 列未找到错误

java - 为什么Java在转换为PDF时会删除段落之间的空白?