Itextsharp文本提取

Pak*_*khu 18 c# itextsharp

我在vb.net上使用itextsharp从pdf文件中获取文本内容.该解决方案适用于某些文件,但不适用于其他甚至非常简单的文件.问题是令牌字符串值设置为null(一组空方框)

token = New iTextSharp.text.pdf.PRTokeniser(pageBytes)
    While token.NextToken()
        tknType = token.TokenType()
        tknValue = token.StringValue
Run Code Online (Sandbox Code Playgroud)

我可以确保内容的长度,但我无法获得实际的字符串内容.

我意识到这取决于pdf的字体.如果我使用Acrobat或带有Courier的PdfCreator创建一个pdf(顺便说一句,这是我的visual studio编辑器中的默认字体),我可以获得所有文本内容.如果使用不同的字体构建相同的pdf,我得到空的方框.

现在的问题是,无论字体设置如何,我如何提取文本?

谢谢

Ima*_*idi 44

Mark的答案补充了我很多帮助.iTextSharp实现命名空间和类与java版本有点不同

 public static string GetTextFromAllPages(String pdfPath)
    {
        PdfReader reader = new PdfReader(pdfPath); 

        StringWriter output = new StringWriter();  

        for (int i = 1; i <= reader.NumberOfPages; i++) 
            output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));

        return output.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

  • +1用于提供完整的代码示例,而不是一行 (2认同)

Mar*_*rer 14

查看PdfTextExtractor.

String pageText = 
  PdfTextExtractor.getTextFromPage(myReader, pageNum);
Run Code Online (Sandbox Code Playgroud)

要么

String pageText = 
  PdfTextExtractor.getTextFromPage(myReader, pageNum, new LocationTextExtractionStrategy());
Run Code Online (Sandbox Code Playgroud)

两者都需要相当新版本的iText [夏普].实际上,自己解析内容流只是重新发明轮子.免除一些痛苦,让iText为您做好准备.

PdfTextExtractor将为您处理所有不同的字体/编码问题...所有可以处理的问题.如果您无法准确地从Reader复制/粘贴,则PDF中没有足够的信息来从内容流中获取字符信息.