Très simplement, je dois extraire le texte de plusieurs PDF (beaucoup en fait) pour analyser le contenu avant de le coller dans une base de données SQL.
J'ai trouvé quelques bibliothèques assez rares et gratuites en C # qui fonctionnent (la meilleure utilise iTextSharp), mais il y a énormément d'erreurs de formatage et certains caractères sont brouillés et il y a souvent des espaces ('') PARTOUT - à l'intérieur des mots, entre chaque lettre, d'énormes blocs prenant plusieurs lignes, tout semble un peu aléatoire.
Existe-t-il un moyen facile de le faire que j'ignore complètement (assez probablement!) Ou s'agit-il d'une tâche ardue qui implique de convertir les valeurs d'octet extraites en lettres de manière fiable?
Vous pouvez jeter un oeil à cet article . Il est basé sur l'excellent iTextSharp library.
Il peut y avoir quelques difficultés à le faire de manière fiable. Le problème est que PDF est un format presentation qui attache de l'importance à une bonne typographie. Supposons que vous vouliez simplement sortir un seul mot: Tapez sur .
Un moteur de rendu PDF peut générer 2 appels distincts, comme indiqué dans ce pseudo-code:
moveto (x1, y); output ("T")
moveto (x2, y); output ("ap")
Ceci est possible car le kerning (espacement inter-lettres) par défaut entre les lettres T et un peut ne pas être acceptable pour le moteur de rendu, ou bien il peut être nécessaire d'ajouter ou de supprimer un micro-espace entre les caractères ligne entièrement justifiée. Cela aboutit finalement au fait que les fragments de texte trouvés dans PDF ne sont très souvent pas des mots entiers, mais des morceaux de ceux-ci.
Jetez un coup d’œil à Tika sur DotNet, disponible via Nuget: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/
C’est un wrapper autour de la très bonne bibliothèque Java Tika, utilisant IKVM. Très facile à utiliser, il gère une grande variété de types de fichiers autres que les fichiers PDF, y compris les anciens et les nouveaux formats de bureau. Il sélectionnera automatiquement l'analyseur en fonction de l'extension de fichier, de sorte que c'est aussi simple que:
var text = new TextExtractor().Extract(file.FullName).Text;
Mise à jour: Un inconvénient de cette solution est que le développement sur IKVM est terminé. Je ne suis pas sûr de ce que cela signifiera à long terme. http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx
Vous pouvez essayer Toxy, un framework d’extraction de texte/données dans .NET. Dans Toxy 1.0, PDF sera pris en charge. Pour plus de détails, veuillez visiter http://toxy.codeplex.com
Vous pouvez essayer Bibliothèque Docotic.Pdf (disclaimer: je travaille pour Bit Miracle) pour extraire le texte de fichiers PDF. La bibliothèque utilise des méthodes heuristiques pour extraire du texte de belle apparence sans espaces non désirés entre les lettres.
Veuillez regarder un exemple qui montre comment extraire du texte de PDF .
Si vous traitez PDF fichiers dans le but d’importer des données dans une base de données, nous vous conseillons d’envisager ByteScout PDF Extractor SDK . Certaines fonctions utiles incluses sont
AVERTISSEMENT: je suis affilié à ByteScout