PyPDF2 - объедините PdfFileWriter и PdfFileMerger для вывода одного файла PDF - PullRequest
0 голосов
/ 18 июня 2019

Я хотел бы объединить несколько файлов 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, этого будет достаточно.

...