web-dev-qa-db-fra.com

Ruby: Lecture PDF des dossiers

Je recherche un moyen rapide et fiable de lire/analyser des fichiers PDF volumineux en Ruby (sous Linux et OSX). 

Jusqu'à présent, j'ai trouvé le fichier assez ancien et simple PDF-toolkit (a ​​ pdftotext - wrapper) et PDF-reader , qui était incapable de lire la plupart de mes fichiers. Bien que les deux bibliothèques fournissent exactement les fonctionnalités que je recherchais.

Ma question: est-ce que j'ai raté quelque chose? Existe-t-il un outil mieux adapté (plus rapide et plus fiable) pour résoudre mon problème?

33
Javier

Vous pourriez trouver Docsplit utile: 

Docsplit est un utilitaire de ligne de commande et une bibliothèque Ruby permettant de scinder des documents en plusieurs éléments: texte brut UTF-8 interrogeable, images de page ou vignettes dans n’importe quel format, PDF, pages uniques et métadonnées de document (titre, auteur, nombre de pages). ...)

24
pw.

Après avoir essayé différentes méthodes, j'utilise PDF-Toolkit now. C'est assez vieux, mais c'est rapide, stable et fiable. En outre, il n’est vraiment pas nécessaire qu’elle soit nouvelle, car elle enveloppe simplement les utilitaires de ligne de commande xpdf .

2
Javier

Vous pouvez utiliser JRuby et un analyseur de bibliothèque Java PDF tel que ApachePDFBox ( https://www.ohloh.net/p/pdfbox ). Voir aussi http://Java-source.net/open-source/pdf-libraries .

1
insane.dreamer

Avez-vous consulté la bibliothèque CombinePDF ?

C'est une solution Ruby pure qui permet certaines manipulations PDF, telles que l'extraction de pages, la superposition d'une page PDF sur une autre, la numérotation de page, la rédaction de texte et de tableaux de base, etc. '.

Voici un exemple pour agrafer un fichier PDF existant avec un logo. L'exemple lit un fichier PDF, extrait une page à utiliser comme tampon et tamponne un autre fichier PDF.

require 'combine_pdf'
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf = CombinePDF.load "content_file.pdf"
pdf.pages.each {|page| page << company_logo}
pdf.save "content_with_logo.pdf"

Vous pouvez également apposer du texte, numéroter des pages ou utiliser:

require 'combine_pdf'

pdf = CombinePDF.load "content_file.pdf"

pdf.number_pages #adds page numbers. you can add formatting and placement options.

pdf.pages.each {|page| page.textbox "One Way To Stamp"}

#you can a shortcut method to stamp pages
pdf.stamp_pages "Another way to stamp"

#you can use the shortcut method for both text and PDF stamps
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf.stamp_pages company_logo

# you can use write simple tables
pdf.pages[0].write_table headers: ['first name', 'surname'], table_data: [['John', 'Doe'], ['Mr.', 'Smith']]

pdf.save "content_with_logo.pdf"

Il n'est pas destiné aux opérations complexes, mais il complète la plupart des bibliothèques de création PDF et vous permet d'utiliser des modèles PDF au lieu d'écrire le tout à partir de zéro.

0
Myst

Voici quelques options:

http://en.wikipedia.org/wiki/List_of_PDF_software

À partir de ce lien et de la recherche sur sourceforge, il existe deux utilitaires de ligne de commande qui peuvent faire ce que vous voulez, comme celui-ci: http://pdftohtml.sourceforge.net/

En fonction de vos besoins et de l'apparence des fichiers PDF, vous pouvez utiliser l'API Google Docs (télécharger le fichier PDF, puis le télécharger en tant que texte), ou essayer également le type gocr . J'ai eu beaucoup de chance en analysant le texte d'une image avec gocr par le passé, et il vous suffirait de faire appel à Shell pour le faire, comme gocr -i whatever.pdf (je pense que cela fonctionne avec les fichiers PDF).

L'inconvénient de toutes ces solutions est qu'elles ne sont pas des implémentations purement Ruby, mais bon nombre des bons (et gratuits) projets d'OCR semblent se dérouler de cette manière.

0
Terry

Si vous avez juste besoin d'extraire le contenu textuel d'un fichier pdf, pdftohtml sur sourceforge est efficace. Il n'est pas adapté au traitement des images.

0
Alexis Perrier