【问题标题】:How can I replace text in PDF with muliply lines?如何用多行替换 PDF 中的文本?
【发布时间】:2020-05-06 17:45:47
【问题描述】:

我正在使用 openPdf 库(iTextPdf 的分支)将 #{Address_name_1} 等占位符替换为实际值。我的PDF文件不简单,所以我用正则表达式找到这个占位符:[{].*?[A].*?[d].*?[d].*?[r].*?[e].*?[s].*?[s].*?[L].*?[i].*?[n].*?[e].*?[1].*?[}]

然后做类似的事情

content = MY_REGEXP.replace(content, "Saint-P, Nevskiy pr."); obj.setData(content.toByteArray(CHARSET))

当我的替换线太长并且不幸地从右端切断时,就会出现问题。我能以某种方式让它延续到下一行吗?天真的\n 不起作用。

【问题讨论】:

  • 现有答案已经告诉您,您需要事先拆分替换并为您的用例提供足够的占位符。此外,请注意,像您一样操作内容流仅适用于非常特殊的文档(匹配编码、包含所有必需字形的子集字体、直观的文本绘图……)。该解决方案不是面向未来的。
  • @mkl 解决方案不是最好的(它非常有限)但我认为只要模板是在受控环境(由开发人员)上生成的,它的未来就不会出现问题......其他案例是用户在没有任何特别注意的情况下生成模板的案例。在这种情况下,就会出现问题。
  • @mkl 有没有更好的方法来替换 .pdf 文件中的某些内容?我从itextpdf.com/en/resources/examples/itext-7/… 得到的这个解决方案
  • “这个解决方案我取自...” - 我希望你还阅读了编写该示例的stack overflow answer(在示例代码 cmets 中链接) ,特别是它仅适用于相对简单的 PDF,但 在现实生活中,PDF 从来没有那么简单,并且随着您在文件。
  • “有没有更好的方法来替换 .pdf 文件中的一些内容” - 简单地使用 pdf AcroForm 表单域怎么样?表单字段需要填写,不仅可以手动填写,还可以通过编程方式填写,填写后您可以展平表单。

标签: java pdf itext openpdf


【解决方案1】:

PDF 文件不是文本文件。每条线都是一个带有 x/y 偏移的对象。要在下一行放置一些东西,需要在新的 x/y 坐标处放置一个新对象。您需要一个高级 PDF 编辑工具包。

【讨论】:

    【解决方案2】:

    PDF 以不同的方式存储字符串。没有下一行,有行。

    因此,您需要在模板上的字段上添加几个占位符,以便替换足够长的时间,例如:

    #{Address_name_1_line1}
    #{Address_name_1_line2}
    #{Address_name_1_line3}
    

    并将其放在模板上的不同行中。未使用的空占位符(因为替换时间不够长)应替换为空字符串。

    对于更长的替换,您将需要使用多个占位符。要使用的占位符的数量和替换拆分应由代码确定。

    如果您的 PDF 太复杂而无法放置不同的占位符,那么您将需要占位符所有内容,您的所有文本内容都应插入占位符,至少如果您想使用这种方法。

    【讨论】:

      猜你喜欢
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      相关资源
      最近更新 更多