我想使用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文件的输出中,就足够了。