Wie kann ich mehrere PDFs über die Befehlszeile kombinieren?

51

Gibt es einen schnellen Einzeiler, um mehrere PDFs in einem zu kombinieren?

Ich weiß, dass es mit Preview.app gemacht werden kann

Reacuna
quelle

Antworten:

73

Weitere Informationen finden Sie unter "Kombinieren von PDF-Dateien in der Befehlszeile in OS X " unter Verknüpfen von PDF-Dateien in OS X über die Befehlszeile .

Es stellt sich heraus, dass OSX ab Tiger mit einem Python-Skript ausgeliefert wird, das genau das tut, was Sie brauchen. Das Skript ist bereits ausführbar und Python ist unter OS X vorinstalliert. Sie müssen also nur das Terminal öffnen und eingeben, um es auszuführen

"/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py" -o PATH/TO/YOUR/MERGED/FILE.pdf /PATH/TO/ORIGINAL/1.pdf /PATH/TO/ANOTHER/2.pdf /PATH/TO/A/WHOLE/DIR/*.pdf

Auch auf der verlinkten Seite es schlägt vor , machen eine symbolische Verknüpfung für die join.pyDatei zu erleichtern die Eingabe jedoch sie entfallen die -sin ln -s ... ..., und ohne sie, eine feste Verknüpfung erstellt. Wahrscheinlich würde es nichts ausmachen, obwohl ich es erwähnen würde.

user3439894
quelle
Hat für mich gearbeitet. Eine großartige Sache ist, dass Sie keine zusätzlichen Pakete installieren müssen, die Sie möglicherweise nie wieder verwenden. Vielen Dank.
Gvrocha
Hat für mich am El Capitan 10.11.6 gearbeitet.
pabuisson
2
Warnung : Ich hatte PDFs, bei denen die Rotation mehrerer Seiten
durcheinander gebracht wurde
28

Installieren Sie Ghostscript einfach mit dem Befehl Brew:

brew install gs

Führen Sie dann den Befehl mit allen aufgelisteten Dateien aus:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf
Bartosz Petryński
quelle
OS X / macOS bietet bereits eine native Möglichkeit, PDF-Dateien von der Befehlszeile aus zu kombinieren. Verschwenden Sie daher die Zeit, die Sie für die Installation der Befehlszeilentools für Xcode, Homebrew und Ghostscript aufgewendet haben, um etwas zu tun, das bereits von Haus aus ausgeführt werden kann, ohne dass dies erforderlich ist eines der oben genannten Pakete zu installieren?
user3439894
5
@ user3439894 Viele Leute haben diese gemeinsamen Pakete bereits installiert und verwenden sie bereits, gsso dass diese Lösung für zukünftige Referenzzwecke genauso praktisch wäre.
6.
1
@ user3439894 Ich sehe die Verwirrung. Ich spreche Sie an, weil Sie den Wert dieser Antwort in Frage gestellt haben. Die Verwendung von Homebrew zur Installation von Befehlszeilendienstprogrammen ist heutzutage sehr verbreitet, daher würde ich es nicht als Zeitverschwendung bezeichnen. Für viele Menschen ist diese Antwort eine ebenso gute Lösung wie Ihre.
6.
7
das hat bei mir geklappt, der py befehl nicht
thieme hennis
2
Gemäß dem Kommentar von Thieme Hennis stürzt das join.py-Skript in High Sierra mit einem Segmentierungsfehler ab. Aber gs funktioniert einwandfrei.
Arcdale
2

Apples Python-Skript in der Automator-Aktion ist sehr langsam, da es die CGPDFDocument-APIs von CoreGraphics anstelle des neueren PDFKit-Frameworks verwendet. Außerdem wird die gesamte CoreGraphics-Bibliothek und nicht nur die erforderlichen APIs importiert.

Ein alternatives, schnelleres Python-Skript finden Sie hier:

Dieses Skript fügt dem PDF-Dokument auch ein Inhaltsverzeichnis hinzu, in dem alle Komponentendateien (und das Zusammenführen vorhandener ToCs) aufgeführt sind, was bei Apple nicht der Fall ist.

Sie kann in der Befehlszeile (mit PDF-Dateinamen als Argumente) oder in einer Automator-Shell-Skriptaktion verwendet werden, um eine Schnellaktion / einen Dienst für den Finder auszuführen.

benwiggy
quelle
1
Bei Verwendung des time Befehls in Verbindung mit Ihrem joinpdfs.py Skript , dem integrierten join.py Skript und zwei Dateien mit jeweils ca. 200 MB war Ihr joinpdfs.py Skript 9 Sekunden schneller als das integrierte join.py Skript , wobei der zusätzliche Vorteil natürlich darin bestand, dass das Inhaltsverzeichnis intakt war . Nett! +1
user3439894
Übrigens klingen 9 Sekunden vielleicht nicht viel, aber es war 1/3 der Gesamtzeit des eingebauten Skripts , so dass 1/3 der Zeit, die schneller ist, bedeutend ist.
user3439894
1

FWIW, ich habe ein kurzes kleines Programm geschrieben, mit dem Sie dies tun können, ohne sich auf externe Abhängigkeiten wie Systempython und dergleichen verlassen zu müssen. Auf github hier: pdfmerge und ziemlich einfach zu bedienen, kann man entweder eine Liste der zusammenzuführenden PDF-Dateien pdfmerge in1.pdf in2.pdf ... out.pdfübergeben, eine Liste der zusammenzuführenden Dateien in eine Textdatei einfügen wie pdfmerge infileslist.txt out.pdfoder einfach das aktuelle Verzeichnis in ABC-Reihenfolge mit pdfmerge out.pdf. Ich habe es als Lernprojekt geschrieben, also kostenlos und offen, und Sie können die neueste Binärdatei auf der Registerkarte "Veröffentlichungen" von github herunterladen.

Paul Gowder
quelle
Da Python standardmäßig in und als Teil von macOS installiert ist, halte ich es nicht unbedingt für eine externe Abhängigkeit an sich. Mit anderen Worten, um das, was in macOS bereits standardmäßig verfügbar ist, zum Zusammenfügen von PDF-Dateien zu verwenden, muss das join.pySkript aus der Aktion „PDF-Seiten kombinieren“ in Automator nicht heruntergeladen oder installiert werden Laden Sie es herunter und installieren Sie es. Habe auch kein Binary am Link gesehen.
user3439894
1
Übrigens habe ich Ihren Code durchgesehen, und es ist interessant, dass Sie zwei der Kernkomponenten (Foundation und Quartz) verwenden, die auch das Python-Skript bereits verwendet. Gibt es irgendetwas in Ihrem Code, das wesentlich besser ist, um die Nutzung des Codes über das zu beeinflussen, was bereits standardmäßig angeboten wird, ohne dass Sie etwas herunterladen müssen, während Sie bei Ihrem Code zusätzliche und zusätzliche Schritte unternehmen müssen, um ihn zu verwenden?
user3439894
1
Für Leute, die Python für nichts anderes verwenden, ist es wahrscheinlich sinnvoller, das von Apple bereitgestellte Skript zu verwenden. Aber für Leute, die Python verwenden, kann es ein großer Aufwand sein, mehrere Versionen (das System Python ist 2.7, das moderne Python ist 3.x) mit verschiedenen Modulinstallationen und anderen Dingen zu verwalten. Auf meinem Computer verweist mein $ PATH beispielsweise auf ein völlig anderes Python. Dies kann mit vernünftigem Gebrauch von Pony und dergleichen gelöst werden, aber ich finde es ärgerlich. YMMV natürlich. Direkter Link zur Binär-Download-Seite: github.com/paultopia/pdfmerge/releases/latest
Paul Gowder
1

Aufbauend auf über @Bartosz Petryński ‚s nette Antwort , wir können selbst minimalen machen cpdfDienstprogramm auf dem Ghostscript:

brew install gs
cpdf () { 
  gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$1" "${@:2}"
}

dann benutze es wie folgt:

cpdf merged.pdf file1.pdf file2.pdf file3.pdf
Micah Stubbs
quelle
0

Ich fand das kostenlose Coherent PDF Command Line Tool die beste Option. Es ist sehr schnell, verlustfrei und bringt weder Orientierung noch Hyperlinks durcheinander, wie dies bei einigen anderen Lösungen der Fall war. Das Format ist:

cpdf file1.pdf file2.pdf -o output.pdf
gwint
quelle