Birden fazla PDF'yi komut satırını kullanarak nasıl birleştirebilirim?


50

Birden fazla pdfs'i bir araya getirmek için hızlı bir tek gömlek var mı?

Preview.app kullanılarak yapılabileceğini biliyorum.

Yanıtlar:


72

" Komut Satırındaki PDF Dosyalarını OSX'te Birleştirmek " bölümüne bakın . Komut Satırından OS X'te PDF Dosyalarını Birleştirmek .

Tiger'dan itibaren, OSX'in tam olarak ihtiyacınız olanı yapan bir Python betiği ile gönderildiği ortaya çıktı. Betik zaten çalıştırılabilir ve Python OS X'e önceden kurulmuş, bu yüzden çalıştırmak için yapmanız gereken tek şey Terminal'i açmak ve yazmak.

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

Ayrıca bağlantılı sayfada onun için sembolik bir bağlantı yapma önerir join.pyonlar ihmal ancak Yazmayı kolaylaştırmak için dosyanın -siçinde ln -s ... ...ve o olmadan bir sabit bağlantı oluşturulur. Muhtemelen farketmezdim, ancak ben söylesem de.


Benim için çalıştı. Buradaki en güzel şey, bir daha asla kullanamayacağınız ekstra paketleri kurmaktan kaçınmak. Teşekkürler.
gvrocha

Benim için çalıştı El Capitan 10.11.6.
pabuisson

1
Uyarı : Birkaç sayfanın dönüşünü
bozduğu

27

Sadece Ghostscript komutunu kullanarak Brew komutunu kullanarak kurun:

brew install gs

Ardından listelenen tüm dosyalar için komutu çalıştırın:

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

OS X / macOS zaten PDF dosyalarını komut satırından birleştirme yoluna sahip, bu nedenle neden zaten XCD, Homebrew ve daha sonra Ghostscript için Komut Satırı Araçları'nı yüklemek zorunda kalmıyorsunuz? Yukarıda belirtilen paketlerden herhangi birini kurmak için?
user3439894

5
@ user3439894 Birçok kişi zaten bu ortak paketlere sahip ve zaten gsbaşvurmak için kullanıyorlardı, bu çözüm bu kadar uygun olurdu.
htor

1
@ user3439894 karışıklığı görüyorum. Size hitap ediyorum çünkü bu cevabın değerini sorguluyorsunuz. komut satırı hizmetlerini kurmak için homebrew kullanmak bugünlerde çok yaygındır, bu yüzden buna zaman kaybı demem. Birçok kişi için bu cevap sizinki gibi eşit derecede iyi bir çözüm sunar.
htor

7
bu benim için çalıştı, py komutu yapmadı
Thieme Hennis 27:18

2
Thieme Hennis'in yorumuna göre, join.py betiği benim için High Sierra'da bir bölümleme hatasıyla çöküyor. Ama gs mükemmel çalışıyor.
arcdale

2

Apple'ın Automator eylemindeki python betiği, yeni PDFKit çerçevesi yerine CoreGraphics'in CGPDFDocument API'lerini kullandığından çok yavaştır. Ayrıca, yalnızca gerekli API'ler yerine tüm CoreGraphics kütüphanesini içe aktarır.

Alternatif, daha hızlı bir python betiği burada bulunabilir:

Bu komut dosyası ayrıca, Apple'ın yapmadığı her bileşen dosyasını listeleyen (ve mevcut ToC'leri birleştiren) listeleyen bir İçindekiler Tablosu'nı da PDF'ye ekler.

Finder için Hızlı Eylem / Hizmet yapmak üzere komut satırında (PDF dosya adları argüman olarak) veya Automator kabuk betiği eyleminde kullanılabilir.


1
Bir sınama, kullanarak time komutu sizin ile birlikte joinpdfs.py senaryo , dahili join.py komut ve iki dosya, sizin 200 MB her ~ joinpdfs.py komut daha hızlı 9 saniye idi dahili join.py komut , TOK bozulmamış olması elbette yararı arasında olan . Güzel! +1
kullanıcı3439894

9 saniye boyunca BTW 9 saniye gelmeyebilir, ancak dahili komut dosyasının genel süresi 1/3 idi , bu yüzden 1/3 daha hızlı oluyor.
user3439894

1

FWIW, Sistem python ve benzeri gibi harici bağımlılıklara güvenmek zorunda kalmadan bunu yapmanıza izin veren küçük bir program yazdım. Burada github : pdfmerge ve kullanımı oldukça basit, ya birleştirmek için bir PDF dosyaları pdfmerge in1.pdf in2.pdf ... out.pdflistesini iletebilir, bir metin dosyasında birleştirilecek bir dosya listesi iletebilir pdfmerge infileslist.txt out.pdfya da sadece ABC dizininde geçerli dizini yapabilirsiniz pdfmerge out.pdf. Bunu bir öğrenme projesi olarak yazdım, o kadar özgür ve açık ki, github'daki bültenler sekmesinden en son ikili dosyayı edinebilirsiniz.


Python varsayılan olarak macOS içine ve bir parçası olarak kurulduğundan, kendi başına harici bir bağımlılık olduğunu düşünmüyorum. Başka bir deyişle, MacOS'ta zaten mevcut olanları PDF dosyalarına katılmak için mevcut olanı kullanmak için join.py, Automator'daki PDF Sayfalarını Birleştir eyleminin komut dosyası olarak kullanmak için başka bir şey indirilmeli veya yüklenmemeli, ancak sizinkileri kullanmak zorundayım. indirin ve kurun. Ayrıca linkte bir ikili görmedim.
user3439894

1
BTW Kodunuzu inceledim ve python betiğinin zaten kullandığı iki temel bileşeni (Foundation ve Quartz) kullanmanız ilginç. Kodunuzda, bir şeyi indirmek zorunda kalmadan zaten varsayılan olarak sunulanın üzerinde olanların kullanımını sallamak için gerçekten daha iyi bir şey var mı, oysaki bir tane kullanmak için ek ve ilave adımlar atmak zorunda mı?
user3439894

1
Python'u başka hiçbir şey için kullanmayan insanlar için, Apple tarafından sağlanan komut dosyasını kullanmak daha mantıklı olur. Ancak Python'u kullanan insanlar için, farklı modül kurulumları ve işleri ile birden fazla sürümü (Python sistemi 2.7, modern Python 3.x) yönetmek büyük bir güçlük olabilir. Makinemde, örneğin, $ PATH'im tamamen farklı bir Python'a işaret ediyor. Bu, shebang'ların ve bunun gibi makul bir şekilde kullanılmasıyla çözülebilir, ancak bunu sinir bozucu buluyorum. Elbette YMMV. Ayrıca, ikili indirme sayfasına doğrudan bağlantı: github.com/paultopia/pdfmerge/releases/latest
Paul Gowder

1

üzerine inşa @Bartosz Petryński 'ın güzel cevap , biz kendi asgari yapabilirsiniz cpdfGhostScript üstünde yarar:

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

sonra gibi kullanın:

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

0

Ücretsiz Coherent PDF Komut Satırı Aracını en iyi seçenek olarak buldum . Çok hızlı, kayıpsızdır ve diğer bazı çözümlerde olduğu gibi yönelimi veya köprüleri bozmaz. Biçim:

cpdf file1.pdf file2.pdf -o output.pdf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.