Initial script, ugly but functional
This commit is contained in:
commit
881aeaab5d
2 changed files with 81 additions and 0 deletions
70
foliator.py
Executable file
70
foliator.py
Executable file
|
|
@ -0,0 +1,70 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
from pypdf import PaperSize, PdfReader, PdfWriter, Transformation
|
||||||
|
import math
|
||||||
|
|
||||||
|
input_pdf = PdfReader("to_foliate.pdf")
|
||||||
|
num_A5 = math.ceil(len(input_pdf.pages)/4.0) * 2
|
||||||
|
|
||||||
|
# First pretend to be printing on A5 paper
|
||||||
|
writer = PdfWriter()
|
||||||
|
|
||||||
|
for i in range(num_A5):
|
||||||
|
dpage = writer.add_blank_page(width=PaperSize.A5.height,
|
||||||
|
height=PaperSize.A5.width)
|
||||||
|
ipage = input_pdf.pages[i]
|
||||||
|
ipage.mediabox = dpage.mediabox
|
||||||
|
|
||||||
|
if i % 2 == 0: # Even pages are filled right to left
|
||||||
|
ipage.add_transformation(Transformation().translate(PaperSize.A6.width,
|
||||||
|
0))
|
||||||
|
dpage.merge_page(ipage)
|
||||||
|
|
||||||
|
|
||||||
|
# Now for the fun part: work backwards to fill the remaining pages
|
||||||
|
for j in range(len(input_pdf.pages) - num_A5):
|
||||||
|
dpage = writer.pages[num_A5 - 1 - j]
|
||||||
|
ipage = input_pdf.pages[num_A5+j]
|
||||||
|
ipage.mediabox = dpage.mediabox
|
||||||
|
if (num_A5 - 1 - j) % 2 == 1:
|
||||||
|
ipage.add_transformation(Transformation().translate(PaperSize.A6.width,
|
||||||
|
0))
|
||||||
|
dpage.merge_page(ipage)
|
||||||
|
|
||||||
|
writer.write("output_A5.pdf")
|
||||||
|
|
||||||
|
w2 = PdfWriter()
|
||||||
|
if(num_A5 % 4 == 2):
|
||||||
|
writer.add_blank_page(width=PaperSize.A5.height,
|
||||||
|
height=PaperSize.A5.width)
|
||||||
|
writer.add_blank_page(width=PaperSize.A5.height,
|
||||||
|
height=PaperSize.A5.width)
|
||||||
|
num_A5 += 2
|
||||||
|
|
||||||
|
for i in range(0, num_A5-3, 4):
|
||||||
|
dpage_r = w2.add_blank_page(width=PaperSize.A4.width,
|
||||||
|
height=PaperSize.A4.height)
|
||||||
|
|
||||||
|
dpage_v = w2.add_blank_page(width=PaperSize.A4.width,
|
||||||
|
height=PaperSize.A4.height)
|
||||||
|
print(i)
|
||||||
|
top_pr = writer.pages[i]
|
||||||
|
top_pv = writer.pages[i+1]
|
||||||
|
|
||||||
|
bot_pr = writer.pages[i+2]
|
||||||
|
bot_pv = writer.pages[i+3]
|
||||||
|
|
||||||
|
top_pr.mediabox = dpage_r.mediabox
|
||||||
|
bot_pr.mediabox = dpage_r.mediabox
|
||||||
|
|
||||||
|
top_pv.mediabox = dpage_v.mediabox
|
||||||
|
bot_pv.mediabox = dpage_v.mediabox
|
||||||
|
|
||||||
|
bot_pr.add_transformation(Transformation().translate(0, PaperSize.A5.width))
|
||||||
|
bot_pv.add_transformation(Transformation().translate(0, PaperSize.A5.width))
|
||||||
|
|
||||||
|
dpage_r.merge_page(top_pr)
|
||||||
|
dpage_r.merge_page(bot_pr)
|
||||||
|
dpage_v.merge_page(top_pv)
|
||||||
|
dpage_v.merge_page(bot_pv)
|
||||||
|
|
||||||
|
w2.write("output.pdf")
|
||||||
11
shell.nix
Normal file
11
shell.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
let
|
||||||
|
pkgs = import <nixpkgs> {};
|
||||||
|
python3Packages = pkgs.python3Packages;
|
||||||
|
in
|
||||||
|
pkgs.mkShell {
|
||||||
|
packages = [
|
||||||
|
(pkgs.python3.withPackages (pythonPackages: with python3Packages; [
|
||||||
|
pypdf
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue