如何从PDF中提取文本并解码字符?

时间:2012-12-20 16:15:58

标签: c# pdf itextsharp

我正在使用itextsharp使用以下代码从pdf文档中提取文本:

public static bool does_document_text_have_keyword(string keyword, 
                       string pdf_src, Report report_object)  // TEST
{
    try
    {
        PdfReader pdfReader = new PdfReader(pdf_src);
        string currentText;
        int count = pdfReader.NumberOfPages;
        for (int page = 1; page <= count; page++)
        {
           ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
           currentText = PdfTextExtractor.GetTextFromPage
                           (pdfReader, page, strategy);
           currentText = Encoding.UTF8.GetString
                           (ASCIIEncoding.Convert
                             (Encoding.Default,                                 
                              Encoding.UTF8, 
                              Encoding.Default.GetBytes(currentText)));

           report_object.log(currentText);  // TEST

           if (currentText.IndexOf
                (keyword, StringComparison.OrdinalIgnoreCase) != -1) return true;
        }
        pdfReader.Close();
        return false;
    }
    catch
    {
        return false;
    }
}

但问题是,当我提取文本时,文本没有空格,就像白色空格已被空字符串替换一样。然而在pdf文档中,其中有空格。有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:2)

我相信你的问题是SimpleTextExtractionStrategy。来自http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/SimpleTextExtractionStrategy.html

的API文档
  

如果PDF以非自上而下的方式呈现文本,这将导致文本不能真实地表示它在PDF中的显示方式。此渲染器还使用基于字体度量的简单策略来确定是否应将空白空间插入到输出中。

尝试使用LocationTextExtractionStrategy。它的文档说明:

  

文本提取渲染器,用于跟踪页面上文本的相对位置结果文本与大多数PDF文件在屏幕上的物理布局相对一致。