13

The documentation for PyPDF2 states that it's possible to add nested bookmarks to PDF files, and the code appears (upon reading) to support this.

Adding a bookmark to the root tree is easy (see code below), but I can't figure out what I need to pass as the parent argument to create a nested bookmark. I want to create a structure something like this:

Group A
    Page 1
    Page 2
Group A
    Page 3
    Page 4 

Is this possible?

Sample code to add a bookmark to the root of the tree:

#!/usr/bin/env python
from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter() # open output
input = PdfFileReader(open('input.pdf', 'rb')) # open input
output.addPage(input.getPage(0)) # insert page
output.addBookmark('Hello, World', 0, parent=None) # add bookmark

PyPDF2 addBookmark function: https://github.com/mstamy2/PyPDF2/blob/master/PyPDF2/pdf.py#L517

Saaransh Garg
  • 156
  • 1
  • 16
Snorfalorpagus
  • 3,348
  • 2
  • 29
  • 51

1 Answers1

21

The addBookmark method returns a reference to the bookmark it created, which can be used as the parent to another bookmark. e.g.

from PyPDF2 import PdfReader, PdfWriter

writer = PdfWriter()
reader = PdfReader("introduction.pdf")
writer.add_page(reader.pages[0])

reader2 = PdfReader("hello.pdf")
writer.add_page(reader2.pages[0])

parent = writer.add_bookmark("Introduction", 0)  # add parent bookmark
writer.add_bookmark("Hello, World", 0, parent)  # add child bookmark
Martin Thoma
  • 124,992
  • 159
  • 614
  • 958
Snorfalorpagus
  • 3,348
  • 2
  • 29
  • 51
  • 1
    addBookmark(title, pagenum, parent=None, color=None, bold=False, italic=False, fit='/Fit', *args) How to give this fit argument in this ... Can anybody pass me example ..I want bookmark at exact location so need to pass Fit = FitH and top 100 – Dark Matter Feb 29 '16 at 06:00
  • addBookmark("Go to page 3", 2, None, None, False, False, '/FitH', 100) – ConSod Oct 05 '20 at 18:52