从矩形中提取文本时的 ItextSharp anagram 输出

Posted

技术标签:

【中文标题】从矩形中提取文本时的 ItextSharp anagram 输出【英文标题】:ItextSharp anagram output when extract text from rectangle 【发布时间】:2016-01-12 10:41:53 【问题描述】:

我正在尝试使用 ItextSharp 从矩形中提取文本,除了某些特定区域外,它几乎适用于文档中的所有部分。这些区域是简单的粗体大写标题和简单的内容,其字体比文档的其余部分略小(均为大写)。在这些区域中,我得到了所选文本的字谜,而不是正确的单词。

例如单词“RELEASE”被骑为“ERLEASE”,“VOYAGE”变成“EGAYVO”,句子“FURTHER CHARGES”变成“FHTRU E R CHAGR E S”

奇怪的是,如果我尝试使用 SimpleTextExtractionStrategy 浏览整页,我会获得正确的文本。

pdf 的字体是经典的 Arial,我用于提取的策略取自 ***(rect 它由 args 传递):

    _pdfRd = New PdfReader(_pdfPath)
    Dim output As String()
    Dim nrPag as Integer = 1
    Dim filter As RenderFilter = New RegionTextRenderFilter(rect)
    Dim strategy As FilteredRenderListener
    Dim locStrategy As New LocationTextExtractionStrategy
    strategy = New FilteredTextRenderListener(locStrategy, filter)
    output = GetTextFromPage(_pdfRd, nrPag, strategy).Split(vbLf)
    _pdfRd.Close()

我尝试使用其他文档,效果很好,我无法使用不同的文档重现此问题。

我很担心我的代码,我也尝试过这个策略:http://www.schiffhauer.com/read-text-in-a-pdf-in-c-with-itextsharp/ 但结果是一样的。

我在阅读过程中遗漏了一些东西,或者这是与我的 pdf 相关的问题?

更新:如果我选择错误单词的单个字母,则输出为空字符串,如果我同时选择更多字母也会发生这种情况,只有当我选择整个单词时才会获得(字谜)输出。 这真的很奇怪,例如我注意到如果我有“CARGO RELEASE”这个词,并且我只选择一个矩形“GO”或任何其他子字符串我什么都得不到,但是如果我选择“CARGO”我会得到“GRACO ERLESAE”和我没有选择第二个单词,只选择了第一个。

【问题讨论】:

我的第一个猜测是文本不是 100% 在相同的高度上,默认的LocationTextExtractionStrategy 有点容易受到攻击。因此,一些放置在较高位置的文本将出现在输出的开头。你能把你的输入文件上传到某个地方吗? 很抱歉,我无法上传 pdf,也许我可以在没有合理数据的情况下上传它的屏幕截图。告诉我它是否有帮助 您的 PDF 很可能有问题。不一定有问题,但默认实现会中断。由于无法共享文档,我只能建议您将LocationTextExtractionStrategy的源代码复制粘贴到您的项目中,使用该本地策略对象,并修改代码(例如将DUMP_STATE设置为true),这样您就可以获得更多信息。 很抱歉,我无法上传 pdf - 您正在处理的问题似乎与您的 PDF 相关,甚至仅针对其中的特定部分。因此,如果不提供示例文档来重现该问题,您就不能认真地期待帮助。话虽如此,如果@blagae 假设问题是关于文本不是 100% 在同一高度上确实是您的问题,那么来自this answer 的HorizontalTextExtractionStrategy 可能会有所帮助。 【参考方案1】:

您是否尝试过自定义工作 SimpleTextExtractionStrategy,而不是整页而是矩形?

你可以在这里找到 ghitub 项目的完整代码:https://github.com/itext/itextsharp/blob/75f05dd7d87797b86c44649f5f96df2d90d730e8/src/extras/itextsharp.tests/iTextSharp/text/pdf/parser/SimpleTextExtractionStrategyTest.cs

【讨论】:

以上是关于从矩形中提取文本时的 ItextSharp anagram 输出的主要内容,如果未能解决你的问题,请参考以下文章

使用itextsharp从pdf中提取文本返回空字符串

ITextSharp:提取没有小空格的文本

如何使用 iTextSharp 4.1.6 提取文本?

iTextSharp PDF 使用 C# 读取突出显示的文本(突出显示注释)

从在线pdf文件中提取文本(sharepoint)

iTextSharp 在 pdf 文件中的单词中插入空格