This site runs best with JavaScript enabled.

Adding Note Margins to a PDF File

Photo by GoodNotes 5 on Unsplash


Learn how to effortlessly add note margins to PDF files for an enhanced note-taking experience on apps like Notability and GoodNotes.

As a developer and avid note-taker, I often find myself wanting to add some annotations to PDF documents. Whether it's jotting down some quick thoughts, highlighting essential sections, or even doodling some diagrams, having extra margins in a PDF can be quite beneficial.

Apps like Notability and GoodNotes on the iPad have become instrumental in my workflow. They allow for a seamless blend of digital and handwritten notes. But what if your PDF doesn't have enough margin space for your annotations?

Today, I'm sharing a Python script that lets you add note margins to any PDF file. Let's dive in!

Why Add Margins?

You might wonder why one would need to add margins to a PDF. Here are a couple of reasons:

  1. Enhanced Note-taking: Especially when using a stylus or Apple Pencil on tablets, having extra space means you can jot down notes without cramping or covering the original content.
  2. Clarity: Keeping your notes separate from the main content helps in distinguishing your added thoughts from the original material.

The Script

Below is the Python script that accomplishes this:

1#!/usr/bin/env python3
2
3import os
4import sys
5import subprocess
6from PyPDF2 import PdfReader, PdfWriter, Transformation
7
8def install(package):
9 subprocess.check_call([sys.executable, "-m", "pip", "install", package])
10
11try:
12 from PyPDF2 import PdfReader, PdfWriter, Transformation
13except ImportError:
14 install("PyPDF2")
15 from PyPDF2 import PdfReader, PdfWriter, Transformation
16
17def resize_pdf(input_pdf_path, output_pdf_path):
18 reader = PdfReader(input_pdf_path)
19 writer = PdfWriter()
20
21 for page in reader.pages:
22 page_width, page_height = page.mediabox.upper_right
23 scale = 0.75
24 translate_x = 0
25 translate_y = page_height * (1 - scale)
26
27 transformation = Transformation().scale(scale, scale).translate(translate_x, translate_y)
28 page.add_transformation(transformation)
29 writer.add_page(page)
30
31 with open(output_pdf_path, "wb") as f:
32 writer.write(f)
33
34if __name__ == "__main__":
35 if len(sys.argv) != 2:
36 print(f"Usage: {os.path.basename(sys.argv[0])} <input_pdf>")
37 sys.exit(1)
38
39 input_pdf = sys.argv[1]
40 output_pdf = input_pdf.rsplit(".", 1)[0] + "-note-margins.pdf"
41 resize_pdf(input_pdf, output_pdf)
42 print(f"Processed {input_pdf} and created {output_pdf}")

How It Works

The script leverages the PyPDF2 library to access the content of a specified PDF. It then resizes each page, shifting the content to one side, thus creating a margin. Specifically, this script moves the content to the upper left, producing a margin on the bottom and the right.

I saved this script as pdfmargins and placed it in my bin directory, which is included in my system path. If you decide to follow a similar approach, remember to grant it executable permissions. You can do this with:

1chmod +x pdfmargins

Once set up, you can invoke the script from any directory like this:

1pdfmargins my-ebook.pdf

Executing this command will generate a new PDF in the same directory, named my-ebook-note-margins.pdf.

Conclusion

PDFs are a standard format for sharing documents. However, when it comes to active learning or collaborative feedback, the ability to add notes can enhance the usefulness of a PDF significantly. With this simple script, you can easily prepare your PDFs for note-taking on platforms like Notability and GoodNotes. Give it a try and boost your note-taking game!

Happy coding (and note-taking)!

Discuss on TwitterEdit post on GitHub

Share article
Dustin Davis

Dustin Davis is a software engineer, people manager, hacker, and entreprenuer. He loves to develop systems and automation. He lives with his wife and five kids in Utah.

Join the Newsletter



Dustin Davis