【问题标题】:How to replace text in pdf using java如何使用java替换pdf中的文本
【发布时间】:2018-10-15 03:21:22
【问题描述】:

我想要实现的是替换 pdf 文件中的文本。我有以下代码:

PdfReader reader = new PdfReader("test.pdf");

PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);

if (object instanceof PRStream)
{
    PRStream stream = (PRStream) object;
    byte[] data = PdfReader.getStreamBytes(stream);
    System.out.println(new String(data));
    stream.setData(new String(data).replace("application", "HELLO WORLD").getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("test-output.pdf"));
stamper.close();
reader.close();

当我尝试打印出来查看 数据 (System.out.println(new String(data))),“应用程序" 显示为 "ap)-4(plica)-3(tion",这就是我未能替换文本、任何想法或其他方法的原因能达到我想要达到的目标吗?

【问题讨论】:

  • PDF 描述了页面的图形内容。它的意思是“最终形式”。根据生成的程序文本并不总是以易于访问的方式存储。例如,您在此处看到的是字距调整信息。您对此无能为力。
  • 这里关于堆栈溢出的文本替换主题已经有很多问题了。如果您搜索它们,您会在回复中看到您的问题说明了但可能存在的问题之一。
  • 您尝试过使用 Apache PDFBox 吗? (我用过一次,但只用于创建 PDF)

标签: java pdf replace itext


【解决方案1】:

您将无法使用 iText 执行此操作。

相信我,这是关于 PDF 最令人沮丧的发现之一:您可以使用 iText 构建它们,但您不能稍后再返回并用其他内容替换文本,就像您在示例中所做的那样。

你真的无能为力。文本一旦出现,就无法修改。


尽管如此,您通常可以添加新内容(文本、图像等)到现有 PDF。所以...如果您可以稍微改变宇宙并创建具有正确大小的空白空间的 PDF,您可以稍后返回并使用 PdfStamper 类在另一层图形内容上“标记”。

可以在iText documentation 和这个好问题中找到更多信息:

How to add Content to a PDF using iText PdfStamper

【讨论】:

  • “您将无法使用 iText 执行此操作。” - 不仅使用 itext。除了一些琐碎的案例之外,您在任何 pdf 库中都找不到令人满意的解决方案。
  • 有时,您可能还会遇到商务人士(有些是主管级别),他们会问,“您的意思是您不能修改 PDF?我们一直在为很长一段时间!” 然后您发现他们实际上一直在使用 Microsoft Word 文档,这些文档使用免费的 Adob​​e Reader 导出和打开。 * 叹息 *
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 2019-02-20
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多