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 に答える