Zawieszone procesy ładujące formularze PDF na Linux
Na Linux (na przykład Debian z .NET 8), OcrInput.LoadPdf() może zawiesić się bez końca podczas ładowania niektórych plików PDF, które zawierają interaktywne pola formularzy. Żądanie nigdy nie zwraca odpowiedzi i proces staje.
Process hangs at OcrInput.LoadPdf() and never proceeds.
Warstwa interaktywnego formularza w niektórych PDF jest wyzwalaczem. Plik ten samodzielnie ładowany jest poprawnie na Windows, a inne formularze PDF mogą również zostać załadowane poprawnie na Linux, co sprawia, że problem jest niekonsekwentny i trudny do uchwycenia, zanim pojawi się w produkcji.
Rozwiązanie
Spłasz PDF przed przekazaniem go do IronOCR. Spłaszczenie konwertuje każde pole formularza do statycznej zawartości strony, usuwając interaktywną warstwę odpowiedzialną za wieszanie.
1. Spłaszcz PDF za pomocą IronPDF
Załaduj plik źródłowy, spłaszcz go i zapisz statyczną kopię:
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() usuwna interaktywne pola formularzy, pozostawiając pusty dokument, który IronOCR może otworzyć bez zawieszania się.
2. Uruchom OCR na spłaszczonym pliku
Skieruj LoadPdf() na spłaszczoną kopię, a następnie odczytaj jak zwykle:
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
Oprócz zapobiegania zawieszaniu, spłaszczenie zapewnia spójne zachowanie na różnych platformach, usuwa interaktywne elementy, których OCR nie potrzebuje, i redukuje złożoność pliku, przyspieszając jego przetwarzanie.

