[英]PyPdf2 nested bookmarks with same name not working
當您嘗試嵌套多個具有相同名稱的書簽時,PyPdf2 不會將其考慮在內。 下面是自包含的 python 代碼來測試我的意思(你需要在工作文件夾中有 3 個名為 a、b 和 c 的 pdf 文件來測試它)
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 個書簽指向同一頁面。
這似乎是PdfFileMerger.addBookmark()
方法的一個錯誤。 有一些細節在這里
下面是使用PdfFileWriter
及其addBookmark()
方法的解決方法。 使用它,我可以在同一頁面上獲得 3 個具有相同名稱的嵌套書簽:
blabla
blabla
blabla
使用PdfFileWriter
解決方法的代碼:
from PyPDF2 import PdfFileReader, PdfFileWriter
def main():
writer = PdfFileWriter()
pagenum = 0
firstOne = True
for file in ["a.pdf","b.pdf","c.pdf"]:
print("next row")
pdf = PdfFileReader(open(file,"rb"))
writer.appendPagesFromReader(pdf)
if firstOne:
child = writer.addBookmark(title="blabla",pagenum=pagenum, parent=None)
firstOne = False
else:
child = writer.addBookmark(title="blabla",pagenum=pagenum, parent=child)
d = open("test.pdf", "wb")
writer.write(d)
if __name__ == "__main__":
main()
或者,我PyPDF2
修改PyPDF2
庫來解決這個問題,雖然我在 python 方面不是很有經驗,所以可能引入了新的/其他問題! 已經向維護者提交了一個 pull-request,但在那之前你可以克隆我的 fork,並從那里安裝PyPDF2
:
git clone https://github.com/khalida/PyPDF2.git
cd PyPDF2
python setup.py sdist
sudo -H pip uninstall -y PyPDF2
sudo -H pip install dist/PyPDF2-1.26.0.tar.gz
之后,您應該能夠從PdfFileMerger.addBookmark()
獲得您想要的嵌套。 我已經針對上述案例對其進行了測試,但除此之外還沒有進行任何測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.