Retours à la ligne incorrects dans un TextBox de Windows Forms
Le texte OCR extrait avec IronOCR peut perdre ses retours à la ligne lorsqu'il est affiché dans un TextBox de Windows Forms, se contractant sur moins de lignes que l'image source.
La cause est un désaccord de nouvelle ligne. IronOCR renvoie des retours à la ligne sous forme de saut de ligne nu (\n), mais un TextBox de Windows Forms ne rend un retour que lorsqu'il voit un retour chariot suivi d'un saut de ligne (\r\n). Sans le retour chariot, le contrôle ignore le saut.
L'OCR se fait sur une image source comme celle ci-dessous :

Liaison du résultat brut de l'OCR directement au contrôle contracte le texte sur quelques lignes au lieu de préserver la disposition originale :

Solution
1. Utiliser AdvancedScan en mode 64 bits
Installez le paquet IronOcr.Extensions.AdvancedScan pour une extraction plus fiable, et exécutez l'application en mode 64 bits pour éviter les problèmes de compatibilité.
<PackageReference Include="IronOcr.Extensions.AdvancedScan" />
<PackageReference Include="IronOcr.Extensions.AdvancedScan" />
2. Normaliser les fins de ligne
Remplacez chaque \n dans le résultat par \r\n avant d'assigner le texte au contrôle.
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
L'appel Replace("\n", "\r\n") réécrit chaque saut de ligne en la paire retour chariot/saut de ligne que TextBox attend, donc le texte affiché conserve la même structure de ligne que l'image originale.
3. Vérifier la sortie
Exécutez à nouveau l'extraction et comparez le contenu TextBox avec l'image source. Les coups doivent maintenant correspondre à la disposition originale.


