【发布时间】: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 表单域怎么样?表单字段需要填写,不仅可以手动填写,还可以通过编程方式填写,填写后您可以展平表单。