テキスト抽出

テキスト抽出

テキスト抽出

Aspose.PDF FOSS for .NET は PDF ページからテキストを抽出するためのいくつかのメカニズムを提供します。TextFragmentAbsorber は主要なツールで、ページ内容をスキャンし、位置、フォント、スタイル情報を含む構造化された TextFragment オブジェクトを返します。


基本的なテキスト抽出

TextAbsorber はページまたはドキュメントからすべてのテキストを単一の文字列として抽出します。

using var doc = Document.Open(pdfBytes);

var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);

string pageText = absorber.Text;

テキストフラグメントの抽出

TextFragmentAbsorber は構造化された結果を提供します。各 TextFragment には抽出されたテキスト、そのページ上の位置、フォントの詳細が含まれます。

using var doc = Document.Open(pdfBytes);

var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Position: ({fragment.Position.XIndent}, {fragment.Position.YIndent})");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}");
}

正規表現による検索

TextFragmentAbsorberに正規表現パターンを渡して特定のテキストを検索します。

var absorber = new TextFragmentAbsorber(@"\d{3}-\d{2}-\d{4}");
doc.Pages.Accept(absorber);  // Search all pages

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found: {fragment.Text}");
}

テキスト セグメント

テキストが異なるフォントランにまたがる場合、各TextFragmentは複数のTextSegmentオブジェクトを含むことがあります。

foreach (var fragment in absorber.TextFragments)
{
    foreach (var segment in fragment.Segments)
    {
        Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
    }
}

フォント管理

FontRepository はフォントを検索し、ロードするためのメソッドを提供します。

var font = FontRepository.FindFont("Helvetica");

テキスト段落の作成

TextParagraph は、ページへの挿入用に複数行のテキストブロックを構築することを可能にします。

var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));

ヒントとベストプラクティス

  • 位置とフォントデータが必要な場合は TextFragmentAbsorber を使用し、プレーンテキスト抽出には TextAbsorber を使用します。
  • より高速な結果を得るために、単一ページで absorber を受け入れるか、文書全体を検索する場合は doc.Pages を使用します。
  • 正規表現検索はデフォルトで大文字小文字を区別します — 大文字小文字を区別しないマッチングには (?i) プレフィックスを使用してください。
  • フォントが PDF に埋め込まれているかどうかを判断するには TextState.Font.IsEmbedded を確認してください。
  • 大きな文書の場合、メモリ使用量を管理するためにページを1つずつ処理してください。

一般的な問題

IssueCauseFix
抽出されたテキストが文字化けしていますPDF が非標準のエンコーディングまたは CID フォントマッピングを使用していますフォントの埋め込みを確認してください。スキャンされた PDF の一部は OCR が必要です
テキストフラグメントが見つかりませんページの内容が画像であり、テキストではありませんOCR ツールを使用して画像ページをテキストに変換してください
Regex が一致しませんパターンが PDF テキストレイアウトによって挿入される空白を考慮していません空白を正規化するか、より緩いパターンを使用してください
TextState.Font が null ですPDF からフォントリソースが欠落していますフォントプロパティを検査する際に null チェックを行ってください

よくある質問

ページの特定の領域からテキストを抽出できますか?

はい。TextFragmentAbsorber.TextSearchOptions.Rectangle を設定して、検索をページの特定領域に限定します。

テキスト抽出は読み順を保持しますか?

ライブラリはテキストをコンテンツストリームの順序で返します。マルチカラムレイアウトの場合、フラグメントを位置でソートする必要があるかもしれません。

すべてのページから一度にテキストを抽出できますか?

はい。doc.Pages.Accept(absorber) を呼び出して、ドキュメント内のすべてのページを検索します。


API リファレンス概要

Class / MethodDescription
TextAbsorberすべてのテキストを単一の文字列として抽出します
TextFragmentAbsorber位置と Font データを含む構造化テキストフラグメントを抽出します
TextFragment位置、テキスト状態、セグメントを持つテキストラン
TextFragment.Text抽出されたテキスト文字列
TextFragment.Positionページ上の座標
TextFragment.TextStateFont、size、color の情報
TextFragment.Segmentsフラグメント内のサブラン
TextParagraph複数行テキストブロック用ビルダー
TextStateFont 名、size、color、style プロパティ
FontRepository静的 Font ルックアップとロード
FontRepository.FindFont名前で Font を検索

参照

 日本語