当您试图嵌套多个具有相同名称的书签时,PyPdf2并未将其考虑在内。 下面自足的Python代码来测试我的意思(你需要有3个命名为A,B和C的工作文件夹中的PDF文件来测试它)具有相同名称的PyPdf2嵌套书签不起作用
from PyPDF2 import PdfFileReader, PdfFileMerger
def main():
merger = PdfFileMerger()
pagenum = 0
firstOne = True
for file in ["a.pdf","b.pdf","c.pdf"]:
print("next row")
pdf = PdfFileReader(open(file,"rb"))
merger.append(pdf)
if firstOne:
child = merger.addBookmark(title="blabla",pagenum=1)
firstOne = False
else:
child = merger.addBookmark(title="blabla",pagenum=1, parent=child)
merger.write("test.pdf")
if __name__ == "__main__":
main()
我希望生成的PDF有三个层次的嵌套书签
blabla
blabla
blabla
的,而是我得到
blabla
blabla
blabla
任何方式,以确保不会发生这种情况?
编辑:我已经删除了pagenum
变量,因为我希望这3个书签指向同一页面。
是的我打算让他们都在同一页面上。因此不会递增'pageNum'。您正在确认我得到的东西:似乎没有办法在PyPdf2中拥有无限数量的同名书签。但是,这是'pdf'格式还是库的一个特点? – Chapo
啊,我的不好。我想不出为什么有人想要3个嵌套书签都指向同一个页面。据我所知,这是'PdfFileMerger.addBookmark()'方法中的一个错误。更多[这里](https://github.com/mstamy2/PyPDF2/issues/40)。我会用解决方法更新我的答案。 – kabdulla
从你的链接'我宁愿在这个特定的应用程序中使用PdfFileMerger的原因是,PdfFileWriter似乎要求所有的源文件保持打开状态,直到输出文件被写入,这导致禁止性的内存使用。这种情况同样适用于我,但您的解决方案适用于我的问题,所以我会尽快进行验证。谢谢你的帮助。 – Chapo