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
クラスを使えば、レイアウト保持の設定やページ領域の指定など、抽出オプションを設定できます。以下は基本的な操作手順です。
-
PdfDocument
オブジェクトを作成する。 -
PdfDocument.LoadFromFile()
メソッドを使用してPDFドキュメントを読み込む。 -
PdfDocument.Pages[]
プロパティを使用して特定のページを取得するか、すべてのページをループ処理する。 - ページから
PdfTextExtractor
オブジェクトを作成する。 -
PdfTextExtractOptions
オブジェクトを作成し、抽出オプションを設定する。 -
PdfTextExtractor.ExtractText(PdfTextExtractOptions)
メソッドでページのテキストを抽出する。 - 抽出したテキストをファイルに書き出す、または他の用途に利用する。
- リソースを解放する。
レイアウトを保持せずに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();
}
}
}
レイアウトを保持して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();
}
}
}
指定した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();
}
}
}
この記事では、.NETプログラム内でC#コードを使用してPDFドキュメントのテキストを抽出する方法を示しました。