複数のPDFファイルをマージする方法は?


回答:


209

PDFシャッフル PDF-Shufflerをインストールする

シンプルなGUIを備えたツールが必要な場合は、pdfshufflerを試してください。これにより、PDFのマージ、およびページの再配置と削除が可能になります。バッチ処理や複雑なタスクの場合、pdftkはもちろんより強力です。

PDF-Shufflerのスクリーンショット


私はこの試みた-それは10.04に動作しませんでした
デヴィッド・オニール

12.04では、pdfshufflerは常に「アンパックする値が多すぎる」と文句を言い、使用できなくなります。
13

8
14.04にインストールして、チャームのように動作します。本当にありがとう!!
ズラティ14

1
pdfshuffler14.04 amd64 でも正常に動作することを確認できます。
14

2
また、16.04.1でも問題なく動作します
Sanjay Manohar

334

pdftkpdftkをインストールする

2つのpdfファイルをマージするには、file1.pdfおよびfile2.pdf

pdftk file1.pdf file2.pdf cat output mergedfile.pdf

詳細はこちらWay Back Machineをご覧ください


5
pdftkはバグがある- bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908。GSは遅くなるが、完璧に仕事をして[発火させるの答え]かもしれない
Pushpak Dagade

@PushpakDagade ghostscriptは、注釈、特にチェックされたコメント(チェックボックスがオンになっているチェックボックス)で台無しになり、このチェックマークはなくなります。私はこれを回避する方法を知りません。また、PDF v1.5 + 1.6をマージすると、出力はデフォルトで1.4になります。それは奇妙な動作です。
ジョナサンコマー

2
pdftkには、コマンドcatoutput可変引数の入力引数の後に出力引数が続くという珍しい使い方があります。
ジェフパッケット

3
パッケージは2018.04に削除されたようです。
ニコラスラウル

1
@NicolasRaoulスナップインストールとしてダウンロードしました。
最大

161

Ghostscriptは、PostScriptおよびPDFファイルを他の形式で表示または印刷したり、それらのファイルを他の形式に変換したりできるパッケージ(Ubuntuでデフォルトで使用可能)です。
Ghostscriptを使用してPDFファイルを結合するには、次のように入力します。

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf  file1.pdf file2.pdf

コマンドの簡単な説明を次に示します。

gs         starts the Ghostscript program.
-dBATCH    once Ghostscript processes the PDF files, it should exit.
           If you don't include this option, Ghostscript will just keep running.
-dNOPAUSE  forces Ghostscript to process each page without pausing for user interaction.
-q         stops Ghostscript from displaying messages while it works
-sDEVICE=pdfwrite 
           tells Ghostscript to use its built-in PDF writer to process the files.
-sOutputFile=finished.pdf
           tells Ghostscript to save the combined PDF file with the specified name.
-dAutoRotatePages=/None
           Acrobat Distiller parameter AutoRotatePages controls the automatic orientation selection algorithm: For instance: -dAutoRotatePages=/None or /All or /PageByPage.

入力ファイルはPDFファイルである必要さえありません。PostScriptファイルまたはEPSファイル、または3つの任意の組み合わせを使用することもできます。

Ghostscriptでできることはたくさんあります。詳細については、ドキュメントをご覧ください。

ソース


2
確かに、それは信じられないほど遅いです。45 x 400Kの単一ページPDFを連結してみました。pdftk0m0.484s、gs1m32.898s(ほぼ200倍遅い)gsでしたが、ファイルは約21%小さくなりました。
aidan

2
このコマンドは、結合するファイルのリストにワイルドカードを使用する場合にも機能します。例えば、交換するfile1.pdf file2.pdffile*.pdf
アントニオHadjigeorgalis

2
私にとってgsは、pdftk永遠に実行される「非準拠」PDFをいくつか扱っていました。
ntc2 14

1
-dPDFSETTINGS=/prepress品質改善のオプションを使用します。すべてによるオリジナルのおかげで貢献
Mohnish

6
ただ、リファレンスとの良好な理解のため@AntoniosHadjigeorgalis:それはワイルドカードをサポートするコマンドはありません、それは実際に置き換えるシェルだfile*.pdffile1.pdf file2.pdfコマンドに引数を渡す前に。
ミッドガード

82

また、pdfuniteを使用してpdfドキュメントをマージします。

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

