他のコンポーネントと比較する 高度な文書分析 Kannapat Udonpant 更新日:2026年1月5日 IronOCR をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る Tesseract OCR ではテキストを抽出する前に PDF ページを画像に変換する必要がありますが、IronOCR は組み込みの前処理機能を備えたネイティブ PDF サポートを提供し、スキャンされたドキュメントを大規模に処理する .NET 開発者にとって簡単なアプローチを提供します。 C#および.NETアプリケーションでは、スキャンしたPDF文書からテキストを抽出することが一般的な要件です。 請求書の処理、スキャンした文書のデジタル化、データ入力ワークフローの自動化など、開発者には PDF ファイルを編集可能で検索可能なデータに効率的に変換する信頼性の高いOCR ソリューションが必要です。 Tesseract OCRは、Googleによって保守されているオープンソースの光学式文字認識エンジンとして広く使われていますが、多くの.NET開発者は、特にPDFコンテンツを扱う際に大きな課題に遭遇します。 この比較では、Tesseract OCR とIronOCRを使用して C# でPDF からテキストへの変換を実行する方法を確認し、ソース コードの例と、運用システムに適したOCR ライブラリを選択するための実用的なガイダンスを提供します。 これにより、開発者は実稼働 OCR システムを構築するときに、各アプローチのアーキテクチャ上の意味を理解することができます。 PDF/スキャンした PDF の処理において、これらの OCR ソリューションはどのように比較されますか? 実装の詳細を検討する前に、スキャンされた PDF ファイルからのテキスト認識の主な機能の比較を示します。 機能 テッセラクト IronOCR ネイティブPDF入力 なし(画像への変換が必要) はい インストール 複数の依存関係 単一の NuGet パッケージ パスワードで保護されたPDF サポートされていません サポート対象 画像の前処理 マニュアル(外部ツール) 内蔵フィルター 対応言語 100以上の言語 127以上の言語 ライセンス アパッチ2.0(無料) コマーシャル .NET 統合 .NETラッパー経由 ネイティブ C# ライブラリ 画像フォーマット png、jpeg、tiff、bmp PNG、JPEG、TIFF、BMP、GIF、PDF 出力オプション プレーンテキスト、hOCR、HTML プレーンテキスト、検索可能なPDF、hOCR 比較すると、 IronOCR は、特に検索可能な PDF 生成とバーコード認識を必要とするエンタープライズドキュメント管理システム向けに、より完全な PDF 処理機能を提供していることがわかります。 TesseractはどのようにPDFファイルを扱い、テキストを抽出しますか? Tesseract OCRエンジンは、PDFドキュメントの入力をネイティブサポートしていません。 Tesseract の公式ドキュメントによると、開発者は OCR を実行する前に、まず PDF ページを PNG や JPEG などの入力画像形式に変換する必要があります。 このプロセスでは、各ページをレンダリングするために、Ghostscript、Docotic.Pdf、または同様のツールのような追加ライブラリが必要です。 変換ワークフローにより、生産システムが複雑になります。 以下は、C#でPDFからテキストを抽出する典型的なTesseractワークフローの簡略化した例です: using Tesseract; using System.Drawing; using System.Threading.Tasks; // Step 1: Convert PDF page to PNG image (requires separate PDF library) // This example assumes you've already converted the scanned PDF to an image string imagePath = "document-scan.png"; // Step 2: Initialize Tesseract with language data files path var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default); // Step 3: Load the input image and process var img = Pix.LoadFromFile(imagePath); var page = engine.Process(img); // Step 4: Extract the recognized text string extractedText = page.GetText(); Console.WriteLine($"Confidence: {page.GetMeanConfidence()}"); Console.WriteLine(extractedText); // Optional: Get detailed results with bounding boxes using (var iter = page.GetIterator()) { iter.Begin(); do { if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds)) { var word = iter.GetText(PageIteratorLevel.Word); Console.WriteLine($"Word: {word} at {bounds}"); } } while (iter.Next(PageIteratorLevel.Word)); } // Clean up resources page.Dispose(); img.Dispose(); engine.Dispose(); using Tesseract; using System.Drawing; using System.Threading.Tasks; // Step 1: Convert PDF page to PNG image (requires separate PDF library) // This example assumes you've already converted the scanned PDF to an image string imagePath = "document-scan.png"; // Step 2: Initialize Tesseract with language data files path var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default); // Step 3: Load the input image and process var img = Pix.LoadFromFile(imagePath); var page = engine.Process(img); // Step 4: Extract the recognized text string extractedText = page.GetText(); Console.WriteLine($"Confidence: {page.GetMeanConfidence()}"); Console.WriteLine(extractedText); // Optional: Get detailed results with bounding boxes using (var iter = page.GetIterator()) { iter.Begin(); do { if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds)) { var word = iter.GetText(PageIteratorLevel.Word); Console.WriteLine($"Word: {word} at {bounds}"); } } while (iter.Next(PageIteratorLevel.Word)); } // Clean up resources page.Dispose(); img.Dispose(); engine.Dispose(); Imports Tesseract Imports System.Drawing Imports System.Threading.Tasks ' Step 1: Convert PDF page to PNG image (requires separate PDF library) ' This example assumes you've already converted the scanned PDF to an image Dim imagePath As String = "document-scan.png" ' Step 2: Initialize Tesseract with language data files path Dim engine As New TesseractEngine("./tessdata", "eng", EngineMode.Default) ' Step 3: Load the input image and process Dim img As Pix = Pix.LoadFromFile(imagePath) Dim page As Page = engine.Process(img) ' Step 4: Extract the recognized text Dim extractedText As String = page.GetText() Console.WriteLine($"Confidence: {page.GetMeanConfidence()}") Console.WriteLine(extractedText) ' Optional: Get detailed results with bounding boxes Using iter As ResultIterator = page.GetIterator() iter.Begin() Do Dim bounds As Rect If iter.TryGetBoundingBox(PageIteratorLevel.Word, bounds) Then Dim word As String = iter.GetText(PageIteratorLevel.Word) Console.WriteLine($"Word: {word} at {bounds}") End If Loop While iter.Next(PageIteratorLevel.Word) End Using ' Clean up resources page.Dispose() img.Dispose() engine.Dispose() $vbLabelText $csharpLabel このコードは、NuGetで利用可能な.NETラッパーを使用した標準的なTesseractのアプローチを示しています。 engine初期化には、言語データ ファイルを含むtessdataフォルダーへのパスが必要です。これらのファイルは、 tessdata リポジトリから個別にダウンロードする必要があります。 img割り当ては、入力イメージを Leptonica の PIX 形式で読み込みます。これは、メモリ リークを防ぐために慎重なメモリ管理を必要とするアンマネージ C++ オブジェクトです。 Processからのpage結果によって、実際の光学文字認識操作が実行されます。 実稼働環境では、複数ページのドキュメントを処理するには追加のオーケストレーションが必要です。 // Example: Processing multiple PDF pages (after conversion) public async Task<string> ProcessMultiPagePdf(string[] imagePaths) { var results = new StringBuilder(); var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default); foreach (var imagePath in imagePaths) { using (var img = Pix.LoadFromFile(imagePath)) using (var page = engine.Process(img)) { results.AppendLine($"Page confidence: {page.GetMeanConfidence():F2}"); results.AppendLine(page.GetText()); results.AppendLine("---"); } } engine.Dispose(); return results.ToString(); } // Example: Processing multiple PDF pages (after conversion) public async Task<string> ProcessMultiPagePdf(string[] imagePaths) { var results = new StringBuilder(); var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default); foreach (var imagePath in imagePaths) { using (var img = Pix.LoadFromFile(imagePath)) using (var page = engine.Process(img)) { results.AppendLine($"Page confidence: {page.GetMeanConfidence():F2}"); results.AppendLine(page.GetText()); results.AppendLine("---"); } } engine.Dispose(); return results.ToString(); } Imports System.Text Imports Tesseract Public Async Function ProcessMultiPagePdf(imagePaths As String()) As Task(Of String) Dim results As New StringBuilder() Dim engine As New TesseractEngine("./tessdata", "eng", EngineMode.Default) For Each imagePath In imagePaths Using img = Pix.LoadFromFile(imagePath) Using page = engine.Process(img) results.AppendLine($"Page confidence: {page.GetMeanConfidence():F2}") results.AppendLine(page.GetText()) results.AppendLine("---") End Using End Using Next engine.Dispose() Return results.ToString() End Function $vbLabelText $csharpLabel Tesseract ではなぜ最初にイメージ変換が必要なのでしょうか? Tesseract のアーキテクチャは、ドキュメント処理ではなく画像処理にのみ重点を置いています。 この設計選択により、開発者は PDF から画像への変換パイプラインを自分で管理する必要があり、パスワードで保護された PDF 、複数ページのドキュメント、またはテキストと画像の両方を含む混合コンテンツの PDFを扱うときに複雑さが増します。 変換品質はOCR の精度に直接影響するため、結果を改善するには適切なDPI 設定が重要になります。 基本的な Tesseract 処理からどのような結果が期待できますか? ! Visual Studio デバッグコンソールに、.NET 9.0 アプリケーションから"請求書番号 1001"と"合計: $500.00"を含む PDF テキストの抽出が成功したことが表示されます。 ここでの重要な制限は、このコードが画像ファイルしか扱えないということです。 複数ページの PDF ドキュメントからテキストを抽出するには、開発者は各ページを PNG 画像としてレンダリングし、一時ファイルを保存し、各ページをOCR エンジンで個別に処理し、認識されたテキストの結果を集約する追加ロジックを実装する必要があります。 この複数ステップのワークフローにより複雑さが増し、潜在的な障害ポイントが発生します。 デジタルカメラで撮影した画像や白い背景の文書では、正確なテキスト認識を実現するために前処理が必要になる場合があります。 信頼スコアは抽出品質の検証に役立ちますが、手動での解釈としきい値の設定が必要です。 IronOCRはどのようにPDFや画像フォーマットを直接処理するのですか? IronOCR はネイティブ PDF サポートを提供するため、スキャンしたドキュメントを中間画像形式に変換する必要がありません。 ライブラリは PDF レンダリングを内部的に処理し、 .NET アプリケーションのワークフローを簡素化します。 このアプローチは、パフォーマンスと信頼性が重要なエンタープライズ ドキュメント処理に役立ちます。 統合されたTesseract 5 エンジンは、クロスプラットフォームの互換性を維持しながら、以前のバージョンよりも精度が向上しています。 using IronOcr; using System.Linq; // Initialize the OCR engine (improved Tesseract 5) var ocr = new IronTesseract(); // Configure for improved accuracy ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto; ocr.Configuration.ReadBarCodes = true; // Also detect barcodes/QR codes // Load PDF document directly - no conversion needed var input = new OcrInput(); input.LoadPdf("scanned-document.pdf", Password: "optional-password"); // Optional: Pre-process for better accuracy on low-quality scans input.DeNoise(); // Remove noise from scanned paper documents input.Deskew(); // Fix rotation from images captured at angles input.EnhanceResolution(300); // Ensure improved DPI // Extract text from all pages and create searchable data OcrResult result = ocr.Read(input); // Access detailed results Console.WriteLine($"Overall Confidence: {result.Confidence}%"); Console.WriteLine($"Pages Processed: {result.Pages.Count()}"); Console.WriteLine(result.Text); // Export as searchable PDF result.SaveAsSearchablePdf("searchable-output.pdf"); using IronOcr; using System.Linq; // Initialize the OCR engine (improved Tesseract 5) var ocr = new IronTesseract(); // Configure for improved accuracy ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto; ocr.Configuration.ReadBarCodes = true; // Also detect barcodes/QR codes // Load PDF document directly - no conversion needed var input = new OcrInput(); input.LoadPdf("scanned-document.pdf", Password: "optional-password"); // Optional: Pre-process for better accuracy on low-quality scans input.DeNoise(); // Remove noise from scanned paper documents input.Deskew(); // Fix rotation from images captured at angles input.EnhanceResolution(300); // Ensure improved DPI // Extract text from all pages and create searchable data OcrResult result = ocr.Read(input); // Access detailed results Console.WriteLine($"Overall Confidence: {result.Confidence}%"); Console.WriteLine($"Pages Processed: {result.Pages.Count()}"); Console.WriteLine(result.Text); // Export as searchable PDF result.SaveAsSearchablePdf("searchable-output.pdf"); Imports IronOcr Imports System.Linq ' Initialize the OCR engine (improved Tesseract 5) Dim ocr As New IronTesseract() ' Configure for improved accuracy ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto ocr.Configuration.ReadBarCodes = True ' Also detect barcodes/QR codes ' Load PDF document directly - no conversion needed Dim input As New OcrInput() input.LoadPdf("scanned-document.pdf", Password:="optional-password") ' Optional: Pre-process for better accuracy on low-quality scans input.DeNoise() ' Remove noise from scanned paper documents input.Deskew() ' Fix rotation from images captured at angles input.EnhanceResolution(300) ' Ensure improved DPI ' Extract text from all pages and create searchable data Dim result As OcrResult = ocr.Read(input) ' Access detailed results Console.WriteLine($"Overall Confidence: {result.Confidence}%") Console.WriteLine($"Pages Processed: {result.Pages.Count()}") Console.WriteLine(result.Text) ' Export as searchable PDF result.SaveAsSearchablePdf("searchable-output.pdf") $vbLabelText $csharpLabel IronTesseractクラスは、.NET Coreおよび.NET Framework環境向けに特別に構築された、最適化されたTesseract 5エンジンをラップしています。 標準の.NETラッパーとは異なり、この実装はメモリ管理を自動的に処理し、.NETアプリケーションのパフォーマンス最適化を含んでいます。 OcrInputクラスは、LoadPdfメソッドを介してPDFファイルを直接受け入れ、ダウンロードする追加ライブラリを必要とせずに内部でページをレンダリングします。 DeNoise()とDeskew()メソッドは、画像前処理フィルタを適用し、背景のノイズや斑点、わずかな回転があるスキャン文書の精度を大幅に向上させることができます。 これらのフィルタは、理想的な条件下でキャプチャされたものではない、実際にスキャンされた紙文書を扱う場合に特に役立ちます。 OcrResultオブジェクトは、抽出されたプレーンテキストと、信頼度スコアや後処理の検証のための文字位置などの追加メタデータを含んでいます。 結果を検索可能なPDFまたはHTML形式で出力することもできます。 よりコントロールするために、開発者は特定のページ、あるいはPDFドキュメント内の領域を指定することができます: using IronOcr; using System.Drawing; var ocr = new IronTesseract(); // Advanced configuration for specific document types ocr.Configuration = new TesseractConfiguration() { WhiteListCharacters = "0123456789.$,", // For financial documents BlackListCharacters = "`~", PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn }; // Load specific pages from a PDF file (pages 1 and 2) var input = new OcrInput(); input.LoadPdfPages("web-report.pdf", new[] { 0, 1 }); // Target specific regions for extraction (e.g., invoice totals) var cropRegion = new CropRectangle(x: 100, y: 500, width: 400, height: 200); foreach (var page in input.Pages) { page.AddCropRegion(cropRegion); } // Perform OCR and get searchable text OcrResult result = ocr.Read(input); // Access structured data foreach (var page in result.Pages) { Console.WriteLine($"Page {page.PageNumber}:"); foreach (var paragraph in page.Paragraphs) { Console.WriteLine($" Paragraph (Confidence: {paragraph.Confidence}%):"); Console.WriteLine($" {paragraph.Text}"); } } using IronOcr; using System.Drawing; var ocr = new IronTesseract(); // Advanced configuration for specific document types ocr.Configuration = new TesseractConfiguration() { WhiteListCharacters = "0123456789.$,", // For financial documents BlackListCharacters = "`~", PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn }; // Load specific pages from a PDF file (pages 1 and 2) var input = new OcrInput(); input.LoadPdfPages("web-report.pdf", new[] { 0, 1 }); // Target specific regions for extraction (e.g., invoice totals) var cropRegion = new CropRectangle(x: 100, y: 500, width: 400, height: 200); foreach (var page in input.Pages) { page.AddCropRegion(cropRegion); } // Perform OCR and get searchable text OcrResult result = ocr.Read(input); // Access structured data foreach (var page in result.Pages) { Console.WriteLine($"Page {page.PageNumber}:"); foreach (var paragraph in page.Paragraphs) { Console.WriteLine($" Paragraph (Confidence: {paragraph.Confidence}%):"); Console.WriteLine($" {paragraph.Text}"); } } Imports IronOcr Imports System.Drawing Dim ocr = New IronTesseract() ' Advanced configuration for specific document types ocr.Configuration = New TesseractConfiguration() With { .WhiteListCharacters = "0123456789.$,", ' For financial documents .BlackListCharacters = "`~", .PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn } ' Load specific pages from a PDF file (pages 1 and 2) Dim input = New OcrInput() input.LoadPdfPages("web-report.pdf", {0, 1}) ' Target specific regions for extraction (e.g., invoice totals) Dim cropRegion = New CropRectangle(x:=100, y:=500, width:=400, height:=200) For Each page In input.Pages page.AddCropRegion(cropRegion) Next ' Perform OCR and get searchable text Dim result As OcrResult = ocr.Read(input) ' Access structured data For Each page In result.Pages Console.WriteLine($"Page {page.PageNumber}:") For Each paragraph In page.Paragraphs Console.WriteLine($" Paragraph (Confidence: {paragraph.Confidence}%):") Console.WriteLine($" {paragraph.Text}") Next Next $vbLabelText $csharpLabel LoadPdfPagesメソッドは、ゼロベースのページインデックス値の配列を受け入れ、すべてのページをメモリに読み込むことなく、大きなPDF文書の選択的な処理を可能にします。 また、API は、同じドキュメント内の複数の言語を認識するように Tesseract を構成する追加の言語パックを通じて、複数の言語をサポートします。 領域ベースの抽出機能は、請求書、フォーム、財務諸表などの構造化ドキュメントの処理に不可欠です。 トリミング領域機能を使用すると、ヘッダー、フッター、データ テーブルなどの特定の領域をターゲットにすることができます。 IronOCR はどのような種類の PDF を処理できますか? ! IronPDF ホームページでは、HTML から PDF への変換、編集、1500 万回以上の NuGet ダウンロードを含む完全な C# PDF ライブラリ機能を紹介 IronOCR は、スキャンされたドキュメント、ネイティブ テキスト PDF 、混合コンテンツ、パスワードで保護されたファイルなど、さまざまな PDF タイプを処理します。 ライブラリは、PDF に抽出可能なテキストが含まれているか、 OCR 処理が必要かどうかを自動的に検出し、各シナリオに合わせてパフォーマンスを最適化します。 この汎用性により、文書のデジタル化プロジェクトや自動データ抽出に適しています。 ストリーム サポートにより、一時ファイルを使用せずにメモリからドキュメントを処理できるため、クラウド展開や安全な環境に最適です。 ページ固有の処理はどのように機能しますか? ! RenderUrlAsPdf、RenderHtmlFileAsPdf、RenderHtmlAsPdf メソッドを使用した HTML から PDF への変換の C# コード例を示した IronPDF ドキュメント ページ固有の処理により、関連するページのみをターゲットにして大規模なドキュメントを効率的に処理できます。 この機能は、複数ページのドキュメントの特定のセクションからデータを抽出する必要がある バッチ処理システムにとって非常に重要です。 非同期サポートにより、メイン スレッドをブロックせずに複数のドキュメントを並列処理できます。 中止トークンなどの高度な機能は、長時間実行される操作のキャンセル サポートを提供し、タイムアウト構成はリソースの枯渇を防ぎます。## セットアップとワークフローの主な違いは何ですか? Tesseract ではなぜインストールがより複雑になるのでしょうか? Visual StudioでTesseractを動作させるには、Tesseract OCRエンジンのバイナリ、 Leptonicaイメージングライブラリ、Windows用Visual C++再頒布可能パッケージ、そして認識する各言語の言語データファイルなど、いくつかのコンポーネントが必要です。開発者はTessdataファイルをダウンロードし、パスを正しく設定する必要があります。 Azure 、 Docker コンテナー、 Linux サーバーなどの環境へのクロスプラットフォーム展開では、多くの場合、プラットフォーム固有の構成と依存関係パスのトラブルシューティングが必要になります。 フォントや編集可能なドキュメントを扱うには、追加の設定が必要になる場合があります。libgdiplusへの依存関係により、 Windows 以外のプラットフォームでは追加の課題が生じます。 ランタイム環境では外部依存関係とメモリ割り当てに厳しい制限があるため、 Azure FunctionsまたはAWS Lambda のデプロイメントを扱う場合には依存関係の管理が特に困難になります。 AVX をサポートしていない古い CPU でのSEHException エラーにより、複雑さがさらに増します。 開発者は、ランタイム フォルダーのアクセス許可とtessdata の場所のエラーに悩まされることがよくあります。 IronOCR は、外部依存関係のない単一の NuGet パッケージへのインストールを簡素化します。 Install-Package IronOcr Install-Package IronOcr SHELL 特殊なドキュメント タイプの場合、追加のパッケージによって機能が向上します。 Install-Package IronOcr.Extensions.AdvancedScan # For specific languages Install-Package IronOcr.Languages.French Install-Package IronOcr.Languages.Japanese Install-Package IronOcr.Extensions.AdvancedScan # For specific languages Install-Package IronOcr.Languages.French Install-Package IronOcr.Languages.Japanese SHELL ! NuGet パッケージ マネージャー コンソールに IronOCR のインストールが成功し、依存関係の自動解決が約 20 秒で完了したことが示されています。 必要なコンポーネントはすべてライブラリにバンドルされています。 追加言語の言語パックは、同様に簡単にインストールできる個別の NuGet パッケージとして提供されており、手動でのファイル管理やフォルダー構成は不要になります。 OCR ライブラリは、 Windows 、 macOS 、 Linuxで、.NET Framework 4.6.2+ 、. NET Core 、.NET 5-10 をデフォルトでサポートします。 ドキュメントは、開発者が OCR ソリューションを迅速に作成するのに役立ちます。 Windows インストーラーは、エンタープライズ環境向けの代替インストール方法を提供します。 PDF 処理のワークフローを比較するとどうなりますか? PDF テキスト抽出のための Tesseract アプローチには、複数のステップが含まれます。PDF ドキュメントを読み込む → 個別のライブラリを使用して各ページを PNG などの画像形式に変換する → PIX 形式を使用して画像を Tesseract に読み込む → 各ページを処理する → すべてのページの文字列結果を集約する。 各ステップは潜在的な障害点を招き、エラー処理を必要とし、コードベース全体のサイズを増加させます。開発者は、管理されていないPIXオブジェクトからのメモリリークを防ぐために、メモリ管理を慎重に行う必要があります。 コード例では、基本的なPDF処理を処理するために数十行を必要とすることがよくあります。 System.Drawing の依存関係により、 .NET 7 以降の環境では追加の課題が生じます。 IronOCRはこのワークフロー全体を、PDFの読み込み→処理→結果へのアクセスに凝縮しています。 ライブラリは、PDF のレンダリング、メモリの割り当て、複数ページの処理、結果の集約を内部で管理します。 この単純化されたアプローチは、コードの複雑さと開発時間を削減し、バグの機会を最小限に抑えます。 認識されたテキストは、1 回の API 呼び出しでプレーンテキスト、検索可能な PDF 、またはその他の形式で保存できます。 エクスポート機能には、検証用の OCR 要素の画像の抽出が含まれます。 以下は、エラー処理と進捗状況の追跡を示す本番環境対応の例です。 using IronOcr; using System; using System.Threading.Tasks; public class PdfOcrService { private readonly IronTesseract _ocr; public PdfOcrService() { _ocr = new IronTesseract(); // Subscribe to progress events _ocr.OcrProgress += (sender, e) => { Console.WriteLine($"Processing page {e.PagesComplete}/{e.TotalPages} - {e.ProgressPercent}%"); }; } public async Task<OcrResult> ProcessPdfWithErrorHandling(string pdfPath) { try { var input = new OcrInput(); // Check file size for large documents var fileInfo = new System.IO.FileInfo(pdfPath); if (fileInfo.Length > 100_000_000) // 100MB { // Use lower DPI for large files input.TargetDPI = 150; } input.LoadPdf(pdfPath); // Apply filters based on document quality assessment if (RequiresPreprocessing(input)) { input.DeNoise(); input.Deskew(); input.EnhanceResolution(300); } // Process with timeout protection using (var cts = new System.Threading.CancellationTokenSource(TimeSpan.FromMinutes(5))) { return await _ocr.ReadAsync(input, cts.Token); } } catch (Exception ex) { // Log and handle specific exceptions throw new ApplicationException($"OCR processing failed: {ex.Message}", ex); } } private bool RequiresPreprocessing(OcrInput input) { // Implement quality assessment logic return true; } } using IronOcr; using System; using System.Threading.Tasks; public class PdfOcrService { private readonly IronTesseract _ocr; public PdfOcrService() { _ocr = new IronTesseract(); // Subscribe to progress events _ocr.OcrProgress += (sender, e) => { Console.WriteLine($"Processing page {e.PagesComplete}/{e.TotalPages} - {e.ProgressPercent}%"); }; } public async Task<OcrResult> ProcessPdfWithErrorHandling(string pdfPath) { try { var input = new OcrInput(); // Check file size for large documents var fileInfo = new System.IO.FileInfo(pdfPath); if (fileInfo.Length > 100_000_000) // 100MB { // Use lower DPI for large files input.TargetDPI = 150; } input.LoadPdf(pdfPath); // Apply filters based on document quality assessment if (RequiresPreprocessing(input)) { input.DeNoise(); input.Deskew(); input.EnhanceResolution(300); } // Process with timeout protection using (var cts = new System.Threading.CancellationTokenSource(TimeSpan.FromMinutes(5))) { return await _ocr.ReadAsync(input, cts.Token); } } catch (Exception ex) { // Log and handle specific exceptions throw new ApplicationException($"OCR processing failed: {ex.Message}", ex); } } private bool RequiresPreprocessing(OcrInput input) { // Implement quality assessment logic return true; } } Imports IronOcr Imports System Imports System.Threading.Tasks Imports System.IO Public Class PdfOcrService Private ReadOnly _ocr As IronTesseract Public Sub New() _ocr = New IronTesseract() ' Subscribe to progress events AddHandler _ocr.OcrProgress, Sub(sender, e) Console.WriteLine($"Processing page {e.PagesComplete}/{e.TotalPages} - {e.ProgressPercent}%") End Sub End Sub Public Async Function ProcessPdfWithErrorHandling(pdfPath As String) As Task(Of OcrResult) Try Dim input As New OcrInput() ' Check file size for large documents Dim fileInfo As New FileInfo(pdfPath) If fileInfo.Length > 100_000_000 Then ' 100MB ' Use lower DPI for large files input.TargetDPI = 150 End If input.LoadPdf(pdfPath) ' Apply filters based on document quality assessment If RequiresPreprocessing(input) Then input.DeNoise() input.Deskew() input.EnhanceResolution(300) End If ' Process with timeout protection Using cts As New Threading.CancellationTokenSource(TimeSpan.FromMinutes(5)) Return Await _ocr.ReadAsync(input, cts.Token) End Using Catch ex As Exception ' Log and handle specific exceptions Throw New ApplicationException($"OCR processing failed: {ex.Message}", ex) End Try End Function Private Function RequiresPreprocessing(input As OcrInput) As Boolean ' Implement quality assessment logic Return True End Function End Class $vbLabelText $csharpLabel このパターンでは、IronOCR の非同期機能と進捗状況の追跡によって、大規模なドキュメントを処理し、ユーザー フィードバックを提供し、適切なタイムアウト処理を実装する信頼性の高い運用システムを構築する方法を説明します。 詳細な設定オプションにより、特定のドキュメント タイプを微調整できます。 特殊なドキュメントの場合、IronOCR は専用のメソッドを提供します。 // Process different document types with optimized settings var ocr = new IronTesseract(); // For license plates var licensePlateResult = ocr.ReadLicensePlate("car-photo.jpg"); Console.WriteLine($"License Plate: {licensePlateResult.Text}"); // For passports with MRZ var passportResult = ocr.ReadPassport("passport-scan.pdf"); Console.WriteLine($"Passport Number: {passportResult.PassportNumber}"); Console.WriteLine($"Name: {passportResult.GivenNames} {passportResult.Surname}"); // For handwritten text var handwritingResult = ocr.ReadHandwriting("handwritten-note.png"); Console.WriteLine($"Handwriting: {handwritingResult.Text}"); // For MICR cheques var chequeResult = ocr.ReadMicrCheque("cheque-image.tiff"); Console.WriteLine($"Account: {chequeResult.AccountNumber}"); Console.WriteLine($"Routing: {chequeResult.RoutingNumber}"); // Process different document types with optimized settings var ocr = new IronTesseract(); // For license plates var licensePlateResult = ocr.ReadLicensePlate("car-photo.jpg"); Console.WriteLine($"License Plate: {licensePlateResult.Text}"); // For passports with MRZ var passportResult = ocr.ReadPassport("passport-scan.pdf"); Console.WriteLine($"Passport Number: {passportResult.PassportNumber}"); Console.WriteLine($"Name: {passportResult.GivenNames} {passportResult.Surname}"); // For handwritten text var handwritingResult = ocr.ReadHandwriting("handwritten-note.png"); Console.WriteLine($"Handwriting: {handwritingResult.Text}"); // For MICR cheques var chequeResult = ocr.ReadMicrCheque("cheque-image.tiff"); Console.WriteLine($"Account: {chequeResult.AccountNumber}"); Console.WriteLine($"Routing: {chequeResult.RoutingNumber}"); ' Process different document types with optimized settings Dim ocr = New IronTesseract() ' For license plates Dim licensePlateResult = ocr.ReadLicensePlate("car-photo.jpg") Console.WriteLine($"License Plate: {licensePlateResult.Text}") ' For passports with MRZ Dim passportResult = ocr.ReadPassport("passport-scan.pdf") Console.WriteLine($"Passport Number: {passportResult.PassportNumber}") Console.WriteLine($"Name: {passportResult.GivenNames} {passportResult.Surname}") ' For handwritten text Dim handwritingResult = ocr.ReadHandwriting("handwritten-note.png") Console.WriteLine($"Handwriting: {handwritingResult.Text}") ' For MICR cheques Dim chequeResult = ocr.ReadMicrCheque("cheque-image.tiff") Console.WriteLine($"Account: {chequeResult.AccountNumber}") Console.WriteLine($"Routing: {chequeResult.RoutingNumber}") $vbLabelText $csharpLabel これらの特殊な方法では、機械学習モデルと特定のドキュメント タイプに最適化された構成が使用され、一般的な OCR アプローチよりも高い精度が実現されます。 ナンバープレート認識はさまざまな国際形式に対応し、パスポート読み取りでは MRZ データを自動的に抽出します。 手書き認識は英語テキストで約 90% の精度を実現し、 MICR 小切手処理は銀行文書を効率的に処理します。 開発者はどのソリューションを選択すべきですか? TesseractとIronOCRのどちらを選択するかは、特定のプロジェクトの要件と制約によって決まります。 Tesseractをお選びください: 予算の制約により無料のソリューションが必要 画像ファイルのみを扱う プロジェクトタイムラインによりセットアップのトラブルシューティングが可能 カスタムOCRエンジンのトレーニングが必要です チームはC++相互運用性の経験がある カスタム辞書が必要です IronOCRをお選びください: PDFファイルとスキャンした文書が主な入力フォーマットです。 開発時間とコードの簡素化が優先されます。 Azure、Docker、Linuxへのクロスプラットフォーム展開が必要です。 組み込みの前処理機能により、実際のスキャンでの精度が向上します。 商用サポート、ドキュメント、定期的な更新が価値を提供します。 プロジェクトでは、複数言語サポートやパスワードで保護されたPDFハンドリングなどの機能が必要です。 スキャンした紙文書から検索可能なPDF出力を作成する必要があります。 どちらのソリューションも、光学文字認識の中核として Tesseract の OCR エンジンを使用しています。 ただし、IronOCR はネイティブ .NET 統合、組み込みの前処理フィルター、および直接 PDF サポートによって機能を拡張し、開発者が運用 .NET アプリケーションで OCR を実装する際に遭遇する一般的な問題点に対処します。 ライセンス モデルには、使用要件に基づいたアップグレードおよび拡張のオプションが含まれています。 IronOCRとIronBarcode の両方を評価しているチームにとって、統合された機能により、単一のソリューションで完全なドキュメント処理機能が提供されます。 .NET 開発者にとっての肝心なことは何でしょうか? 無料トライアルを開始してIronOCRを特定のPDF文書で評価するか、ライセンスオプションを確認して本番展開を行ってください。 BRACKET-i-OPEN--Googleは各所有者の登録商標です。 このサイトは、Google と提携しているわけでも、Google が推奨しているわけでも、Google がスポンサーしているわけでもありません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。 よくある質問 PDFテキスト抽出にTesseract OCRを使用する際の主な課題は何ですか? Tesseract OCRは、PDFの様々な機能へのサポートが限られているため、PDFコンテンツの処理に課題があることが多く、テキスト抽出の精度と効率に影響を与える可能性があります。 IronOCRはPDFからのテキスト抽出をどのように改善しますか? IronOCRはPDFをテキストに変換するための高度な機能を提供し、複雑な文書構造をより良くサポートし、OCRの精度とパフォーマンスを向上させる機能を統合しています。 なぜ開発者は.NETアプリケーションにTesseract OCRではなくIronOCRを選ぶのですか? 開発者はIronOCRを.NETアプリケーションへの統合のしやすさ、様々なPDF要素のロバストな処理、Tesseract OCRの能力を凌駕する信頼性の高いテキスト抽出結果から選択することが多い。 IronOCRはスキャン文書を効果的に処理できますか? IronOcrはスキャンされたドキュメントを効率的に処理し、高い精度で編集・検索可能なテキストに変換するように設計されています。 IronOCRはデータ入力ワークフローの自動化に適していますか? IronOCRはPDFから素早く正確にデータを抽出できるため、データ入力ワークフローの自動化に適しており、手作業による入力を減らし、効率を高めます。 IronOCRを使用するとどのようなPDF文書に最も効果がありますか? 請求書、契約書、スキャンした紙の記録などの文書は、IronOCRの高度なテキスト抽出機能によって大きな恩恵を受け、簡単にデジタルフォーマットに変換することができます。 IronOCR は Tesseract OCR のようなオープンソースのソリューションと比較してどうですか? Tesseract OCRは人気のあるオープンソースのソリューションですが、IronOCRはより高い精度、より優れたPDF処理、C#や.NETとのシームレスな統合といった強化された機能を提供し、多くの開発者に選ばれています。 IronOCRはどのようなプログラミング環境に対応していますか? IronOCRはC#と.NET環境と完全に互換性があり、これらのフレームワークで作業する開発者にとって多用途で強力なツールとなります。 IronOCRは検索可能なPDFをサポートしていますか? IronOCRはスキャンしたPDFを検索可能な文書に変換することができます。 PDFテキスト抽出にIronOCRを使用する主な利点は何ですか? IronOCRを使用する主な利点は、複雑なPDF文書から正確にテキストを抽出し、テキスト変換プロセスを簡素化する信頼性の高い結果を提供できることです。 Kannapat Udonpant 今すぐエンジニアリングチームとチャット ソフトウェアエンジニア ソフトウェアエンジニアになる前に、Kannapatは北海道大学で環境資源の博士号を修了しました。博士号を追求する間に、彼はバイオプロダクションエンジニアリング学科の一部である車両ロボティクスラボラトリーのメンバーになりました。2022年には、C#のスキルを活用してIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。Kannapatは、IronPDFの多くのコードを執筆している開発者から直接学んでいるため、この仕事を大切にしています。同僚から学びながら、Iron Softwareでの働く社会的側面も楽しんでいます。コードやドキュメントを書いていない時は、KannapatはPS5でゲームをしたり、『The Last of Us』を再視聴したりしていることが多いです。 関連する記事 更新日 2026年1月5日 Windows 10用ベストOCRソフトウェア:完全比較ガイド [2025] Windows 10に最適なOCRソフトウェアについては、こちらをご覧ください。 詳しく読む 更新日 2026年1月5日 Tesseract C# vs IronOCRの使用: .NETでのOCR実装の完全ガイド 光学式文字認識のためのTesseract C#とIronOCRの効率的な使い方を学びます。 詳しく読む 更新日 2026年1月5日 IronOCR vs Azure OCR PDF:どちらのソリューションがよりよくテキストを抽出するか? Azure OCR PDFの機能をIronOCR for .NETと比較してください。コード例、価格、テキストを抽出して検索可能なPDFを作成するための機能をご覧ください。 詳しく読む Windows 10用ベストOCRソフトウェア:完全比較ガイド [2025]Tesseract C# vs IronOCRの使用:...
更新日 2026年1月5日 Tesseract C# vs IronOCRの使用: .NETでのOCR実装の完全ガイド 光学式文字認識のためのTesseract C#とIronOCRの効率的な使い方を学びます。 詳しく読む
更新日 2026年1月5日 IronOCR vs Azure OCR PDF:どちらのソリューションがよりよくテキストを抽出するか? Azure OCR PDFの機能をIronOCR for .NETと比較してください。コード例、価格、テキストを抽出して検索可能なPDFを作成するための機能をご覧ください。 詳しく読む