Я предвзято являюсь одним из разработчиков 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.