web-dev-qa-db-ja.com

複数のマージ/変換 PDF ファイルを1つにまとめる PDF

複数のPDFファイルを1つの大きなPDFファイルにマージ/変換する方法を教えてください。

私は次のことを試みましたが、ターゲットファイルの内容は予想通りではありませんでした:

convert file1.pdf file2.pdf merged.pdf

非常にシンプルで基本的なコマンドライン(CLI)ソリューションが必要です。私が最初にmerge/convertの出力をpdf2psに直接パイプすることができれば最高でしょう(最初にここで私が以前に尋ねた質問で試みたように: Linuxパイピング(convert - > pdf2ps - > lp) )。

910
alcohol

すみません、私はグーグルとちょっとした運を使って自分で答えを見つけることができました:)

興味のある方へ

私は私達のdebianサーバーにpdftk(pdf toolkit)をインストールしました、そして私は望ましい出力を達成した以下のコマンドを使用して:

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

OR

gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...

これは今度は直接pdf2psにパイプで送ることができます。

445
alcohol

pdfuniteはpopplerの一部であり、インストールされる可能性が高いことを考えると、使い方もpdftkよりも単純です。

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
1208
Hubert Kario

良いゴーストスクリプトを試してください。

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf

あるいは低解像度のPDF用の改良版のためのこの方法でさえ(これを指摘してくれたAdrianoに感謝します):

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf

どちらの場合も、出力解像度はconvertを使用したこの方法よりはるかに高く、優れています。

convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf

このようにすれば、他に何もインストールする必要がなくなり、システムにすでにインストールされているものを使って作業することができます(少なくとも両方とも私のrhelにはデフォルトで付属しています)。

お役に立てれば、

更新: まず最初に、あなたのすべてのニースコメントをありがとう!グーグルの後、私はPDFサイズを縮小するための素晴らしいトリックを見つけました。私はそれを300 MBの1つの[PDF]を15 MBまで許容できる解像度で減らしました!そして、これらすべてを優れたゴーストスクリプトで表しています。

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf

乾杯!!

455
Gery

またpdfjoin a.pdf b.pdfはa.pdfとb.pdfの内容で新しいb-joined.pdfを作成します。

46
rodrigob

Convertコマンドを直接使うことができます、

例えば.

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
35
Noor

複数のファイルがあり、名前を1つずつ入力したくない場合は、これが最も簡単な方法です。

qpdf --empty --pages *.pdf -- out.pdf

18
SaTa

pdfuniteはPDF全体をマージするのに問題ありません。たとえば、file1.pdfの2〜7ページ、file2.pdfの1、3、4ページが必要な場合は、pdfseparateを使用して、各ページでファイルを別々のPDFに分割し、pdfuniteに渡します。

その時点であなたはおそらくより多くのオプションを持つプログラムが欲しいでしょう。 qpdfは、PDFを操作するために私が見つけた最高のユーティリティです。 pdftkはどんどん大きくなり、Red Hat/Fedoraはgcjに依存しているのでパッケージ化していません。他のPDFユーティリティには、MonoまたはPythonの依存関係があります。 qpdfは、pdfseparatepdfuniteを使用して30ページの出力PDFに970kB対1,6450kBを作成するよりもはるかに小さい出力ファイルを生成することがわかりました。 qpdfのコマンドラインはもっと多くのオプションを提供するので、それほど単純ではありません。 file1とfile2をマージする元の要求は、次のようにして実行できます。

qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
14
skierpage

Apache PDFBox http://pdfbox.Apache.org/ /

PDFMergerこのアプリケーションは、PDFドキュメントのリストを取得してそれらをマージし、結果を新しいドキュメントに保存します。

使用法:Java -jar pdfbox-app-x.y.z.jar PDFMerger "ソースPDFファイル(2 ..n)" "ターゲットPDFファイル"

12
lumpchen

Python https://pypi.python.org/pypi/pdftools/1.0.6 のPDFツールを使用してください

Tar.gzファイルをダウンロードして解凍し、以下のようにコマンドを実行します。

python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3 

