Я хотел бы объединить несколько файлов PDF, используя PyPDF2.
Я хотел бы использовать PdfFileWriter с .addPage, чтобы добавить страницы из файлов PDF, которые не имеют закладок, и добавить закладку для первой страницы.
И используйте PdfFileMerger с .append, чтобы объединить файлы PDF с закладками, чтобы сохранить эти закладки.
Я пробовал приведенный ниже код, но не думаю, что возможно объединить PdfFileMerger .append и PdfFileWriter.addPage
from PyPDF2 import PdfFileWriter, PdfFileReader
from PyPDF2 import PdfFileMerger
import os
path = "C:/Users/XXXX/Desktop/TEST PYPDF2/"
pdf_files = ['File1.pdf','File2.pdf','File3','File4']
merger = PdfFileMerger() # merge object
output = PdfFileWriter() # open output
bookmark_page = 0
for files in pdf_files:
input = PdfFileReader(open(files, 'rb')) # open input
outlines = input.outlines
if outlines:
merger.append(path+files)
#output.appendPagesFromReader(input) - this doesn't retain the bookmarks
nr_pages = input.getNumPages()
bookmark_page = bookmark_page + nr_pages
else:
nr_pages = input.getNumPages()
for page in input.pages:
output.addPage(page) # insert page
output.addBookmark(files, bookmark_page, parent=None) # add bookmark
bookmark_page = bookmark_page + nr_pages
#Save the file
outputStream = open('bindy.pdf', 'wb')
output.write(outputStream)
outputStream.close()
Как правило, я хочу добавить несколько файлов PDF и создать закладки для первой страницы на месте, а затем в других случаях (когда добавляемый файл PDF уже содержит несколько закладок внутри) добавить файл PDF и сохранить закладки.
Если это возможно только при использовании PdfFileReader.addPage, то это также будет полезно. Но я не могу найти код для сохранения закладок.
Редактировать 1:
Я обнаружил, что этот код output.cloneReaderDocumentRoot(input)
почти делает то, что я хочу. Он добавляет файл PDF со всеми закладками, но добавляет только этот файл. Удаляет все остальные добавленные файлы. Вероятно, он просто создает копию файла PDF с закладками. Если вместо этого это можно добавить к выводу, содержащему другие файлы PDF, этого будет достаточно.