1353

複数の PDF ファイルを 1 つの大きな PDF ファイルにマージ/変換するにはどうすればよいですか?

次のことを試しましたが、対象ファイルの内容が期待どおりではありませんでした:

convert file1.pdf file2.pdf merged.pdf

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

4

23 に答える 23

1784

それがpopplerpdfuniteの一部であることを考えると、インストールされる可能性が高く、使用法も以下よりも簡単です。pdftk

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

指定することを忘れないでくださいout.pdf。そうしないと、コマンドの最後のファイルが上書きされます

于 2012-07-01T07:11:53.183 に答える
687

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

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

この方法では、他に何もインストールする必要はありません。システムに既にインストールされているものを使用するだけです (少なくとも両方ともデフォルトで私のボックスに入っています)。

更新:まず、すべての素敵なコメントに感謝します!! 皆さんに役立つかもしれないヒントです。ググった後、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

乾杯!!

于 2013-10-14T10:39:43.460 に答える
600

申し訳ありませんが、私はグーグルと少しの運を使って自分で答えを見つけることができました:)

興味のある方へ。

私はpdftk(pdfツールキット)をdebianサーバーにインストールし、次のコマンドを使用して目的の出力を達成しました。

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

また

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

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

于 2010-03-24T13:06:30.617 に答える
40

convert コマンドを直接使用できます。

例えば

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
于 2014-05-17T11:33:39.133 に答える
9

私は PyMuPDF (MuPDF の Python バインディング) の開発者の 1 人であるという偏見があります。

それを使って、やりたいことを簡単に行うことができます (そしてそれ以上のことも)。スケルトン コードは次のように機能します。

#-------------------------------------------------
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を使用しています。

于 2018-01-15T21:22:54.323 に答える
6

ダウンロードしたすべての画像を 1 つの pdf に変換する場合は、実行します。

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

于 2014-01-13T11:27:07.867 に答える
5

私はpdfunite推薦を二番目にします。ただし、Argument list too long2kを超えるPDFファイルをマージしようとしたときにエラーが発生しました。

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

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)
于 2017-06-13T18:03:00.280 に答える
5

無料でオープン ソースのpdftoolsを使用できます(免責事項: 私はその作成者です)。

pdfpagesこれは基本的に、Latexパッケージへの Python インターフェイスです。

PDFファイルを1つずつマージするには、次を実行できます。

pdftools --input-file file1.pdf --input-file file2.pdf --output output.pdf

ディレクトリ内のすべての pdf ファイルを一緒にマージするには、次を実行できます。

pdftools --input-dir ./dir_with_pdfs --output output.pdf
于 2020-05-20T19:56:30.793 に答える
3

これは私が使用する方法で、機能し、実装が簡単です。これには、ここからダウンロードできる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');
于 2016-03-18T23:26:45.090 に答える
3

私は端末から qpdf を使用し、Windows (Mobaxterm) と Linux で作業しました。たとえば、新しいファイル C.pdf で A.pdf と B.pdf を結合するコマンドは次のとおりです。

qpdf --empty --pages oficios/A.pdf informes/B.pdf -- salida/C.PDF

さらにドキュメントが必要な場合 [https://net2.com/how-to-merge-or-split-pdf-files-on-linux/][1]

于 2021-03-14T02:06:36.207 に答える
2

Chasmo のアイデアは好きですが、次のような利点を利用することを好みます。

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

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

于 2015-05-16T01:47:43.580 に答える