script
This commit is contained in:
commit
09fea4c0b8
4 files changed
+52
No files matched your search
@@ -0,0 +1,2 @@
|
||||
*.pdf
|
||||
/.venv
|
||||
@@ -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```
|
||||
+40
@@ -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')
|
||||
@@ -0,0 +1 @@
|
||||
pypdf==6.19.0
|
||||
Reference in new issue
Block a user