使用 PyPDF2 为 PDF 添加书签

rmp*_*150 4 python pypdf2

我正在尝试使用 PyPDF2 向 PDF 添加书签。我运行以下没有问题。但是永远不会创建书签。关于我做错了什么的任何想法。PDF 有 2 页长。

from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter() # open output
input = PdfFileReader(open('test.pdf', 'rb')) # open input
output.addPage(input.getPage(0)) # insert page
output.addBookmark('Hello, World Bookmark', 0, parent=None) # add bookmark
Run Code Online (Sandbox Code Playgroud)

小智 9

我运行了您的代码(在其下方添加文本以写出 pdf)并发现实际上创建了一个书签。

output = PdfFileWriter() # open output
input = PdfFileReader(open('test.pdf', 'rb')) # open input
output.addPage(input.getPage(0)) # insert page
output.addBookmark('Hello, World Bookmark', 0, parent=None) # add bookmark
outputStream = file('result.pdf','wb') #creating result pdf JCT
output.write(outputStream) #writing to result pdf JCT
outputStream.close() #closing result JCT
Run Code Online (Sandbox Code Playgroud)

检查结果中的书签面板。拥有书签不会自动导致 PDF 打开书签面板。

要使用 PyPDF2 打开书签面板,请添加一行:

output = PdfFileWriter() # open output
input = PdfFileReader(open('test.pdf', 'rb')) # open input
output.addPage(input.getPage(0)) # insert page
output.addBookmark('Hello, World Bookmark', 0, parent=None) # add bookmark
output.setPageMode("/UseOutlines") #This is what tells the PDF to open to bookmarks
outputStream = file('result.pdf','wb') #creating result pdf JCT
output.write(outputStream) #writing to result pdf JCT
outputStream.close() #closing result JCT
Run Code Online (Sandbox Code Playgroud)

  • 在 Python 3 中,它应该是 `outputStream = open('result.pdf','wb')` 而不是 `outputStream = file('result.pdf','wb')`,对吗?不管怎样,谢谢你的回答! (3认同)

bfh*_*aha 9

感谢詹姆斯的代码。但它只输出一页pdf文件,并且不显示如何添加多个书签。这是他的代码的修订版本。

from PyPDF2 import PdfFileReader, PdfFileWriter

reader = PdfFileReader("test.pdf")  # open input
writer = PdfFileWriter()  # open output

n = reader.getNumPages()

for i in range(n):
    writer.addPage(reader.getPage(i))  # insert page


# add a bookmark on the first page
writer.addBookmark("Hello, World Bookmark", 0, parent=None)

# add a bookmark on the sixth page
par = writer.addBookmark("Second Bookmark", 5, parent=None)

# add a child bookmark on the eighth page
writer.addBookmark("Third Bookmark", 7, parent=par)

with open("result.pdf", "wb") as fp:  # creating result pdf JCT
    writer.write(fp)  # writing to result pdf JCT

Run Code Online (Sandbox Code Playgroud)