Come posso combinare più PDF usando la riga di comando?


52

Esiste un rapido one-liner per combinare più PDF in uno?

So che può essere fatto usando Preview.app

Risposte:


75

Dai un'occhiata a "Combinazione di file PDF dalla riga di comando in OSX" in Unione di file PDF in OS X dalla riga di comando .

Si scopre che da Tiger in poi, OSX viene fornito con uno script Python che fa esattamente ciò di cui hai bisogno. Lo script è già eseguibile e Python è preinstallato su OS X, quindi tutto ciò che devi fare per eseguirlo è aprire il Terminale e digitare

"/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

Anche sulla pagina collegata si suggerisce di fare un collegamento simbolico per il join.pyfile per rendere la digitazione più facile tuttavia omesso l' -sin ln -s ... ..., e senza di essa, viene creato un collegamento fisso. Probabilmente non importerebbe, anche se lo menzionerei.


Ha funzionato per me. Una cosa fantastica qui è evitare di dover installare pacchetti extra che potresti non utilizzare più. Grazie.
gvrocha,

Ha lavorato per me su El Capitan 10.11.6.
pabuisson,

2
Avvertenza : ho avuto dei PDF in cui si è incasinata la rotazione di diverse pagine
adius il

28

Basta installare Ghostscript usando Brew con il comando:

brew install gs

Quindi eseguire il comando con tutti i file elencati:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf

OS X / macOS ha già nativamente un modo per combinare i file PDF dalla riga di comando, quindi perché perdere tempo a dover prima installare Command Line Tools per Xcode, Homebrew e poi Ghostscript, per fare qualcosa che può già essere fatto in modo nativo senza dover installare uno dei suddetti pacchetti?
user3439894,

5
@utente3439894 molte persone hanno già installato questi pacchetti comuni e lo stanno già utilizzando, gsquindi per riferimento futuro questa soluzione sarebbe altrettanto conveniente.
htor,

1
@ user3439894 vedo la confusione. ti sto rivolgendo perché metti in dubbio il valore di questa risposta. usare homebrew per installare utility da riga di comando è molto comune in questi giorni, quindi non lo definirei una perdita di tempo. per molte persone questa risposta offre una soluzione altrettanto valida della tua.
htor,

7
questo ha funzionato per me, il comando py no
Thieme Hennis il

2
Secondo il commento di Thieme Hennis, la sceneggiatura join.py si blocca per me in High Sierra con un errore di segmentazione. Ma gs funziona perfettamente.
arcdale,

2

Lo script Python di Apple nell'azione Automator è molto lento, poiché utilizza le API CGPDFDocument di CoreGraphics, piuttosto che il nuovo framework PDFKit. Importa anche l'intera libreria CoreGraphics, anziché solo le API richieste.

Uno script Python più veloce e alternativo può essere trovato qui:

Questo script aggiunge anche un Sommario al PDF, elencando ogni file componente (e unendo ToC esistenti), cosa che Apple non ha.

Può essere utilizzato sulla riga di comando (con nomi di file PDF come argomenti) o in un'azione di script della shell di Automator, per eseguire un'azione / servizio rapidi per il Finder.


1
Come test, utilizzando il time comando in congiunzione con il joinpdfs.py copione , il built-in join.py di script e due file ~ 200 MB ciascuna, la vostra joinpdfs.py sceneggiatura era 9 secondi più veloce rispetto al built-in join.py scrittura , con, naturalmente, il vantaggio di avere il TOC intatto . Bello! +1
user3439894

BTW 9 secondi potrebbe non sembrare molto ma era 1/3 del tempo complessivo dello script integrato , quindi 1/3 del tempo più veloce è significativo.
user3439894,

1

FWIW, ho scritto un piccolo programma rapido che ti consente di farlo senza dover fare affidamento su dipendenze esterne come il sistema Python e simili. Su github qui: pdfmerge e piuttosto semplice da usare, può passargli un elenco di file PDF da unire pdfmerge in1.pdf in2.pdf ... out.pdf, passargli un elenco di file da unire in un file di testo come pdfmerge infileslist.txt out.pdfo semplicemente fare la directory corrente in ordine ABC pdfmerge out.pdf. L'ho scritto come un progetto di apprendimento, così gratuito e aperto e puoi ottenere l'ultimo binario dalla scheda delle versioni su github.


Poiché Python è installato per impostazione predefinita in e come parte di macOS, non lo considero necessariamente una dipendenza esterna in sé. In altre parole, per utilizzare ciò che è già disponibile in macOS per unire i file PDF, lo join.pyscript dell'azione Combina pagine PDF in Automator, non è necessario scaricare o installare nient'altro, ma per usare il tuo dovrei scaricarlo e installarlo. Inoltre non ho visto un binario sul link.
user3439894

1
A proposito, ho esaminato il tuo codice ed è interessante che tu stia utilizzando due dei componenti principali (Foundation e Quartz) che lo script python sta già utilizzando. C'è qualcosa nel tuo codice che è intrinsecamente migliore per influenzare il suo uso su ciò che è già offerto di default senza dover scaricare nulla, mentre con il tuo devi prendere ulteriori e ulteriori passaggi per usarlo?
user3439894

1
Per le persone che non usano Python per nient'altro, probabilmente ha più senso usare lo script fornito da Apple. Ma per le persone che usano Python, può essere una seccatura gestire più versioni (il sistema Python è 2.7, il moderno Python è 3.x) con diverse installazioni di moduli e cose. Sulla mia macchina, ad esempio, il mio $ PATH punta a un Python completamente diverso. Questo può essere risolto con un uso giudizioso di shebang e simili, ma lo trovo fastidioso. YMMV, ovviamente. Inoltre, collegamento diretto alla pagina di download binaria: github.com/paultopia/pdfmerge/releases/latest
Paul Gowder

1

sulla base su @Bartosz Petryński s' bella risposta , possiamo fare proprio il minimo cpdfdi utilità in cima GhostScript:

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

quindi usalo come:

cpdf merged.pdf file1.pdf file2.pdf file3.pdf

0

Ho trovato lo strumento coerente della riga di comando PDF come l'opzione migliore. È molto veloce, senza perdita di dati e non rovina l'orientamento o i collegamenti ipertestuali come hanno fatto altre soluzioni. Il formato è:

cpdf file1.pdf file2.pdf -o output.pdf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.