C#でOCR PDFを読む方法

C#でPDFを読む方法 with IronOCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCRはC#のコード一行でPDFファイルからテキストを抽出することができ、全てのPDFバージョンをサポートし、Tesseractベースのエンジンによって正確なOCR結果を提供します。

PDFは、"Portable Document Format "の略です。Adobeが開発したファイル形式で、作成に使用したアプリケーションやプラットフォームに関係なく、あらゆるソース文書のフォント、画像、グラフィック、レイアウトを保持します。 PDF ファイルは通常、ドキュメントを開くために使用されるソフトウェアやハードウェアに関係なく、一貫した形式でドキュメントを共有および表示するために使用されます。 IronOcrは、古いPDF 1.0仕様から最新のPDF 2.0標準まで、様々なバージョンのPDF文書を扱います。

クイックスタート: PDF ファイルを数秒で OCR 処理する

PDFを指すOcrPdfInputを作成し、Readを呼び出すことで、IronOCRでOCRを素早く設定することができます。 この例ではIronOCRを使ったPDFからのテキスト抽出を示します。

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronOCR をインストールします

    PM > Install-Package IronOcr

  2. このコード スニペットをコピーして実行します。

    using var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrPdfInput("document.pdf", PdfContents.TextAndImages));
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronOCR を使い始めましょう
    arrow pointer


PDFファイル全体を読むにはどうすればよいですか?

OCRを実行するためにIronTesseractクラスをインスタンス化することから始めます。 次に、"using"ステートメントを使用してOcrPdfInputオブジェクトを作成し、PDF ファイル パスを渡します。 最後に、 Readメソッドを使用して OCR を実行します。 このアプローチは、スキャンされたPDF(画像ベース)と検索可能なPDF(テキストベース)の両方で動作し、さまざまなPDFタイプからテキストを抽出するのに適しています。

/* :path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-pdf.cs */
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add PDF
using var pdfInput = new OcrPdfInput("Potter.pdf");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(pdfInput);

// Access the extracted text
string extractedText = ocrResult.Text;
System.Console.WriteLine(extractedText);
/* :path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-pdf.cs */
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add PDF
using var pdfInput = new OcrPdfInput("Potter.pdf");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(pdfInput);

// Access the extracted text
string extractedText = ocrResult.Text;
System.Console.WriteLine(extractedText);
$vbLabelText   $csharpLabel
フォーマットされたハリー・ポッターのテキストと抽出されたプレーンテキストの出力を示す分割表示でPDFテキスト抽出を実演.

ほとんどの場合、DPI プロパティを指定する必要はありません。 ただし、 OcrPdfInputの構築時に高い DPI 数値を指定すると、読み取り精度が向上します。 ほとんどの標準的なPDF文書では、デフォルトのDPI設定で十分ですが、特殊な文書では調整が必要な場合があります。

DPI設定はいつ調整すべきですか?

低解像度のスキャン文書や小さなテキストを含むPDFを扱う場合、DPI(Dots Per Inch)設定が重要になります。 最適な結果を得るには、DPI設定を調整することを検討してください:

  • 200 DPI以下のスキャン文書での作業
  • 歴史的またはアーカイブPDFの処理
  • 複雑なレイアウトや小さなフォントへの対応
  • デフォルト設定での精度の問題

ほとんどのOCR処理では300DPIを推奨しますが、非常に小さなテキストや複雑な細部が含まれる文書では600DPIが必要になる場合があります。

IronOCRはPDF以外にどのようなファイル形式をサポートしていますか?

IronOCRはPDF以外にも多くのファイル形式を包括的にサポートしています。 さまざまな形式の画像を処理できます

  • 標準的な写真のJPEG/JPG
  • 透過画像用PNG
  • 複数ページのドキュメントにはTIFF
  • 非圧縮画像用BMP
  • シンプルなグラフィックのためのGIF

さらに、IronOCRはPDFストリームをメモリから直接扱うことができ、ウェブアプリケーションやクラウドサービスに適しています。

PDFコンテンツタイプで作業する

PDFを処理する際、コンテンツタイプを指定することでパフォーマンスを最適化することができます。 PdfContents列挙型を使用すると、特定のコンテンツをターゲットにすることができます:

// For text-only PDFs (faster processing)
var textOnlyPdf = new OcrPdfInput("document.pdf", PdfContents.Text);

// For image-only PDFs (scanned documents)
var imageOnlyPdf = new OcrPdfInput("scanned.pdf", PdfContents.Images);

// For mixed content (default)
var mixedPdf = new OcrPdfInput("mixed.pdf", PdfContents.TextAndImages);
// For text-only PDFs (faster processing)
var textOnlyPdf = new OcrPdfInput("document.pdf", PdfContents.Text);

// For image-only PDFs (scanned documents)
var imageOnlyPdf = new OcrPdfInput("scanned.pdf", PdfContents.Images);

// For mixed content (default)
var mixedPdf = new OcrPdfInput("mixed.pdf", PdfContents.TextAndImages);
$vbLabelText   $csharpLabel

