Вы можете использовать PyPdf2 сек PdfMergerкласс.
Объединение файлов
Вы можете просто объединить файлы с помощью appendметода.
from PyPDF2 import PdfFileMerger
pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf']
merger = PdfFileMerger()
for pdf in pdfs:
merger.append(pdf)
merger.write("result.pdf")
merger.close()
Вы можете передавать дескрипторы файлов вместо путей к файлам, если хотите.
Слияние файлов
Если вам нужен более детальный контроль слияния, существует mergeметод PdfMerger, который позволяет вам указать точку вставки в выходном файле, что означает, что вы можете вставлять страницы в любом месте файла. Этот appendметод можно представить как mergeточку вставки в конце файла.
например
merger.merge(2, pdf)
Здесь мы вставляем в выходной файл весь PDF-файл, но на странице 2.
Диапазоны страниц
Если вы хотите контролировать, какие страницы добавляются из определенного файла, вы можете использовать pagesаргумент ключевого слова appendи merge, передавая кортеж в форме (start, stop[, step])(как обычная rangeфункция).
например
merger.append(pdf, pages=(0, 3)) # first 3 pages
merger.append(pdf, pages=(0, 6, 2)) # pages 1,3, 5
Если вы укажете недопустимый диапазон, вы получите расширение IndexError.
Примечание: также, чтобы файлы не оставались открытыми, метод PdfFileMergers close следует вызывать после записи объединенного файла. Это гарантирует своевременное закрытие всех файлов (ввод и вывод). Жаль, что PdfFileMergerон не реализован в качестве диспетчера контекста, поэтому мы можем использовать withключевое слово, избежать явного вызова закрытия и получить легкую защиту от исключений.
Вы также можете посмотреть pdfcatсценарий, предоставленный как часть pypdf2. Потенциально вы можете вообще избежать необходимости писать код.
В github PyPdf2 также есть пример кода, демонстрирующий слияние.