LinuxでのPDFフォームのロード中のプロセス停止
Linux(例えば、.NET 8 のDebian)では、インタラクティブなフォームフィールドを含む特定のPDFファイルを読み込むときに、OcrInput.LoadPdf() が無限にフリーズすることがあります。 呼び出しが返らず、プロセスが停滞します。
Process hangs at OcrInput.LoadPdf() and never proceeds.
一部のPDFにはインタラクティブフォームレイヤーがトリガーになります。 同じファイルはWindowsでは正常にロードされ、他のフォームPDFはLinuxでも正常にロードされる可能性があるため、問題は一貫性がなく、運用環境に現れる前に検出しにくいです。
解決策
PDFをIronOCRに渡す前にフラット化してください。 フラット化は、インタラクティブフォームフィールドを静的ページコンテンツに変換し、停止を引き起こすインタラクティブレイヤーを取り除きます。
1. IronPDFでPDFをフラット化する
ソースファイルをロードし、フラット化して静的コピーを保存します:
using IronPdf;
var pdf = PdfDocument.FromFile("ocrpdfform.pdf");
pdf.Flatten();
pdf.SaveAs("flattened_ocrpdfform.pdf");
using IronPdf;
var pdf = PdfDocument.FromFile("ocrpdfform.pdf");
pdf.Flatten();
pdf.SaveAs("flattened_ocrpdfform.pdf");
Imports IronPdf
Dim pdf = PdfDocument.FromFile("ocrpdfform.pdf")
pdf.Flatten()
pdf.SaveAs("flattened_ocrpdfform.pdf")
Flatten() はインタラクティブなフォームフィールドを削除し、IronOCRが停止せずに開けるプレーンドキュメントを残します。
2. フラット化されたファイル上でOCRを実行する
平坦化されたコピーにLoadPdf()を向け、その後通常通りに読み取ります:
using var ocrInput = new OcrInput();
ocrInput.LoadPdf("flattened_ocrpdfform.pdf"); // No longer stuck
var ocr = new IronTesseract();
var result = ocr.Read(ocrInput);
Console.WriteLine(result.Text);
using var ocrInput = new OcrInput();
ocrInput.LoadPdf("flattened_ocrpdfform.pdf"); // No longer stuck
var ocr = new IronTesseract();
var result = ocr.Read(ocrInput);
Console.WriteLine(result.Text);
Imports IronTesseract
Using ocrInput As New OcrInput()
ocrInput.LoadPdf("flattened_ocrpdfform.pdf") ' No longer stuck
Dim ocr As New IronTesseract()
Dim result = ocr.Read(ocrInput)
Console.WriteLine(result.Text)
End Using
停止を防ぐ以外にも、フラット化はプラットフォーム全体で一貫した動作を提供し、OCRが必要としないインタラクティブ要素を削減し、処理を高速化するためのファイルの複雑さを減少させます。

