Bagaimana saya bisa menggabungkan beberapa PDF menggunakan baris perintah?

52

Apakah ada satu garis cepat untuk menggabungkan banyak pdf menjadi satu?

Saya tahu ini bisa dilakukan menggunakan Preview.app

reacuna
sumber

Jawaban:

75

Lihat "Menggabungkan file PDF pada baris perintah di OSX" di Menggabungkan File PDF di OS X Dari Baris Perintah .

Ternyata dari Tiger dan seterusnya, OSX dikirimkan dengan skrip Python yang melakukan apa yang Anda butuhkan. Script sudah dapat dieksekusi, dan Python sudah diinstal pada OS X, jadi yang perlu Anda lakukan untuk menjalankannya adalah membuka Terminal dan mengetik

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

Juga pada halaman tertaut itu menyarankan membuat tautan simbolis untuk join.pyfile untuk membuat pengetikan lebih mudah namun mereka menghapus -sdalam ln -s ... ..., dan tanpa itu, tautan keras dibuat. Mungkin tidak masalah, meskipun saya akan menyebutkannya.

pengguna3439894
sumber
Bekerja untukku. Satu hal hebat di sini adalah menghindari menginstal paket tambahan yang mungkin tidak akan pernah Anda gunakan lagi. Terima kasih.
gvrocha
Bekerja untuk saya di El Capitan 10.11.6.
pabuisson
2
Peringatan : Saya punya PDF di mana ia mengacaukan rotasi beberapa halaman
adius
28

Cukup instal Ghostscript menggunakan Brew dengan perintah:

brew install gs

Kemudian jalankan perintah dengan semua file yang terdaftar:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf
Bartosz Petryński
sumber
OS X / macOS sudah secara native memiliki cara untuk menggabungkan file PDF dari baris perintah, jadi mengapa membuang waktu karena harus menginstal Command Line Tools untuk Xcode, Homebrew dan kemudian Ghostscript, untuk melakukan sesuatu yang sudah dapat dilakukan secara native tanpa harus untuk menginstal salah satu paket yang disebutkan di atas?
user3439894
5
@ user3439894 banyak orang sudah memiliki paket-paket umum ini diinstal dan sudah menggunakan gsjadi untuk referensi di masa depan solusi ini akan sama nyamannya .
Htor
1
@ user3439894 saya melihat kebingungan. Saya berbicara kepada Anda karena Anda mempertanyakan nilai dari jawaban ini. menggunakan homebrew untuk menginstal utilitas baris perintah sangat umum hari ini, jadi saya tidak akan menyebutnya buang-buang waktu. bagi banyak orang jawaban ini memberikan solusi yang sama baiknya dengan milik Anda.
htor
7
ini bekerja untuk saya, perintah py tidak
Thieme Hennis
2
Sesuai komentar Thieme Hennis, skrip join.py mogok untuk saya di Sierra Tinggi dengan kesalahan segmentasi. Tapi gs bekerja dengan sempurna.
arcdale
2

Skrip python Apple dalam aksi Automator sangat lambat, karena menggunakan CGPDFDocument API CoreGraphics, daripada kerangka kerja PDFKit yang lebih baru. Itu juga mengimpor seluruh perpustakaan CoreGraphics, bukan hanya API yang diperlukan.

Alternatif, skrip python yang lebih cepat, dapat ditemukan di sini:

Skrip ini juga menambahkan Daftar Isi ke PDF, mencantumkan setiap file komponen (dan menggabungkan ToC yang ada), yang tidak dimiliki Apple.

Ini dapat digunakan pada baris perintah (dengan nama file PDF sebagai argumen), atau dalam tindakan skrip shell Automator, untuk membuat Tindakan / Layanan Cepat untuk Finder.

benwiggy
sumber
1
Sebagai tes, menggunakan time perintah bersama dengan joinpdfs.py skrip Anda , skrip join.py bawaan dan dua file masing-masing ~ 200 MB, joinpdfs.py skrip Anda 9 detik lebih cepat dari join.py skrip bawaan , dengan tentu saja manfaat tambahan dari memiliki TOC utuh. . Bagus! +1
user3439894
BTW 9 detik mungkin tidak terdengar banyak tetapi 1/3 waktu keseluruhan skrip bawaan , jadi 1/3 waktu lebih cepat signifikan.
user3439894
1

FWIW, saya telah menulis sebuah program kecil cepat yang memungkinkan Anda melakukan ini tanpa harus bergantung pada dependensi eksternal seperti sistem python dan semacamnya. Pada github di sini: pdfmerge dan cukup mudah digunakan, dapat meneruskannya daftar file PDF untuk digabungkan pdfmerge in1.pdf in2.pdf ... out.pdf, memberikannya daftar file untuk digabung dalam file teks seperti pdfmerge infileslist.txt out.pdfatau hanya melakukan direktori saat ini dalam urutan ABC dengan pdfmerge out.pdf. Saya menulisnya sebagai proyek pembelajaran, begitu bebas dan terbuka dan Anda bisa mendapatkan biner terbaru dari tab rilis di github.

Paul Gowder
sumber
Karena Python secara default terinstal di dan sebagai bagian dari macOS, saya tidak perlu menganggapnya sebagai ketergantungan eksternal per se. Dengan kata lain, untuk menggunakan apa yang sudah tersedia di luar kotak di macOS untuk bergabung dengan file PDF, join.pyskrip dari tindakan Combine PDF Pages di Automator, tidak ada lagi yang perlu diunduh atau diinstal, namun untuk menggunakan Anda saya harus unduh dan pasang. Juga tidak melihat biner di tautan.
user3439894
1
BTW Saya membaca dengan teliti kode Anda dan menarik bahwa Anda menggunakan dua komponen inti (Foundation dan Quartz) yang sudah digunakan skrip python juga. Apakah ada sesuatu dalam kode Anda yang secara intrinsik lebih baik untuk mempengaruhi penggunaannya atas apa yang sudah ditawarkan secara default tanpa harus mengunduh apa pun, sedangkan dengan Anda Anda harus mengambil langkah tambahan dan ekstra untuk menggunakannya?
user3439894
1
Untuk orang yang tidak menggunakan Python untuk hal lain, mungkin lebih masuk akal untuk menggunakan skrip yang disediakan Apple. Tetapi bagi orang-orang yang menggunakan Python, dapat menjadi masalah besar untuk mengelola beberapa versi (sistem Python adalah 2.7, Python modern adalah 3.x) dengan berbagai instalasi modul dan hal-hal lainnya. Di komputer saya, misalnya, $ PATH saya menunjuk ke Python yang sama sekali berbeda. Ini dapat diatasi dengan penggunaan shebang secara bijak dan semacamnya, tetapi saya merasa menjengkelkan. YMMV, tentu saja. Juga, tautan langsung ke halaman unduhan biner: github.com/paultopia/pdfmerge/releases/latest
Paul Gowder
1

membangun pada @Bartosz Petryński 's jawaban yang bagus , kita bisa membuat minimal sendiri cpdfutilitas di atas GhostScript:

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

lalu gunakan seperti:

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

Saya menemukan Alat Baris Perintah Coherent PDF gratis untuk menjadi pilihan terbaik. Ini sangat cepat, tanpa kehilangan, dan tidak mengacaukan orientasi atau hyperlink seperti yang dilakukan beberapa solusi lain. Formatnya adalah:

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