PyPDF2-结合PdfFileWriter和PdfFileMerger输出一个PDF文件

时间:2019-06-18 08:15:40

标签: python merge bookmarks pypdf2

我想使用PyPDF2合并多个PDF文件。 我想将PdfFileWriter与.addPage一起使用,以从没有书签的PDF文件中添加页面,并为第一页添加书签。 并使用带有.append的PdfFileMerger合并具有书签的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文件的输出中,就足够了。

0 个答案:

没有答案