我发现许多网站和帖子的问题与我的相同,但它们似乎都有一个共同点,即人们都在用如何在特定位置插入新文本的示例来回答它们。我有一个 PDF 文档,它是由另一个我无法控制的程序生成的,它有一行供客户签名,但该行不在绝对位置,因此我们使用的名为 AssureSign 的服务无法正常工作,因为你必须知道签名行的位置在哪里。所以我需要创建一个新程序来查找签名行的位置并将该信息发送到assuresign系统。
这真的应该很简单,但由于某种原因我没有得到它
我发现许多网站和帖子的问题与我的相同,但它们似乎都有一个共同点,即人们都在用如何在特定位置插入新文本的示例来回答它们。我有一个 PDF 文档,它是由另一个我无法控制的程序生成的,它有一行供客户签名,但该行不在绝对位置,因此我们使用的名为 AssureSign 的服务无法正常工作,因为你必须知道签名行的位置在哪里。所以我需要创建一个新程序来查找签名行的位置并将该信息发送到assuresign系统。
这真的应该很简单,但由于某种原因我没有得到它
您可以使用 iText (Sharp) 的解析器包来查找给定文本的位置。但是,您必须实现自己的 RenderListener,因为该包的主要用例是文本提取,而不是文本定位。
这并不像您想象的那么容易,例如单词的各个字符可能以任何顺序单独出现。
PS:
但是,首先您必须找出签名行是否由字符组成(正如您的问题似乎暗示的那样),或者它是否是绘制的路径。此外,您必须确定该行在文档中是否唯一。
在前一种情况下,您需要的 RenderListener 实现必须检查在其 RenderText 方法中转发以进行处理的 TextRenderInfo 对象。如果其文本内容包含构建signatrue 行的那些唯一字符,则必须存储此TextRenderInfo 的位置数据。如果行字符不是唯一的,您将必须找到一些使它们唯一的附加标准,例如某些前面的字符串或可能是文档中这些字符最后一次出现的事实。
在后一种情况下,解析器包功能必须有所扩展,因为它目前不报告路径。根据 iText 邮件列表,类似的扩展在 ToDo 列表中。
JCIS 发布了一个很棒的应用程序,它向您展示了查找特定文本的艰巨任务,尽管使用的是 VB。它不会像将其插入 vb > c# 转换器那么简单,但它应该是可翻译的。您可能认为这似乎是一项容易完成的任务,但 PDF 不是一种文档格式,它在技术上是一种显示格式。这两者之间的区别是使这个过程如此漫长的原因。
首先,如果只是单词是英语,您可以轻松找到 parse,但是当您的文档不是英语时,您应该完全理解您的语言字体UNICODE。