ITextSharp - VB.NET - PdfTextExtractor - PDF 到 TXT - 缺少部分页面文本
Posted
技术标签:
【中文标题】ITextSharp - VB.NET - PdfTextExtractor - PDF 到 TXT - 缺少部分页面文本【英文标题】:ITextSharp - VB.NET - PdfTextExtractor - PDF to TXT - missing part of the page text 【发布时间】:2021-08-11 18:14:03 【问题描述】:我在使用 PdfTextExtractor GetTextFromPage 方法时遇到问题,其中部分文本丢失,无论我是否运行所有页面......我仍然找不到部分文本。我对所有 pdf 提取使用相同的代码剪辑器,以前从未遇到过问题.. 可能是 pdf 文件搞砸了?
我尝试过没有策略,使用 LocationTextExtractionStrategy 和 SimpleTextExtractionStrategy ...结果发生了一些变化,但仍然无法获取所有文本。
我正在测试这个公共文档,我需要从中读取一些数据,下载和获取所有文本的代码 sn-p 非常简单:
webc.DownloadFile("http://www.inmetro.gov.br/legislacao/pam/pdf/PAM007426.pdf", "C:\test\PORTARIA.pdf")
pdf = New PdfReader("C:\test\PORTARIA.PDF")
Dim strategy As ITextExtractionStrategy = New LocationTextExtractionStrategy
For i = 1 To pdf.NumberOfPages
TextBox3.AppendText(Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(PdfTextExtractor.GetTextFromPage(pdf, i, strategy)))) + vbNewLine + vbNewLine)
Next
我只对第一页感兴趣,我需要提取一些数据 .. 找不到像“fabricante”、“marca”、“PESO EXATO BALANÇAS”等词
有人知道为什么会这样吗???我很想看到实现这一目标的其他选择。不花钱买工具
【问题讨论】:
Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(...)))
是干什么用的?
请附上示例 PDF 以重现问题
@KJ 将 i=0 放入 pdf.numberpages 我得到一个空指针异常。我一直使用 1 .. 我无法获得与您相同的文本。这怎么可能哈哈...
@AlexeySubach 你得到了代码 sn-p 中的链接。
@mkl 我从很久以前尝试过的一个例子中得到了这条线。我现在只是为未来的项目创建一个测试功能。我将生成的纯文本放到一个文本框/字符串中,这样我就可以找到用于读取数据的模式..
【参考方案1】:
我只对第一页感兴趣,我需要提取一些数据.. 并且找不到像“fabricante”、“marca”、“PESO EXATO BALANÇAS”等词
我测试如下:
Dim pdfReader As New PdfReader("PAM007426.pdf")
Dim strategy As ITextExtractionStrategy = New LocationTextExtractionStrategy
Dim text = PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy)
Console.WriteLine("Position of 'fabricante': 0", text.IndexOf("fabricante"))
Console.WriteLine("Position of 'marca': 0", text.IndexOf("marca"))
Console.WriteLine("Position of 'PESO EXATO BALANÇAS': 0", text.IndexOf("PESO EXATO BALANÇAS"))
输出:
Position of 'fabricante': -1
Position of 'marca': 1061
Position of 'PESO EXATO BALANÇAS': 1067
如您所见,"marca"
和 "PESO EXATO BALANÇAS"
都会立即找到。
查看 PDF 很清楚为什么找不到 "fabricante"
:页面上没有那个字,只有 "FABRICANTE"
。测试
Console.WriteLine("Position of 'FABRICANTE': 0", text.IndexOf("FABRICANTE"))
返回
Position of 'FABRICANTE': 1303
这样,你漏掉的字都能找到。
因此,如果您在 TextBox3
中找不到它们,则说明存在其他问题。也许是转换狂欢Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(...)))
,也许文本框太满了,也许是别的。
【讨论】:
@KJ 对。在这里,我只是另外提供了 OP 可以用来识别问题的测试代码。 @fferrandini 顺便说一句,我使用了最新的 iText 5.x 版本。也许一些非常旧的版本在映射到 Unicode 时仍然存在一些问题。以上是关于ITextSharp - VB.NET - PdfTextExtractor - PDF 到 TXT - 缺少部分页面文本的主要内容,如果未能解决你的问题,请参考以下文章