Объединить / конвертировать несколько файлов PDF в один PDF - PullRequest
932 голосов
/ 24 марта 2010

Как можно объединить / преобразовать несколько файлов PDF в один большой файл PDF?

Я попробовал следующее, но содержимое целевого файла оказалось не таким, как ожидалось:

convert file1.pdf file2.pdf merged.pdf

Мне нужно очень простое / базовое решение командной строки (CLI). Лучше всего было бы, если бы я мог передать результаты слияния / конвертации прямо в pdf2ps (как первоначально попыталось сделать в моем ранее заданном вопросе: Linux-конвейер (convert -> pdf2ps -> lp) ).

Ответы [ 15 ]

8 голосов
/ 13 января 2014

Если вы хотите преобразовать все загруженные изображения в один pdf, выполните

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

5 голосов
/ 13 июня 2017

Я второй pdfunite рекомендация. Однако я получал Argument list too long ошибок, когда пытался объединить> 2k PDF-файлов.

Я обратился к 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)
4 голосов
/ 16 января 2018

Я предвзято являюсь одним из разработчиков PyMuPDF (Python-связка MuPDF).

Вы можете легко сделать то, что вы хотите с ним (и многое другое). Скелетный код работает так:

#-------------------------------------------------
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 голосов
/ 19 марта 2016

Вот метод, который я использую, который работает и его легко реализовать. Для этого потребуются библиотеки 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');
3 голосов
/ 16 мая 2015

Мне нравится идея Chasmo, но я предпочитаю использовать преимущества таких вещей, как

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

Предоставление нескольких исходных файлов для convert приводит к объединению их в общий файл PDF. Эта команда объединяет все файлы с расширением .pdf в текущем каталоге в merged.pdf в родительском каталоге.

...