Слияние / преобразование нескольких файлов PDF в один PDF
Как я могу объединить / преобразовать несколько PDF-файлов в один большой PDF-файл?
я попробовал следующее, но содержимое целевого файла было не так, как ожидалось:
convert file1.pdf file2.pdf merged.pdf
мне нужно очень простое / базовое решение командной строки (CLI). Лучше всего было бы, если бы я мог передать вывод слияния / преобразования прямо в pdf2ps
(как первоначально пытались в моем ранее заданном вопросе здесь:Linux piping (конвертировать -> pdf2ps -> lp) ).
16 ответов
учитывая, что pdfunite
является частью poppler он имеет более высокий шанс быть установлен, использование также проще, чем pdftk
:
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
попробуйте хороший ghostscript:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf
или даже таким образом для улучшенной версии для PDF-файлов с низким разрешением (спасибо Адриано за указание на это):
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-файлов, я уменьшил с ним один PDF 300 МБ до всего 15 МБ с приемлемым разрешением! и все это с хорошим ghostscript, вот он:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf
ура!!
извините, мне удалось найти ответ самостоятельно, используя google и немного удачи:)
для тех, кто заинтересован;
Я установил pdftk (PDF toolkit) на нашем сервере 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.
вы можете использовать команду convert напрямую,
например
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
Apache PDFBox http://pdfbox.apache.org/
PDFMerger Это приложение возьмет список pdf-документов и объединит их, сохранив результат в новом документе.
использование: java-jar pdfbox-app-x.y.z.jar PDFMerger " исходные PDF файлы (2 ..n)" "целевой PDF-файл"
используйте инструменты PDF из python https://pypi.python.org/pypi/pdftools/1.0.6
загрузите tar.файл GZ и распаковать его, и запустить команду, как показано ниже
python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3
вы должны установить pyhton3 перед запуском вышеуказанной команды
эти инструменты поддерживают ниже
- добавить
- вставить
- удалить
- поворот
- Сплит
- слияние
- Zip
вы можете найти более подробную информацию по ссылке ниже и это с открытым исходным кодом
Если вы хотите преобразовать все загруженные изображения в один pdf, выполните
convert img{0..19}.jpg slides.pdf
можно использовать sejda-консоли, свободный и с открытым исходным кодом.
Распакуйте его и запустите sejda-console merge -f file1.pdf file2.pdf -o merged.pdf
Он сохраняет закладки, аннотации ссылке, acroforms и т. д.. на самом деле у него довольно много вариантов, с которыми вы можете играть, просто запустите sejda-console merge -h
чтобы увидеть их все.
Я второй 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)
вот метод, который я использую, который работает и прост в реализации. Это потребует как 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 (привязка 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.
мне нравится идея Chasmo, но я предпочитаю использовать преимущества таких вещей, как
convert $(ls *.pdf) ../merged.pdf
предоставление нескольких исходных файлов convert
приводит к объединению их в общий pdf. Эта команда объединяет все файлы с
pdfunite
подходит для объединения всех PDF-файлов. Если вы хотите, например, страницы 2-7 из file1.pdf и страницы 1,3,4 из file2.PDF, вы должны использовать pdfseparate
разделять файлы на отдельные PDF-файлы для каждой страницы, чтобы дать pdfunite
.
в этот момент Вы, вероятно, хотите программу с большим количеством опций. qpdf
это Лучшая утилита, которую я нашел для управления PDF-файлами. pdftk
больше и медленнее, и Red Hat / Fedora не упаковывают его из-за его зависимости от gcj. Другие утилиты PDF имеют Зависимости Mono или Python. Я нашел qpdf
произвел гораздо меньший выходной файл, чем с помощью pdfseparate
и pdfunite
чтобы собрать страницы в 30-страничный выходной PDF, 970kB против 1,6450 kB. Потому что он предлагает гораздо больше вариантов,qpdf
командная строка не так проста; исходный запрос на слияние file1 и file2 может быть выполнен с помощью
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
другие ответы хороши, но если вы не можете объединить PDF-файлы локально, находитесь ли вы в среде общего хостинга или по другим причинам, они не помогут вам.
Если вы ищете API для удаленного слияния PDF-файлов, вы можете попробовать api2pdf, который имеет конечную точку для слияния PDF-файлов вместе. Документация здесь.
после поиска многих доступных библиотек pdf, единственное, что отлично работало для меня, это
https://libraries.io/npm/easy-pdf-merge
для установки требуется Java 6 или выше, но работает отлично. Pdftk полон ошибок.
var merge = require('easy-pdf-merge');
merge(source_files,dest_file_path,function(err){
if(err)
return console.log(err);
console.log('Success');
});
Примечание: это не cmd, но вы можете заставить его работать с командами, такими как принятие имен файлов в качестве аргументов командной строки.