使用iText for .NET替换PDF文件中的字符串

时间:2012-12-16 17:31:59

标签: c# vb.net pdf itext

如何使用iText5 for .NET库替换PDF文件中#name#之类的字符串,我对它进行了探索,但我找不到任何解决方案。

2 个答案:

答案 0 :(得分:5)

不幸的是,没有简单的方法可以做到这一点,因为PDF不使用标记语言。文本选择在adobe acrobat等PDF阅读器中的工作方式主要是通过光学字符识别,字符接近决定了字边界。

您可以想到存储字符定义的PDF文档(例如'a'),由样式和坐标组成。因此,没有字符串的实际表示。

Itextsharp和类似的库使用构建器模式,给人一种使用标记语言的印象。

虽然我无法为您提供解决方案,但我希望您可以更好地了解潜在的问题。

答案 1 :(得分:1)

如果你真的需要实现你所描述的内容,尽管评论和答案中有所有评论,你可能会考虑这样做:

  1. 使用解析器包中的类与自定义RenderListener实现一起查找页面内容中的占位符,该实现返回搜索到的占位符文本的位置和大小。
  2. 使用PdfStamper在占位符上绘制白色矩形。
  3. 使用相同的PdfStamper在矩形上打印替换件。
  4. 这个程序有一些缺点:

    • 占位符仍然存在于pdf中,它只是被覆盖。因此,它可以通过文本提取例程找到,例如,从观看者复制和粘贴。
    • 什么都没有回流。因此,如果占位符后面紧跟着文本,则必须确保替换字符串不会太长,如果它更短,则会看到间隙。

    如果无法接受这些缺点,您必须直接进入内容流操作,这对于通用文档来说非常困难且充满了陷阱。