2008-09-17 7 views
10

Ich habe eine Reihe von PDF-Dateien nacheinander wie so genannt:Ist es möglich, eine Reihe von PDFs zu einer mit Ruby zu kombinieren?

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

Rubin verwenden, ist es möglich, diese in einem großen PDF zu kombinieren, während sie in der Reihenfolge bleiben? Es macht mir nichts aus, irgendwelche notwendigen Juwelen zu installieren.

Wenn dies in Ruby nicht möglich ist, wie wäre es mit einer anderen Sprache? Keine kommerziellen Komponenten, wenn möglich.


Update:Jason Navarrete's suggestion führen zur perfekten Lösung:

Legen Sie die PDF-Dateien benötigen zusammen mit pdftk in einem Verzeichnis zusammengefasst werden (oder stellen Sie sicher, pdftk in Ihrer PATH ist), dann laufen die folgende Skript:

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

Oder ich könnte es auch von der Kommandozeile als Einzeiler tun:

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

Super Vorschlag Jason, perfekte Lösung, danke. Geben Sie ihm eine Stimme.

Antwort

14

Eine Ruby-Talk Post schlägt vor, mit dem pdftk Toolkit die PDFs zusammenzuführen.

Es sollte relativ einfach sein, pdftk als einen externen Prozess zu nennen und es die Verschmelzung zu behandeln. PDF :: Writer kann übertrieben sein, weil alles, was Sie erreichen möchten, ein einfacher Append ist.

+0

Danke, ich war noch nie zuvor auf pdftk gestoßen. Was für ein großartiges Werkzeug! –

0

Ich glaube nicht, dass Ruby Werkzeuge dafür hat. Sie können ImageMagick und Kairo überprüfen. ImageMagick kann verwendet werden, um mehrere Bilder/Dokumente miteinander zu verbinden, aber ich bin mir nicht sicher über den PDF-Fall.

Dann wieder gibt es sicherlich Windows-Tools (kommerzielle), um diese Art von Sache zu tun.

Ich benutze Kairo selbst für Generierung PDF's. Wenn die PDFs von Ihnen kommen, wäre das vielleicht eine Lösung (sie unterstützt mehrere Seiten). Viel Glück!

+1

Vielen Dank für die Vorschläge. Wir verwenden tatsächlich eine Vielzahl von Tools zum Erstellen und sogar zum Kombinieren von PDFs. Jedoch kann man sie nicht einfach automatisieren, besonders das Werkzeug, das das Kombinieren durchführt, daher der Wunsch, es in Ruby (oder einer anderen Sprache) zu schreiben. –

2

Sie können dies tun, indem Sie in PostScript und zurück konvertieren. PostScript-Dateien können trivial aneinandergereiht werden. Zum Beispiel, hier ist ein Bash-Skript, das die Ghostscript-Tools ps2pdf und pdf2ps verwendet:

 
#!/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 

ich Ruby nicht vertraut bin, aber es ist fast sicher eine Funktion, die (vielleicht system() (nur eine Vermutung) genannt wird) wird Rufen Sie eine gegebene Befehlszeile auf.

0

Ich würde vorschlagen, den Code für PDFCreator (VB, wenn ich mich nicht irre, aber das sollte nicht wichtig sein, da Sie nur ähnlichen Code in einer anderen Sprache implementieren), die GhostScript (GNU-Lizenz verwendet)). Oder graben Sie einfach direkt in GhostScript. Es gibt auch eine Fassaden-Ebene namens GhostPDF, die das tun kann, was Sie wollen.

Wenn Sie GhostScript mit VB steuern können, können Sie es mit C machen, was bedeutet, dass Sie es mit Ruby machen können.

Ruby hat auch IO.popen, mit dem Sie externe Programme aufrufen können, die dies tun können.

-1

Jeder Ruby-Code, um dies in einer realen Anwendung zu tun, wird wahrscheinlich schmerzhaft langsam sein. Ich würde versuchen, Unix-Tools zu finden, um die Aufgabe zu erledigen. Dies ist eine der Schönheiten der Verwendung von Mac OS X, es hat sehr schnelle PDF-Funktionen eingebaut. Die nächstbeste Sache ist wahrscheinlich ein Unix-Tool.

Eigentlich hatte ich einige Erfolge mit Rtex. Wenn Sie here suchen, finden Sie einige Informationen darüber. Es ist viel schneller als jede Ruby-Bibliothek, die ich benutzt habe, und ich bin mir ziemlich sicher, dass Latex eine Funktion hat, um PDF-Daten aus anderen Quellen einzubringen.

2

Wenn Sie auf Ihrer Plattform ghostscript haben, berappen und führen Sie diesen Befehl:

gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = finished.pdf < Ihre Quelle PDF-Dateien >

+0

Die Option -sPAPERSIZE für GS ist eine nützliche Information. Zum Beispiel -sPAPERSIZE = a4 oder -sPAPERSIZE = Buchstabe. –

2

Ich habe die pdftk-Lösung ausprobiert und hatte Probleme sowohl bei SnowLeopard als auch bei Tiger. Bei der Installation von Tiger wurde mein System beschädigt und ich konnte Script/Server nicht mehr ausführen. Zum Glück ist es ein Computer, der aus der Webentwicklung ausgeschlossen wurde.

Anschließend eine andere Option gefunden: - JoinPDF. War eine absolut schmerzfreie und schnelle Installation und es funktioniert perfekt.

Auch versuchte GhostScript und es kläglich gescheitert (konnte die Schriftarten nicht lesen und ich endete mit PDFs, die nur Bilder hatten).

Wenn Sie jedoch nach einer Lösung für dieses Problem suchen, können Sie JoinPDF ausprobieren.

Verwandte Themen