2

我正在使用 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文档中,里面有空格。有谁知道这里发生了什么?

4

1 回答 1

2

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

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

尝试使用 LocationTextExtractionStrategy。它的文档指出:

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

于 2012-12-20T16:35:13.560 回答