Falsche Zeilenumbrüche in einem Windows Forms TextBox
Der mit IronOCR extrahierte OCR-Text kann seine Zeilenumbrüche verlieren, wenn er in einem Windows Forms TextBox angezeigt wird, und auf weniger Zeilen als im Originalbild zusammenbrechen.
Die Ursache ist eine Diskrepanz bei Zeilenumbrüchen. IronOCR gibt Zeilenumbrüche als einfachen Zeilenvorschub (\n) zurück, aber ein Windows Forms TextBox rendert einen Umbruch nur, wenn es einen Wagenrücklauf gefolgt von einem Zeilenvorschub (\r\n) sieht. Ohne den Wagenrücklauf ignoriert das Steuerelement den Umbruch.
Die OCR wird anhand eines Quellbildes wie dem unten ausgeführt:

Die Bindung des Roh-OCR-Ergebnisses direkt an das Steuerelement lässt den Text auf ein paar Zeilen zusammenbrechen, anstatt das ursprüngliche Layout beizubehalten:

Lösung
1. Verwenden Sie AdvancedScan im 64-Bit-Modus
Installieren Sie das IronOcr.Extensions.AdvancedScan-Paket für eine verlässlichere Extraktion und führen Sie die Anwendung im 64-Bit-Modus aus, um Kompatibilitätsprobleme zu vermeiden.
<PackageReference Include="IronOcr.Extensions.AdvancedScan" />
<PackageReference Include="IronOcr.Extensions.AdvancedScan" />
2. Normalisieren Sie die Zeilenenden
Ersetzen Sie jedes \n im Ergebnis durch \r\n, bevor Sie den Text dem Steuerelement zuweisen.
ocr.Language = OcrLanguage.ChineseSimplifiedBest;
using (var ocrInput = new OcrInput())
{
ocrInput.LoadImage(txtPath.Text);
ocrInput.Deskew();
var result = ocr.ReadScreenShot(ocrInput);
// Replace line feed with carriage return and line feed
string ocrText = result.Text.Replace("\n", "\r\n");
// Display the corrected text in a TextBox
textBox1.Text = ocrText;
}
ocr.Language = OcrLanguage.ChineseSimplifiedBest;
using (var ocrInput = new OcrInput())
{
ocrInput.LoadImage(txtPath.Text);
ocrInput.Deskew();
var result = ocr.ReadScreenShot(ocrInput);
// Replace line feed with carriage return and line feed
string ocrText = result.Text.Replace("\n", "\r\n");
// Display the corrected text in a TextBox
textBox1.Text = ocrText;
}
Imports System
ocr.Language = OcrLanguage.ChineseSimplifiedBest
Using ocrInput As New OcrInput()
ocrInput.LoadImage(txtPath.Text)
ocrInput.Deskew()
Dim result = ocr.ReadScreenShot(ocrInput)
' Replace line feed with carriage return and line feed
Dim ocrText As String = result.Text.Replace(vbLf, vbCrLf)
' Display the corrected text in a TextBox
textBox1.Text = ocrText
End Using
Der Replace("\n", "\r\n")-Aufruf schreibt jeden Zeilenvorschub in das Wagenrücklauf/Zeilenvorschub-Paar um, das die TextBox erwartet, damit der angezeigte Text die gleiche Zeilenstruktur wie das ursprüngliche Bild beibehält.
3. Überprüfen Sie die Ausgabe
Führen Sie die Extraktion erneut durch und vergleichen Sie die TextBox-Inhalte mit dem Quellbild. Die Umbrüche sollten jetzt mit dem ursprünglichen Layout übereinstimmen.


