コマンドラインを使用して複数のPDFを結合するにはどうすればよいですか?


52

複数のpdfを1つに結合する簡単なワンライナーはありますか?

Preview.appを使用して実行できることを知っています

回答:


74

「コマンドラインからのOS XでのPDFファイルの結合」の「OSXでのコマンドラインでのPDFファイルの結合」を参照してください。

OSXには、Tiger以降、必要なことを正確に実行するPythonスクリプトが付属しています。スクリプトはすでに実行可能で、PythonはOS Xにプリインストールされているため、実行するために必要なことは、ターミナルを開いて入力するだけです

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

また、リンクされたページでは、join.py入力を簡単にするためにファイルのシンボリックリンクを作成することをお勧めしますが、-sin を省略しln -s ... ...、それなしではハードリンクが作成されます。おそらく問題になりませんが、言及しますが。


私のために働いた。ここでのすばらしいことの1つは、二度と使用しない余分なパッケージをインストールする必要がないことです。ありがとう。
gvrocha

El Capitan 10.11.6で私のために働きました。
パブイソン

2
警告:PDFがいくつかのページの回転を台無しにしていた
adius

28

Brew with commandを使用してGhostscriptをインストールするだけです:

brew install gs

次に、リストされているすべてのファイルでコマンドを実行します。

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

OS X / macOSはすでにネイティブでコマンドラインからPDFファイルを結合する方法を持っているので、Xcode、Homebrew、Ghostscriptのコマンドラインツールを最初にインストールしなければならない時間を無駄にせずに前述のパッケージのいずれかをインストールしますか?
user3439894

5
@ user3439894多くの人がすでにこれらの共通パッケージをインストールしており、すでに使用しているgsので、今後の参考のためにこのソリューションも同様に便利です。
htor

1
@ user3439894混乱が見られます。あなたがこの答えの価値に疑問を抱いていたからです。homebrewを使用してコマンドラインユーティリティをインストールすることは最近非常に一般的であるため、時間の無駄とは呼びません。多くの人にとって、この答えはあなたと同じくらい良い解決策を提供します。
htor

7
これは私のために働いた、PYコマンドはしませんでした
ティーメHennis

2
Thieme Hennisのコメントによると、join.pyスクリプトはHigh Sierraでセグメンテーションエラーでクラッシュします。しかし、gsは完全に機能します。
アークデール

2

AutomatorアクションのAppleのpythonスクリプトは、新しいPDFKitフレームワークではなくCoreGraphicsのCGPDFDocument APIを使用するため、非常に遅くなります。また、必要なAPIだけでなく、CoreGraphicsライブラリ全体をインポートします。

代替のより高速なpythonスクリプトは、次の場所にあります。

また、このスクリプトは目次をPDFに追加し、各コンポーネントファイルを一覧表示(および既存のToCをマージ)しますが、Appleはそうしません。

コマンドライン(PDFファイル名を引数として使用)またはAutomatorシェルスクリプトアクションで使用して、Finderのクイックアクション/サービスを作成できます。


1
使用した試験として、time コマンドをあなたと一緒にjoinpdfs.py スクリプト、組み込みのjoin.py スクリプトと二つのファイル〜200メガバイトそれぞれ、あなたのjoinpdfs.py スクリプトは、より高速なビルトインより9秒であったjoin.py スクリプトそのままTOCを持つことの当然の付加的な利点と、 。いいね!+1
user3439894

ところで、9秒というのはあまり聞こえないかもしれませんが、組み込みスクリプトの全体の時間の1/3でした。したがって、1/3の時間は重要です。
user3439894

1

FWIW、私はシステムpythonなどのような外部の依存関係に依存することなくこれを可能にする簡単な小さなプログラムを書きました。ここの github で:pdfmergeと非常に簡単に使用するには、マージするPDFファイルのリストを渡すかpdfmerge in1.pdf in2.pdf ... out.pdf、テキストファイルにマージするファイルのリストを渡すか、pdfmerge infileslist.txt out.pdfまたはABC順で現在のディレクトリを実行しpdfmerge out.pdfます。私はそれを学習プロジェクトとして書いたので、無料でオープンで、githubのリリースタブから最新のバイナリを入手できます。


PythonはデフォルトでmacOSにインストールされており、macOSの一部としてインストールされているため、Python自体を必ずしも外部依存関係とは見なしません。つまり、macOSですぐに使用できるものを使用してjoin.py、AutomatorのPDFページの結合アクションからのスクリプトであるPDFファイルを結合するには、他に何もダウンロードまたはインストールする必要はありませんが、使用する必要がありますダウンロードしてインストールします。また、リンクにバイナリが表示されませんでした。
user3439894

1
ところで、私はあなたのコードを熟読しましたが、Pythonスクリプトが既に使用している2つのコアコンポーネント(FoundationとQuartz)を使用しているのは興味深いことです。コードには、デフォルトで既に提供されているものをダウンロードすることなく、それを使用する方が本質的に優れているものがありますが、それを使用するには追加の追加手順が必要ですか?
user3439894

1
Pythonを他のことに使用しない人にとっては、おそらくAppleが提供するスクリプトを使用する方が理にかなっています。しかし、Pythonを使用する人にとっては、異なるモジュールのインストールなどで複数のバージョン(システムPythonは2.7、最新のPythonは3.x)を管理するのは大きな手間となります。たとえば、私のマシンでは、$ PATHはまったく異なるPythonを指します。これは、シバンなどを慎重に使用することで解決できますが、迷惑です。もちろん、YMMV。また、バイナリダウンロードページへの直接リンク:github.com/paultopia/pdfmerge/releases/latest
Paul Gowder

1

上に構築@BartoszPetryńskiさんの素敵な答え、私たちは自分の最小限にすることができcpdfGhostScriptの上部の有用性を:

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

次のように使用します:

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

0

無料のCoherent PDFコマンドラインツールが最適なオプションであることがわかりました。非常に高速でロスレスであり、他のソリューションのように方向やハイパーリンクを台無しにしません。形式は次のとおりです。

cpdf file1.pdf file2.pdf -o output.pdf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.