如何使用 iText5 for .NET 库替换 PDF 文件中的 #name# 之类的字符串,我对其进行了探索,但找不到任何解决方案。
问问题
2755 次
2 回答
5
不幸的是,没有简单的方法可以做到这一点,因为 PDF 不使用标记语言。在 adobe acrobat 等 PDF 阅读器中,文本选择的工作方式本质上是通过光学字符识别,其中字符接近度决定了单词边界。
您可以想象一个存储字符定义(例如“a”)的 PDF 文档,其中包含样式和坐标。因此没有字符串的实际表示。
Itextsharp 和类似的库使用构建器模式,给人一种使用标记语言的印象。
尽管我无法为您提供解决方案,但我希望您可以更好地理解潜在的问题。
于 2012-12-16T18:23:00.160 回答
1
如果您确实需要实现您所描述的内容,尽管评论和答案中有所有评论,您可以考虑这样做:
- 使用解析器包中的类与自定义 RenderListener 实现相结合,在页面内容中查找占位符,该实现返回搜索到的占位符文本的位置和大小。
- 使用 PdfStamper 在占位符上绘制一个白色矩形。
- 使用相同的 PdfStamper 在矩形上打印您的替换。
此过程有一些缺点:
- 占位符仍然存在于 pdf 中,只是被覆盖了。因此,它可以通过文本提取例程找到,例如从查看器中复制和粘贴。
- 没有回流。因此,如果在占位符之后有文本,您必须确保您的替换字符串不会太长,如果它更短,您会看到一个间隙。
如果不能接受这些缺点,您必须直接研究内容流操作,这对于通用文档来说非常困难且充满陷阱。
于 2012-12-17T10:24:24.997 回答