上記のコマンドを実行する前に、pyhton3をインストールする必要があります。

このツールは以下をサポートします

  • 追加する
  • インサート
  • 削除する
  • 回転させる
  • Split
  • マージ
  • ジップ

あなたは以下のリンクでより多くの詳細を見つけることができます、そしてそれはオープンソースです。

https://github.com/MrLeeh/pdftools

あなたが1つのpdfにすべてのダウンロードされたイメージを変えたいならば、実行してください

convert img{0..19}.jpg slides.pdf

8
Trupti Kini

sejda-console 、無料のオープンソースを使用できます。解凍してsejda-console merge -f file1.pdf file2.pdf -o merged.pdfを実行してください。

ブックマーク、リンクアノテーション、アクロフォームなどが保存されます。実際に使用できるオプションはたくさんあります。sejda-console merge -hを実行してそれらすべてを確認できます。

8
Andrea Vacondio

私はpdfuniteの勧告の2番目です。ただし、> 2k PDFファイルをマージしようとしたときにArgument list too longエラーが発生しました。

私はこれと2つの外部パッケージについてPythonに目を向けました: PyPDF2 (PDF関連のすべてを処理するため)および natsort (ディレクトリのファイル名の「自然な」並べ替えをするため) 。これが誰かを助けることができる場合には:

from PyPDF2 import PdfFileMerger
import natsort
import os

DIR = "dir-with-pdfs/"
OUTPUT = "output.pdf"

file_list = filter(lambda f: f.endswith('.pdf'), os.listdir(DIR))
file_list = natsort.natsorted(file_list)

# 'strict' used because of
# https://github.com/mstamy2/PyPDF2/issues/244#issuecomment-206952235
merger = PdfFileMerger(strict=False)

for f_name in file_list:
  f = open(os.path.join(DIR, f_name), "rb")
  merger.append(f)

output = open(OUTPUT, "wb")
merger.write(output)
5
Greg Sadetsky

これは私が使う方法で、うまくいくし実装も簡単です。これは fpdf fpdi の両方のライブラリを必要とし、ここからダウンロードできます。

require('fpdf.php');
require('fpdi.php');

$files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];

$pdf = new FPDI();

foreach ($files as $file) {
    $pdf->setSourceFile($file);
    $tpl = $pdf->importPage(1, '/MediaBox');
    $pdf->addPage();
    $pdf->useTemplate($tpl);
}

$pdf->Output('F','merged.pdf');
4
billynoah

私はPyMuPDF(MuPDFのPythonバインディング)の開発者の一人であることに偏っています。

あなたはそれを使ってあなたが望むことを簡単にやることができます。スケルトンコードは次のように機能します。

#-------------------------------------------------
import fitz         # the binding PyMuPDF
fout = fitz.open()  # new PDF for joined output
flist = ["1.pdf", "2.pdf", ...]  # list of filenames to be joined

for f in flist:
    fin = fitz.open(f)  # open an input file
    fout.insertPDF(fin) # append f
    fin.close()

fout.save("joined.pdf")
#-------------------------------------------------

それはそれについてです。ページ範囲のみを選択したり、結合した目次を維持したり、ページの順序を逆にしたり、ページの回転を変更するなどのために、いくつかのオプションがあります.

私たちはPyPiにいます。

4
Jorj McKie

私はChasmoのアイデアが好きですが、私はのようなものの利点を使うのが好きです

convert $(ls *.pdf) ../merged.pdf

複数のソースファイルをconvertに渡すと、それらを共通のpdfにマージすることになります。このコマンドは、実際のディレクトリ内の.pdf拡張子を持つすべてのファイルを、親ディレクトリ内のmerged.pdfにマージします。

3
user3709983

他の答えは良いですが、あなたが共有ホスティング環境にいるかどうか、または他の理由であなたがPDFをローカルにマージすることができないならば、それらはあなたを助けません。

リモートでPDFをマージするためのAPIを探しているなら、pdfをマージするためのエンドポイントを持つ api2pdf を試すことができます。ドキュメントは ここ です。

0
apexdodge