光学文字認識(OCR)技術は、スキャンした文書や画像ベースの PDF を扱う開発者にとって不可欠なものとなっています。このチュートリアルでは、Spire.PDF for .NET および Spire.OCR for .NET ライブラリを使用して、C# で PDF に対して OCR を実行し、スキャンした文書や PDF 内の画像からテキストを抽出する方法を学びます。スキャンした PDF を編集可能で検索可能な形式に変換することで、文書管理プロセスを大幅に改善できます。 スキャンした PDF に OCR が必要な理由 環境設定:必要なライブラリのインストール スキャンした PDF に対して OCR を実行する PDF 内の画像からテキストを抽出する まとめ よくある質問 スキャンした PDF に OCR が必要な理由 スキャンした PDF は本質的に画像ファイルです。つまり、実際に選択・検索できるテキストコンテンツではなく、テキストの画像を含んでいます。紙の文書をスキャンしたり、画像ベースの PDF を受け取ったりすると、テキストはピクセルとしてのみ存在するため、編集・検索・抽出が不可能になります。これは、これらの文書をデジタルで扱う必要がある企業や個人にとって大きな制約となります。 OCR 技術は、スキャン画像内の文字や数字の形状を解析し、機械可読なテキストに変換することでこの問題を解決します。このプロセスにより、静的な PDF が使用可能で検索可能、かつ編集可能な文書に変わり、テキスト抽出、キーワード検索、データベースやワークフロー自動化ツールとのシームレスな統合が可能になります。 法律、医療、教育など、大量のスキャン文書を扱うことが多い分野では、OCR は文書のデジタル化において重要な役割を果たし、重要なデータへのアクセスや活用を容易にします。 環境設定:必要なライブラリのインストール コードに入る前に、まず必要なコンポーネントである Spire.PDF と Spire.OCR を使って開発環境を構築しましょう。Spire.PDF は PDF 操作を処理し、Spire.OCR は実際のテキスト認識を実行します。 ステップ 1. NuGet から Spire.PDF と Spire.OCR をインストールする まず、Visual Studio で NuGet パッケージマネージャーを開き、「Spire.PDF」と「Spire.OCR」を検索してプロジェクトにインストールします。あるいは、パッケージマネージャーコンソールを使用することもできます: Install-Package Spire.PDF Install-Package Spire.OCR ステップ 2. OCR モデルをダウンロードする Spire.OCR では、文字認識を行うために事前学習済みの言語モデルが必要です。使用する OS(Windows、Linux、macOS)に対応したモデルファイルをダウンロードし、次のようなディレクトリに展開します(例:D:win-x64)。 Windows x64 Linux x64 MacOS 10.15 以降 重要な注意事項:Spire.OCR は 64 ビットシステムのみをサポートしているため、プロジェクトのターゲットプラットフォームが x64 であることを確認してください(プロジェクトのプロパティ > ビルド > プラットフォームターゲット)。 C# でスキャンした PDF に対して OCR を実行する 必要なライブラリをインストールしたので、スキャンした PDF に対して OCR を実行できます。以下は、このプロセスを示すサンプルコードです。 using Spire.OCR; using Spire.Pdf; using Spire.Pdf.Graphics; using System.Drawing; namespace OCRPDF { class Program { static void Main(string[] args) { // OcrScanner クラスのインスタンスを作成する OcrScanner scanner = new OcrScanner(); // スキャナーを構成する ConfigureOptions configureOptions = new ConfigureOptions { ModelPath = @"D:win-x64", // モデルパスを設定する Language = "Japan" // 言語を設定する }; // 構成オプションを適用する scanner.ConfigureDependencies(configureOptions); // PDF 文書を読み込む PdfDocument doc = new PdfDocument(); doc.LoadFromFile(@"C:UsersAdministratorDesktopInput.pdf"); // すべてのページを反復処理する for (int i = 0; i < doc.Pages.Count; i++) { // ページを画像に変換する Image image = doc.SaveAsImage(i, PdfImageType.Bitmap); // 画像を MemoryStream に変換する using (MemoryStream stream = new MemoryStream()) { image.Save(stream, System.Drawing.Imaging.ImageFormat.Png); stream.Position = 0; // ストリームの位置をリセットする // 画像ストリームに対して OCR を実行する scanner.Scan(stream, OCRImageFormat.Png); string pageText = scanner.Text.ToString(); // 抽出したテキストを別ファイルに保存する string outputTxtPath = Path.Combine(@"C:UsersAdministratorDesktopOutput", $"Page-{i + 1}.txt"); File.WriteAllText(outputTxtPath, pageText); } } // 文書を閉じる doc.Close(); } } } 主要なコンポーネントの説明: OcrScanner クラス:このクラスは OCR を実行するために不可欠です。スキャン操作を構成および実行するためのメソッドを提供します。 ConfigureOptions クラス:このクラスは OCR スキャナーの構成を設定するために使用されます。ModelPath プロパティは OCR モデルファイルのパスを指定し、Language プロパティではテキスト認識の言語を指定できます。 PdfDocument クラス:このクラスは PDF 文書を表します。LoadFromFile メソッドは処理したい PDF ファイルを読み込みます。 画像変換:各 PDF ページは SaveAsImage メソッドを使用して画像に変換されます。OCR は画像ファイルに対して動作するため、これは必須です。 MemoryStream:画像は MemoryStream に保存され、画像をディスクに保存することなく OCR を実行できます。 OCR 処理:Scan メソッドは画像ストリームに対して OCR を実行します。認識されたテキストは OcrScanner インスタンスの Text プロパティを使用してアクセスできます。 出力:抽出されたテキストはページごとにテキストファイルに保存されます。 出力: 検索可能な PDF からテキストを抽出するには、こちらのガイドを参照してください:C# を使用して PDF テキスト抽出する方法 C# で PDF 内の画像からテキストを抽出する PDF ページ全体を処理するだけでなく、PDF 内に埋め込まれた画像からテキストを抽出することもできます。方法は以下の通りです: using Spire.Pdf; using Spire.Pdf.Utilities; using Spire.OCR; using System.Drawing; namespace OcrImageFromPdf { class Program { static void Main(string[] args) { // PdfDocument オブジェクトを作成する PdfDocument doc = new PdfDocument(); // PDF 文書を読み込む doc.LoadFromFile(@"C:UsersAdministratorDesktopInput.pdf"); // PdfImageHelper オブジェクトを作成する PdfImageHelper imageHelper = new PdfImageHelper(); // OcrScanner クラスのインスタンスを作成する OcrScanner scanner = new OcrScanner(); // スキャナーを構成する ConfigureOptions configureOptions = new ConfigureOptions { ModelPath = @"D:win-x64", // モデルパスを設定する Language = "Japan" // 言語を設定する }; scanner.ConfigureDependencies(configureOptions); // int 型の変数を宣言する int m = 0; // すべてのページを反復処理する for (int i = 0; i < doc.Pages.Count; i++) { // 特定のページを取得する PdfPageBase page = doc.Pages[i]; // ページからすべての画像情報を取得する PdfImageInfo[] imageInfos = imageHelper.GetImagesInfo(page); // 画像情報を反復処理する for (int j = 0; j < imageInfos.Length; j++) { // 特定の画像情報を取得する PdfImageInfo imageInfo = imageInfos[j]; // 画像を取得する Image image = imageInfo.Image; // 画像を MemoryStream に変換する using (MemoryStream stream = new MemoryStream()) { image.Save(stream, System.Drawing.Imaging.ImageFormat.Png); stream.Position = 0; // ストリームの位置をリセットする // 画像ストリームに対して OCR を実行する scanner.Scan(stream, OCRImageFormat.Png); string imageText = scanner.Text.ToString(); // OCR の結果をテキストファイルに保存する string outputTxtPath = Path.Combine(@"C:UsersAdministratorDesktopOutput", $"Image-Text-{m + 1}.txt"); File.WriteAllText(outputTxtPath, imageText); m++; } } } // リソースを解放する doc.Dispose(); } } } 主要なコンポーネントの説明: PdfImageHelper クラス:このクラスは PDF ページから画像を抽出するために不可欠です。GetImagesInfo などの画像情報を取得するメソッドを提供し、PdfImageInfo オブジェクトの配列を返します。 PdfImageInfo クラス:各 PdfImageInfo オブジェクトには、さらに処理できる実際の Image オブジェクトを含む、画像に関連するプロパティが含まれています。 画像処理:前の例と同様に、各画像は OCR 処理のために MemoryStream に保存されます。 出力:各画像から抽出されたテキストは、個別のテキストファイルに保存されます。 出力: まとめ Spire.PDF と Spire.OCR を組み合わせることで、スキャンした PDF や画像ベースの文書を完全に検索可能で編集可能なテキストにシームレスに変換できます。ページ全体を処理する必要がある場合でも、特定の埋め込み画像からテキストを抽出する場合でも、アプローチはシンプルで柔軟です。 この OCR 統合は、文書のデジタル化を効率化するだけでなく、検索、コピー、自動データ抽出を可能にすることで生産性を向上させます。大量のスキャン文書が一般的な業界では、C# で OCR を実装することで、アクセシビリティ、コンプライアンス、情報検索速度を大幅に改善できます。 よくある質問 日本語以外の PDF に対して OCR を実行できますか? はい、Spire.OCR は複数の言語をサポートしています。ConfigureOptions の Language プロパティを目的の言語に設定できます。 出力が文字化けしたり正しくない場合はどうすればよいですか? 入力 PDF 画像の品質を確認してください。画像がぼやけていたり、コントラストが低い場合、OCR はテキストを正確に認識することが難しくなります。処理前に画像品質を向上させることを検討してください。 PDF 内に埋め込まれた画像からテキストを抽出できますか? はい、できます。ヘルパークラスを使用して各ページから画像を抽出し、その画像に OCR を適用してテキストを認識できます。 Spire.OCR は PDF 内の手書き文字を処理できますか? Spire.OCR は主に印刷されたテキスト向けに最適化されています。手書き文字の場合、認識精度は一般的に低くなります。 OCR のために追加の言語モデルをインストールする必要がありますか? はい、Spire.OCR は事前学習済みの言語モデルファイルを必要とします。OCR を実行する前に、対象言語に適したモデルをダウンロードして構成してください。 無料ライセンスを取得する Spire.PDF for .NET と Spire.OCR for .NET の機能を評価上の制限なしで体験するには、30 日間の無料トライアルライセンスを申請できます。