2008-08-25 6 views
4

Nous recevons une grande quantité de données de nos clients dans des fichiers pdf dans différents formats [mise en page], ces fichiers sont généralement des rapports de sortie, et sont généralement correctement annotés [ils n'ont généralement pas besoin d'OCR] assez que copier simplement plusieurs centaines de pages de texte sur Acrobat ne va pas fonctionner. La meilleure approche que j'ai trouvée jusqu'ici est d'écrire un script pour analyser la sortie xml presque valide (les commentaires sont invalides et beaucoup de caractères sont échappés de différentes manières, é devient [[[e9]]] é , $ devient \ $,% devient \% ...) de l'utilitaire de ligne de commande pdftoipe (pour convertir des fichiers pdf pour un programme appelé ipe), qui me donne des éléments de texte avec leurs positions sur chaque page [voir l'exemple ci-dessous], Cela fonctionne assez bien pour les rapports où les mêmes valeurs sont au même endroit sur chaque page qui m'intéresse, mais cela nécessiterait un effort de script supplémentaire pour l'importation de fichiers pdf [tableau croisé] matriciel. pdftoipe n'est pas du tout prévu pour cela, et au mieux, peut être compilé manuellement en utilisant cygwin pour Windows.Quelle est la meilleure façon d'importer/lire des données à partir de fichiers pdf?

Y at-il des bibliothèques qui facilitent cela à partir d'un langage de script que je peux tolérer? Un outil graphique serait génial aussi. Et un poney.

sortie pdftoipe de this sample ressemble à ceci:

<ipe creator="pdftoipe 2006/10/09"><info media="0 0 612 792"/> 
<-- Page: 1 1 --> 
<page gridsize="8"> 
<path fill="1 1 1" fillrule="wind"> 
64.8 144 m 
486 144 l 
486 727.2 l 
64.8 727.2 l 
64.8 144 l 
h 
</path> 
<path fill="1 1 1" fillrule="wind"> 
64.8 144 m 
486 144 l 
486 727.2 l 
64.8 727.2 l 
64.8 144 l 
h 
</path> 
<path fill="1 1 1" fillrule="wind"> 
64.8 144 m 
486 144 l 
486 727.2 l 
64.8 727.2 l 
64.8 144 l 
h 
</path> 
<text stroke="1 0 0" pos="0 0" size="18" transformable="yes" matrix="1 0 0 1 181.8 707.88">This is a sample PDF fil</text> 
<text stroke="1 0 0" pos="0 0" size="18" transformable="yes" matrix="1 0 0 1 356.28 707.88">e.</text> 
<text stroke="1 0 0" pos="0 0" size="18" transformable="yes" matrix="1 0 0 1 368.76 707.88"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 692.4"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 677.88"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 663.36"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 648.84"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 634.32"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 619.8"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 605.28"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 590.76"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 576.24"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 561.72"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 547.2"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 532.68"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 518.16"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 503.64"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 489.12"> </text> 
<text stroke="0 0 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 67.32 474.6"> </text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 67.32 456.24">If you can read this</text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 214.92 456.24">,</text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 219.48 456.24"> you already have A</text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 370.8 456.24">dobe Acrobat </text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 67.32 437.64">Reader i</text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 131.28 437.64">n</text> 
<text stroke="0 0 1" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 141.12 437.64">stalled on your computer.</text> 
<text stroke="0 0 0" pos="0 0" size="16.2" transformable="yes" matrix="1 0 0 1 337.92 437.64"> </text> 
<text stroke="0 0.502 0" pos="0 0" size="12.6" transformable="yes" matrix="1 0 0 1 342.48 437.64"> </text> 
<image width="800" height="600" rect="-92.04 800.64 374.4 449.76" ColorSpace="DeviceRGB" BitsPerComponent="8" Filter="DCTDecode" length="369925"> 
feedcafebabe... 
</image> 
</page> 
</ipe> 

Répondre

3

Nous utilisons Xpdf dans l'une de nos applications. C'est une librairie C++ qui est principalement utilisée pour le rendu pdf, même si elle possède un extracteur de texte qui pourrait être utile pour ce projet.

+0

pdftoipe est basé sur le code Xpdf. Malheureusement, c'est la meilleure réponse à ce jour: modifiez Xpdf moi-même pour répondre à mes besoins. – sphereinabox

0

Avez-vous regardé Aspose? Nous l'utilisons pour une application ASP.net et j'ai vu quelques exemples de vbscript l'utilisant aussi. Ce n'est pas particulièrement cher non plus.

http://www.aspose.com/

+0

Je ne crois pas que ce soit ce que je cherche. Aspose.Pdf.Kit semble être sortie seulement. Peux-tu être plus précis? – sphereinabox

1

Si vous ne pouvez pas appeler quelque chose d'externe, vous pouvez utiliser ghostscript - regardez le script ps2ascii inclus avec la distribution. Je ne suis pas sûr de ce que vous voulez d'un outil graphique - un gros bouton que vous appuyez pour choisir les fichiers d'entrée et de sortie? Un aperçu? Vous pourriez être en mesure d'utiliser GSView, en fonction de ce que vous voulez.

1

pdftohtml -xml

bien pdftoipe semble plus détaillée !!

Questions connexes