チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.Doc for .NET»変換»C#/VB.NET:Word を PDF に変換する方法
2026-09-24

C# でスキャンした PDF に対して OCR を実行してテキストを抽出する

C# でスキャンした PDF に対して OCR を実行する

光学文字認識(OCR)技術は、スキャンした文書や画像ベースの PDF を扱う開発者にとって不可欠なものとなっています。このチュートリアルでは、Spire.PDF for .NET および Spire.OCR for .NET ライブラリを使用して、C# で PDF に対して OCR を実行し、スキャンした文書や PDF 内の画像からテキストを抽出する方法を学びます。スキャンした PDF を編集可能で検索可能な形式に変換することで、文書管理プロセスを大幅に改善できます。

スキャンした PDF に OCR が必要な理由

スキャンした PDF は本質的に画像ファイルです。つまり、実際に選択・検索できるテキストコンテンツではなく、テキストの画像を含んでいます。紙の文書をスキャンしたり、画像ベースの PDF を受け取ったりすると、テキストはピクセルとしてのみ存在するため、編集・検索・抽出が不可能になります。これは、これらの文書をデジタルで扱う必要がある企業や個人にとって大きな制約となります。

OCR 技術は、スキャン画像内の文字や数字の形状を解析し、機械可読なテキストに変換することでこの問題を解決します。このプロセスにより、静的な PDF が使用可能で検索可能、かつ編集可能な文書に変わり、テキスト抽出、キーワード検索、データベースやワークフロー自動化ツールとのシームレスな統合が可能になります。

法律、医療、教育など、大量のスキャン文書を扱うことが多い分野では、OCR は文書のデジタル化において重要な役割を果たし、重要なデータへのアクセスや活用を容易にします。

環境設定:必要なライブラリのインストール

コードに入る前に、まず必要なコンポーネントである Spire.PDFSpire.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)。

重要な注意事項:Spire.OCR は 64 ビットシステムのみをサポートしているため、プロジェクトのターゲットプラットフォームが x64 であることを確認してください(プロジェクトのプロパティ > ビルド > プラットフォームターゲット)。

プラットフォームターゲットを 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:\Users\Administrator\Desktop\Input.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:\Users\Administrator\Desktop\Output", $"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 プロパティを使用してアクセスできます。
  • 出力:抽出されたテキストはページごとにテキストファイルに保存されます。

出力:

C# で PDF 文書に対して OCR を実行する

検索可能な 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:\Users\Administrator\Desktop\Input.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:\Users\Administrator\Desktop\Output", $"Image-Text-{m + 1}.txt");
                        File.WriteAllText(outputTxtPath, imageText);

                        m++;
                    }
                }
            }

            // リソースを解放する
            doc.Dispose();
        }
    }
}

主要なコンポーネントの説明:

  • PdfImageHelper クラス:このクラスは PDF ページから画像を抽出するために不可欠です。GetImagesInfo などの画像情報を取得するメソッドを提供し、PdfImageInfo オブジェクトの配列を返します。
  • PdfImageInfo クラス:各 PdfImageInfo オブジェクトには、さらに処理できる実際の Image オブジェクトを含む、画像に関連するプロパティが含まれています。
  • 画像処理:前の例と同様に、各画像は OCR 処理のために MemoryStream に保存されます。
  • 出力:各画像から抽出されたテキストは、個別のテキストファイルに保存されます。

出力:

C# で PDF 内の画像からテキストを抽出する

まとめ

Spire.PDFSpire.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 日間の無料トライアルライセンスを申請できます。

Read 6 times