PDFから特定のページを読むにはどうすればよいですか?

PDF文書から特定のページを読み取る場合は、ページインデックス番号を指定してインポートします。 これを行うには、OcrPdfInputを構築する際に、PageIndicesパラメータにページインデックスのリストを渡します。 ページ インデックスでは 0 ベースの番号が使用されることに注意してください。 この機能は、特定のページのみに関連情報が含まれている大規模なドキュメントを扱う場合に特に役立ちます。

:path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-pdf-pages.cs
using IronOcr;
using System.Collections.Generic;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Create page indices list
List<int> pageIndices = new List<int>() { 0, 2 };

// Add PDF
using var pdfInput = new OcrPdfInput("Potter.pdf", PageIndices: pageIndices);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(pdfInput);
$vbLabelText   $csharpLabel

なぜページ番号はゼロから始まるのですか

ゼロベース・インデックスは、C#やほとんどのプログラミング言語の標準的な規約です。 つまり、1ページ目はインデックス0、2ページ目はインデックス1、といった具合です。 この配列インデックスとの一貫性により、開発者はプログラムでページ・コレクションを扱うことが容易になります。 人間が読めるページ番号(1、2、3...)からインデックスに変換する場合は、単純にページ番号から1を引いてください。

連続しないページを読むにはどうすればよいですか?

IronOCRを使えば、連続しないページも簡単に読むことができます。 ご希望のページインデックスをリストに追加してください。 例えば:

// Read pages 1, 3, 5, and 10 (using zero-based indices)
List<int> pageIndices = new List<int>() { 0, 2, 4, 9 };

// Or use LINQ for range-based selection
var evenPages = Enumerable.Range(0, 10).Where(x => x % 2 == 0).ToList();
// Read pages 1, 3, 5, and 10 (using zero-based indices)
List<int> pageIndices = new List<int>() { 0, 2, 4, 9 };

// Or use LINQ for range-based selection
var evenPages = Enumerable.Range(0, 10).Where(x => x % 2 == 0).ToList();
$vbLabelText   $csharpLabel

OCRエンジンは、指定されたページのみを処理し、大規模な文書のパフォーマンスを大幅に向上させます。

無効なページ番号を指定するとどうなりますか?

文書のページ数を超えるページインデックスを指定した場合、IronOCRは例外をスローします。 エラー処理を実装したり、処理前にページ数を検証したりすること。 インデックスが有効であることを確認するために、OCRを実行する前にPDFの総ページ数をチェックすることができます。

PDFの特定の領域をOCRするにはどうすればよいですか?

読み取るエリアを絞り込むことで、読書効率を大幅に高めることができます。 これを達成するために、読み取る必要がある取り込まれたPDFの正確な領域を指定します。 下記のコード例では、IronOCRは章番号とタイトルの抽出のみに焦点を当てています。 このテクニックは、画像のOCR領域を定義するのと似ており、速度と精度の両方を向上させます。

:path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop regions
Rectangle[] scanRegions = { new Rectangle(550, 100, 600, 300) };

// Add PDF
using (var pdfInput = new OcrPdfInput("Potter.pdf", ContentAreas: scanRegions))
{
    // Perform OCR
    OcrResult ocrResult = ocrTesseract.Read(pdfInput);

    // Output the result to console
    Console.WriteLine(ocrResult.Text);
}
$vbLabelText   $csharpLabel

正しい矩形座標を決定するにはどうすればよいですか?

OCR処理のために章タイトルを選択する赤い四角のPDF、実行完了を示すVisual Studioコンソール

正しい座標を見つけるには、PDFの座標系を理解する必要があります。 Rectangleコンストラクタは4つのパラメータを取ります:X(水平位置)、Y(垂直位置)、WidthHeightです。 単位はすべてピクセルです。 定規機能を持つPDFビューアやデバッグユーティリティのようなツールは、正確な座標を特定するのに役立ちます。 また、試行錯誤を繰り返し、少しずつ調整しながら、選択範囲を絞り込んでください。

より正確な領域の定義のために、highlight texts for debugging 機能を利用して、処理されている領域を視覚化することができます。

1回の操作で複数のリージョンを指定できますか?

はい、IronOCRは一回のOCR操作で複数のリージョンをサポートします。 複数の Rectangle オブジェクトを配列に追加するだけです:

Rectangle[] scanRegions = { 
    new Rectangle(50, 50, 200, 100),    // Header region
    new Rectangle(50, 200, 500, 300),   // Main content region
    new Rectangle(50, 550, 200, 50)     // Footer region
};
Rectangle[] scanRegions = { 
    new Rectangle(50, 50, 200, 100),    // Header region
    new Rectangle(50, 200, 500, 300),   // Main content region
    new Rectangle(50, 550, 200, 50)     // Footer region
};
$vbLabelText   $csharpLabel

各地域は別々に処理され、結果は指定された順序で結合されます。

