【问题标题】:Replace a string in a PDF file using iText for .NET [closed]使用 iText for .NET 替换 PDF 文件中的字符串 [关闭]
【发布时间】:2012-12-16 17:31:58
【问题描述】:

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

【问题讨论】:

  • 您可以创建一个新的 pdf 模板,然后在给定的区域上绘制它。
  • 请注意,pdf 本身不是一种正确的重排格式。如果您很幸运并且实际上在内容流中找到了占位符字符串(这可能已经很困难,具体取决于 pdf 的创建方式),替换它可能会产生许多不希望的结果。如果替换的我们比占位符长,它可能会覆盖后面的字符或多余的字符可能会被推出可见区域。此外,如果该部分中使用的字体是子集,则可能不会显示所有字符。
  • 您的问题始于错误的假设。阅读本书章节的介绍以了解您设计中的缺陷(以及了解为什么您没有找到任何解决方案):manning.com/lowagie2/samplechapter6.pdf

标签: c# vb.net pdf itext


【解决方案1】:

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

您可以想象一个存储字符定义(例如“a”)的 PDF 文档,其中包含样式和坐标。因此没有字符串的实际表示。

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

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

【讨论】:

    【解决方案2】:

    如果您确实需要实现您所描述的内容,尽管在 cmets 和答案中有所有评论,您可以考虑这样做:

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

    这个过程有一些缺点:

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

    如果不能接受这些缺点,您就必须深入研究内容流操作,这对于通用文档来说非常困难且充满陷阱。

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2020-01-04
      • 1970-01-01
      • 2018-06-05
      相关资源
      最近更新 更多