From 09fea4c0b84863cfe46336a8ab0cbe65c07744b1 Mon Sep 17 00:00:00 2001 From: Leon Denise Date: Sun, 27 Sep 2026 19:10:38 +0200 Subject: [PATCH] script --- .gitignore | 2 ++ README.md | 9 +++++++++ booklet.py | 40 ++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 4 files changed, 52 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 booklet.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..112e44c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pdf +/.venv diff --git a/README.md b/README.md new file mode 100644 index 0000000..65ad54a --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# booklet.py + +A simple Python script to transform a PDF to a printable booklet + +```python3 -m venv ./.venv +source ./.venv/bin/activate +pip install requirements.txt + +python3 booklet.py document.pdf``` diff --git a/booklet.py b/booklet.py new file mode 100644 index 0000000..a45c43d --- /dev/null +++ b/booklet.py @@ -0,0 +1,40 @@ +import sys +from pypdf import PaperSize, PdfReader, PdfWriter, Transformation + +file = str(sys.argv[1]) + +reader = PdfReader(file) +count = len(reader.pages) +sheets = int(count/4) +pages = count - 1 +writer = PdfWriter() +w = PaperSize.A5.width +h = PaperSize.A5.height + +for i in range(0, sheets): + + page = writer.add_blank_page(width=PaperSize.A4.height, height=PaperSize.A4.width) + + if pages - i * 2 < count: + left_front = reader.pages[pages - i * 2] + left_front.scale_to(width=w, height=h) + page.merge_transformed_page(left_front, Transformation().translate(0, 0)) + + if i * 2 < count: + right_front = reader.pages[i * 2] + right_front.scale_to(width=w, height=h) + page.merge_transformed_page(right_front, Transformation().translate(w, 0)) + + page = writer.add_blank_page(width=PaperSize.A4.height, height=PaperSize.A4.width) + + if i * 2 + 1 < count: + left_back = reader.pages[i * 2 + 1] + left_back.scale_to(width=w, height=h) + page.merge_transformed_page(left_back, Transformation().translate(0, 0)) + + if pages - i * 2 - 1 < count: + right_back = reader.pages[pages - i * 2 - 1] + right_back.scale_to(width=w, height=h) + page.merge_transformed_page(right_back, Transformation().translate(w, 0)) + +writer.write(file + '.booklet.pdf') \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0e5c1cf --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pypdf==6.19.0