複数のPDFファイルを1つの大きなPDFファイルにマージ/変換する方法を教えてください。
私は次のことを試みましたが、ターゲットファイルの内容は予想通りではありませんでした:
convert file1.pdf file2.pdf merged.pdf
非常にシンプルで基本的なコマンドライン(CLI)ソリューションが必要です。私が最初にmerge/convertの出力をpdf2ps
に直接パイプすることができれば最高でしょう(最初にここで私が以前に尋ねた質問で試みたように: Linuxパイピング(convert - > pdf2ps - > lp) )。
すみません、私はグーグルとちょっとした運を使って自分で答えを見つけることができました:)
興味のある方へ
私は私達の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にパイプで送ることができます。
pdfunite
はpopplerの一部であり、インストールされる可能性が高いことを考えると、使い方もpdftk
よりも単純です。
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
良いゴーストスクリプトを試してください。
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
乾杯!!
またpdfjoin a.pdf b.pdf
はa.pdfとb.pdfの内容で新しいb-joined.pdf
を作成します。
Convertコマンドを直接使うことができます、
例えば.
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
複数のファイルがあり、名前を1つずつ入力したくない場合は、これが最も簡単な方法です。
qpdf --empty --pages *.pdf -- out.pdf
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
は、pdfseparate
とpdfunite
を使用して30ページの出力PDFに970kB対1,6450kBを作成するよりもはるかに小さい出力ファイルを生成することがわかりました。 qpdf
のコマンドラインはもっと多くのオプションを提供するので、それほど単純ではありません。 file1とfile2をマージする元の要求は、次のようにして実行できます。
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
Apache PDFBox http://pdfbox.Apache.org/ /
PDFMergerこのアプリケーションは、PDFドキュメントのリストを取得してそれらをマージし、結果を新しいドキュメントに保存します。
使用法:Java -jar pdfbox-app-x.y.z.jar PDFMerger "ソースPDFファイル(2 ..n)" "ターゲットPDFファイル"
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をインストールする必要があります。
このツールは以下をサポートします
あなたは以下のリンクでより多くの詳細を見つけることができます、そしてそれはオープンソースです。
あなたが1つのpdfにすべてのダウンロードされたイメージを変えたいならば、実行してください
convert img{0..19}.jpg slides.pdf
sejda-console 、無料のオープンソースを使用できます。解凍してsejda-console merge -f file1.pdf file2.pdf -o merged.pdf
を実行してください。
ブックマーク、リンクアノテーション、アクロフォームなどが保存されます。実際に使用できるオプションはたくさんあります。sejda-console merge -h
を実行してそれらすべてを確認できます。
私は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)
これは私が使う方法で、うまくいくし実装も簡単です。これは 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');
私は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にいます。
私はChasmoのアイデアが好きですが、私はのようなものの利点を使うのが好きです
convert $(ls *.pdf) ../merged.pdf
複数のソースファイルをconvert
に渡すと、それらを共通のpdfにマージすることになります。このコマンドは、実際のディレクトリ内の.pdf
拡張子を持つすべてのファイルを、親ディレクトリ内のmerged.pdf
にマージします。