12
警告:既存のファイルout.pdfは警告なしに上書きされるためpdfunite *.pdf、期待どおりに動作しません。
krlmlr 14

1
@krlmlr出力はいつでも別のディレクトリに置くことができます。
BЈовић

結構cpです。最後の引数も警告なしに上書きされます。これはちょうど(私のような)ユーザーを急ぐためである-私は問題のファイルのバックアップを持っていたラッキーだった...
krlmlr

1
賛成票:これは、他の多くの回答と同様、クリックアンドドゥールGUIを使用しないシンプルなコマンドラインツールです。(ほぼ同等の)GhostScriptソリューションの複雑さをうまくカプセル化します。
トリプリー

1
これも非常に高速です。仕事はうまくいきます。非常に遅いサーバー(aws t1.micro)では、gsは9秒かかり、pdftkは4秒かかり、このpdfuniteは2つのファイルをマージするのに0.9秒かかります!
rsmoorthy

34

PDFチェーン PDFチェーンのインストール

非常に優れたソリューションはPDFChainです。GUIはPDFTKのフロントエンドであり、PDFファイルにマージ、分割、または背景を追加することもできます。


これが最良の答えです。Ubuntuのバージョンに関係なく、完全に機能します。
パウロコギー

手間をかけずにUbuntu 14.04で作業しました!
私のaccount_ram

Ubuntu 18.04で動作します!
orschiro


@ user2413はスナップストアであり、Ubuntuのソフトウェアの唯一のソースではありません。検索しようとしてaptも結果は得られませんでした:/
jena


8

別のアプローチは、この投稿で説明されているようにラテックスを使用することです(pdflatexがインストールされていることを前提としたルートアクセスなし):https : //tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by-ラテックス

これは、前述のツールもルート権限も持っていないが、pdflatexを持っている場合に便利です。

以下のtexコードをコピーして、マージfile1.pdffile2.pdfます。というファイルを作成して、次のように配置しますoutput.tex

\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}

コンパイルするには、次を使用します。 pdflatex output.tex

マージされたファイルはという名前になりoutput.pdfます。


6

pdfseparateを使用して、大きなpdfファイルから特定のページを抽出します。

pdfseparate -f  156 -l 157 input.pdf  output_%d.pdf 
pdfseparate -f  1   -l 2   input.pdf  output_%d.pdf 

そしてその後、私はすべてコマンドでそれらに参加します:

pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date  +%Y-%m-%d_%H_%M_%S ).pdf

これが参加します:

output_1.pdf output_2.pdf output_156.pdf output_157.pdf  

に:

out2014-12-14_23_25_36.pdf

対処する簡単な方法があるかもしれません... :-)


プロセス置換は不要であり、潜在的に有害ですらあります。正しいはるかに単純なコマンドラインはpdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdfありls -vますが、の順序がありません。明白で簡単な修正方法は、ファイルに名前を付けて、ファイルを希望する順序で自然にソートすることです。どうしても必要なls -v場合は、少なくともへのパイプを失う可能性がありますが、trここでは何も行いません。
トリプリー




1

私のアプローチは次のとおりです。

  • 簡単にアクセスできるようにしたいので、Nautilusで右クリックショートカットを作成しました(https://help.ubuntu.com/community/NautilusScriptsHowtoを参照)
  • とても速くしたかったのでpdfuniteを使用しました
  • pdfuniteはコマンドの途中でのみファイルパスを受け入れるため、ファイルパスのスペースを管理するために頭を悩ませる必要がありました。そのため、すべてのファイルパスは「/ home /」で始まり、「。pdf」で終わると仮定しました

結果は次のとおりです。

#!/bin/sh
CLEANED_FILE_PATHS=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's,.pdf /home/,.pdf\\n/home/,g')
echo $CLEANED_FILE_PATHS | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" merged.pdf'

Justeはこのスクリプトを貼り付けます

/home/your_username/.local/share/nautilus/scripts

「merge_pdfs.sh」(たとえば)という名前を付けます。次に、実行可能にします(merge_pdfs.shを右クリック->権限タブ->「プログラムとしてのファイルの実行を許可」にチェックマークを付けます)

PDFファイルをマージするには、それらを選択する必要があります->右クリック->スクリプト-> merge_pdfs.sh。同じディレクトリに「merged.pdf」ファイルが作成されます。

それが役に立てば幸い!

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