なぜ全ページではなく、地域固有の OCR を使用するのですか?

地域固有のOCRには、いくつかの利点があります:

  • パフォーマンス:小さな領域の処理が大幅に高速化
  • 正確さ:特定の領域に焦点を当てることで、無関係なコンテンツによるノイズを低減します。
  • 構造: フォームやテーブルからデータをより確実に抽出する
  • コスト効率:処理時間の短縮は、計算コストの削減を意味します。

このアプローチは、請求書、フォーム、レポートなど、データが予測可能な場所に表示される構造化されたドキュメントを扱う場合に特に有効です。 複雑な文書構造については、文書内のテーブルを読むで、特殊なテーブル抽出テクニックを調べてください。

どのような高度な PDF OCR 機能がありますか?

IronOCRは基本的なテキスト抽出にとどまらず、PDF処理のための追加機能を提供します。 スキャンした文書から検索可能なPDFを作成し、元のレイアウトを保持しながら、検索やコピーのためのテキストレイヤーを追加することができます。 このライブラリは、大規模なPDFコレクションの高速処理のためのマルチスレッドもサポートしています。

.NETアプリケーションでOCRを始めようとする開発者のために、簡単なOCRの例はIronOCRの機能とベストプラクティスを理解するための強固な基礎となります。

複雑なPDFシナリオを処理する

IronOCRは、困難なPDF文書を扱う際、いくつかの高度な機能を提供します:

1.画像前処理画像フィルタを適用して、テキストを明瞭にします。 2.複数の言語複数の言語を含む文書を同時に処理します。 3.カスタム設定:特定のドキュメントタイプ用に OCR 設定を微調整します。 4.エクスポートオプション:検索可能なPDFやhOCR HTMLを含むさまざまな形式で結果を保存します。

これらの機能により、IronOCRは企業レベルのPDF処理に必要な包括的なソリューションとなります。

よくある質問

C# で PDF フ ァ イ ルか ら テ キ ス ト を抽出す る 方法は?

IronOCRを使ってPDFファイルからテキストを抽出することができます。IronTesseractインスタンスを作成し、OcrPdfInputでReadメソッドを使用するだけです:var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrPdfInput("document.pdf", PdfContents.TextAndImages));`.IronOCRはスキャンしたPDF(画像ベース)と検索可能なPDF(テキストベース)の両方を扱います。

テキスト抽出に対応しているPDFのバージョンは?

IronOCRは、古いPDF 1.0仕様から最新のPDF 2.0標準まで、すべてのPDFバージョンをサポートしています。OCRエンジンはTesseractテクノロジーで構築されており、PDFのバージョンに関係なく正確なテキスト抽出を保証します。

文書全体ではなく、PDFの特定のページだけを読むことはできますか?

はい、IronOCRはページインデックスを提供することで、PDFから特定のページを読み取ることができます。文書全体を処理する代わりに、OcrPdfInputオブジェクトを使用してテキストを抽出するページを指定することができます。

PDFファイルのOCRの最小限のワークフローは?

IronOCRの最小ワークフローは5つのステップで構成されています:1) C#ライブラリのダウンロード、2) PDFドキュメントの準備、3) PDFファイルパスでOcrPdfInputオブジェクトの作成、4) Readメソッドを使用してOCRを実行、5) オプションでページインデックスを指定して選択的読み取り。

PDF OCRのDPI設定はいつ調整すべきですか?

IronOCRのデフォルトのDPI設定はほとんどの標準的なPDFに適していますが、低解像度のスキャン文書(200DPI以下)や小さなテキストを含むPDFを扱う場合はDPIの調整を考慮する必要があります。OcrPdfInputコンストラクションのDPI設定を高くすると、特殊な文書の読み取り精度が大幅に向上します。

OCRエンジンは、スキャンしたPDFと検索可能なPDFの両方で動作しますか?

IronOCRは、スキャンされたPDF(画像ベース)と検索可能なPDF(テキストベース)の両方を効果的に処理します。Tesseractベースのエンジンは異なるPDFタイプを自動的に処理するため、異なるアプローチを必要とせず、様々なPDFフォーマットからテキストを抽出することができます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

レビュー済み
Jeff Fritz
Jeffrey T. Fritz
プリンシパルプログラムマネージャー - .NETコミュニティチーム
Jeffはまた、.NETとVisual Studioチームのプリンシパルプログラムマネージャーです。彼は.NET Conf仮想会議シリーズのエグゼクティブプロデューサーであり、週に二回放送される開発者向けライブストリーム『Fritz and Friends』のホストを務め、テクノロジーについて話すことや視聴者と一緒にコードを書くことをしています。Jeffはワークショップ、プレゼンテーション、およびMicrosoft Build、Microsoft Ignite、.NET Conf、Microsoft MVPサミットを含む最大のMicrosoft開発者イベントのコンテンツを企画しています。
準備はできましたか?
Nuget ダウンロード 5,299,091 | バージョン: 2025.12 リリース