Est-il possible de combiner une série de fichiers PDF en un seul à l'aide de Ruby?

StackOverflow https://stackoverflow.com/questions/85459

  •  01-07-2019
  •  | 
  •  

Question

J'ai une série de PDF nommés de manière séquentielle, comme suit:

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.pdf
  • etc.

À l'aide de Ruby, est-il possible de les combiner en un grand PDF tout en les maintenant dans l'ordre? Cela ne me dérange pas d'installer des gemmes nécessaires pour faire le travail.

Si cela n’est pas possible en Ruby, qu’en est-il d’une autre langue? Pas de composants commerciaux, si possible.

Mise à jour: La suggestion de Jason Navarrete conduit à la solution idéale:

Placez les fichiers PDF devant être combinés dans un répertoire avec pdftk (ou assurez-vous pdftk est dans votre PATH), puis exécutez le script suivant:

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ")
`pdftk #{pdfs} output combined.pdf`

Ou je pourrais même le faire en une ligne depuis la ligne de commande:

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`'

Excellente suggestion Jason, solution parfaite, merci. Donnez-lui un vote positif .

Était-ce utile?

La solution

Un message Ruby-Talk suggère d'utiliser pdftk trousse à outils pour fusionner les fichiers PDF.

Il devrait être relativement simple d'appeler pdftk en tant que processus externe et de le laisser gérer la fusion. PDF :: Writer est peut-être excessif, car tout ce que vous cherchez à accomplir est un simple ajout.

Autres conseils

Vous pouvez le faire en convertissant au format PostScript et vice-versa. Les fichiers PostScript peuvent être concaténés de manière triviale. Par exemple, voici un script Bash qui utilise les outils Ghostscript ps2pdf et pdf2ps:

#!/bin/bash
for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; do
    pdf2ps $file - >> temp.ps
done

ps2pdf temp.ps output.pdf
rm temp.ps

Je ne connais pas bien Ruby, mais il y a presque certainement une fonction (qui peut s'appeler system() (une supposition)) qui invoquera une ligne de commande donnée.

Si vous avez ghostscript sur votre plate-forme, lancez un shell et exécutez cette commande:

gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = fini.pdf & Vos fichiers sources PDF >

J'ai essayé la solution pdftk et des problèmes à la fois avec SnowLeopard et Tiger. L’installation sur Tiger a réellement causé des ravages sur mon système et ne m'a pas permis d’exécuter de script / serveur. Heureusement, il s'agit d'une & # 8217; machine retirée du développement Web.

Par la suite trouvé une autre option: - joinPDF. Était une installation absolument indolore et rapide et cela fonctionne parfaitement.

Également essayé GhostScript et il a échoué lamentablement (je ne pouvais pas lire les polices et je me suis retrouvé avec des PDF contenant uniquement des images).

Mais si vous & # 8217; recherchez une solution à ce problème, vous pouvez essayer de rejoindre joinPDF.

Je ne pense pas que Ruby ait des outils pour ça. Vous pouvez vérifier ImageMagick et Cairo. ImageMagick peut être utilisé pour relier plusieurs images / documents ensemble, mais je ne suis pas sûr du format PDF.

Là encore, il existe sûrement des outils Windows (commerciaux) pour faire ce genre de chose.

J'utilise moi-même Cairo pour générer des PDF. Si les PDF viennent de vous, peut-être que ce serait une solution (cela prend en charge plusieurs pages). Bonne chance!

Je suggérerais de consulter le code de PDFCreator (VB, si je ne me trompe pas, mais cela ne devrait pas avoir d'importance puisque vous implémenteriez un code similaire dans un autre langage), qui utilise GhostScript (licence GNU). . Ou tout simplement creuser directement dans GhostScript lui-même; Il existe également une couche de façade appelée GhostPDF, qui peut faire ce que vous voulez.

Si vous pouvez contrôler GhostScript avec VB, vous pouvez le faire avec C, ce qui signifie que vous pouvez le faire avec Ruby.

Ruby a également IO.popen, ce qui vous permet d’appeler des programmes externes capables de le faire.

Tout code Ruby permettant de faire cela dans une application réelle va probablement être terriblement lent. Je voudrais essayer de traquer les outils Unix pour faire le travail. C’est l’un des avantages de l’utilisation de Mac OS X: ses fonctionnalités PDF très rapides sont intégrées. La prochaine meilleure chose est probablement un outil Unix.

En fait, j'ai eu un certain succès avec rtex. Si vous regardez ici , vous trouverez quelques informations à ce sujet. C’est beaucoup plus rapide que toutes les bibliothèques Ruby que j’ai utilisées et je suis presque certaine que latex possède une fonction permettant d’importer des données PDF à partir d’autres sources.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top