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");Imports IronPdf
Dim 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);Using ocrInput = New OcrInput()
ocrInput.LoadPdf("flattened_ocrpdfform.pdf") ' No longer stuck
Dim ocr = New IronTesseract()
Dim result = ocr.Read(ocrInput)
Console.WriteLine(result.Text)
End UsingUsing ocrInput = New OcrInput()
ocrInput.LoadPdf("flattened_ocrpdfform.pdf") ' No longer stuck
Dim ocr = New IronTesseract()
Dim result = ocr.Read(ocrInput)
Console.WriteLine(result.Text)
End UsingOpró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.
Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.