0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.NETでC#を使用してPDFテキストを簡単に抽出する方法

Last updated at Posted at 2024-11-20

PDF形式は、その高いクロスプラットフォーム互換性とセキュリティの高さから広く利用されています。しかし、PDFドキュメントは編集が難しいため、内容を操作するためにテキストを抽出する必要がよくあります。PDFからテキストを抽出することで、PDFドキュメントの内容を再利用し、新しいPDFドキュメントを作成したり、他の形式のドキュメントに内容を挿入したりすることができます。.NETプラットフォームでは、シンプルなC#コードを使ってPDFテキストの抽出を簡単に実現できます。

この記事では、無料のFree Spire.PDF for .NETを使用します。NuGetコマンド:
PM> Install-Package FreeSpire.PDF

C#でPDFテキストを抽出する操作手順

ライブラリには、PDFドキュメントのテキスト抽出を処理するPdfTextExtractorクラスが用意されています。ページからPdfTextExtractorオブジェクトを作成し、PdfTextExtractor.ExtractText()メソッドを使用してページのテキストを抽出できます。また、PdfTextExtractOptionsクラスを使えば、レイアウト保持の設定やページ領域の指定など、抽出オプションを設定できます。以下は基本的な操作手順です。

  1. PdfDocumentオブジェクトを作成する。
  2. PdfDocument.LoadFromFile()メソッドを使用してPDFドキュメントを読み込む。
  3. PdfDocument.Pages[]プロパティを使用して特定のページを取得するか、すべてのページをループ処理する。
  4. ページからPdfTextExtractorオブジェクトを作成する。
  5. PdfTextExtractOptionsオブジェクトを作成し、抽出オプションを設定する。
  6. PdfTextExtractor.ExtractText(PdfTextExtractOptions)メソッドでページのテキストを抽出する。
  7. 抽出したテキストをファイルに書き出す、または他の用途に利用する。
  8. リソースを解放する。

レイアウトを保持せずにPDFテキストを抽出

レイアウトを保持せずにテキスト内容のみを抽出したい場合、PdfTextExtractOptions.IsSimpleExtractionプロパティをtrueに設定することで実現できます。以下はコード例です:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;

namespace ExtractPDFText
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument pdf = new PdfDocument();

            // PDF文書を読み込む
            pdf.LoadFromFile("Sample.pdf");

            // PdfTextExtractOptionsオブジェクトを作成し、レイアウトを保持しないように設定
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
            extractOptions.IsSimpleExtraction = true;

            // StringBuilderオブジェクトを作成して抽出したテキストを保存
            StringBuilder extractedText = new StringBuilder();

            // ドキュメントのページを繰り返し処理
            foreach (PdfPageBase page in pdf.Pages)
            {
                // ページを使用してPdfTextExtractorオブジェクトを作成
                PdfTextExtractor extractor = new PdfTextExtractor(page);
                // 現在のページのテキストを抽出
                string text = extractor.ExtractText(extractOptions);
                // 抽出したテキストをStringBuilderオブジェクトに追加
                extractedText.Append(text);
            }

            // 抽出結果をテキストファイルに書き込み
            using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
            {
                writer.Write(extractedText.ToString());
            }

            // リソースを解放
            pdf.Close();
        }
    }
}

(結果)
C#でPDFのテキストを抽出する方法

レイアウトを保持してPDFテキストを抽出

PDFテキストの抽出時に、空白で埋めて元のレイアウトを保持する場合は、デフォルトの抽出オプションを使用します。以下はコード例です:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;

namespace ExtractPDFTextAndLayout
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument pdf = new PdfDocument();

            // PDF文書を読み込む
            pdf.LoadFromFile("Sample.pdf");

            // テキスト抽出オプションを作成
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();

            // StringBuilderオブジェクトを作成して抽出したテキストを保存
            StringBuilder extractedText = new StringBuilder();

            // ドキュメントのページを繰り返し処理
            foreach (PdfPageBase page in pdf.Pages)
            {
                // ページを使用してPdfTextExtractorオブジェクトを作成
                PdfTextExtractor extractor = new PdfTextExtractor(page);
                // 現在のページのテキストを抽出
                string text = extractor.ExtractText(extractOptions);
                // 抽出したテキストをStringBuilderオブジェクトに追加
                extractedText.Append(text);
            }

            // 抽出結果をテキストファイルに書き込み
            using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
            {
                writer.Write(extractedText.ToString());
            }

            // リソースを解放
            pdf.Close();
        }
    }
}

(結果)
C#でPDFのテキストとレイアウトを抽出する方法

指定したPDFページ領域のテキストを抽出

PdfTextExtractOptions.ExtractAreaプロパティを使って抽出する領域を設定することで、特定のページ領域内のテキストを抽出することも可能です。以下はコード例です:

using Spire.Pdf.Texts;
using Spire.Pdf;

using System.Drawing;
using System.Text;

namespace ExtractPDFTextArea
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument pdf = new PdfDocument();

            // PDF文書を読み込む
            pdf.LoadFromFile("Sample.pdf");

            // 指定したページを取得
            PdfPageBase page = pdf.Pages[0];

            // PdfTextExtractorオブジェクトを作成
            PdfTextExtractor extractor = new PdfTextExtractor(page);

            // PdfTextExtractOptionsオブジェクトを作成
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
            // 抽出するテキストの矩形領域を設定
            extractOptions.ExtractArea = new RectangleF(80, 100, 250, 150);

            // ページ上の指定位置からテキストを抽出
            string extractedText = extractor.ExtractText(extractOptions);

            // 抽出したテキストをテキストファイルに書き込み
            File.WriteAllText("output/ExtractPDFPageAreaText.txt", extractedText, Encoding.UTF8);

            // リソースを解放
            pdf.Close();
        }
    }
}

(結果)
C#でPDFページの指定領域のテキストを抽出する

この記事では、.NETプログラム内でC#コードを使用してPDFドキュメントのテキストを抽出する方法を示しました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?