From a7fc1e047c7db65af1763d26eaebf360c8305c8b Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Mon, 12 Jun 2023 20:25:06 +0100 Subject: [PATCH] Initial attempt at imposition --- .gitignore | 2 ++ pympose.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 .gitignore create mode 100644 pympose.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f93ebf --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv +__pycache__ diff --git a/pympose.py b/pympose.py new file mode 100644 index 0000000..7e3daf6 --- /dev/null +++ b/pympose.py @@ -0,0 +1,44 @@ +import pypdf + + +def main(source, out, section_length): + assert section_length % 4 == 0 + in_reader = pypdf.PdfReader(source) + out_writer = pypdf.PdfWriter() + + to_add = section_length - len(in_reader.pages) % section_length + add_before = to_add // 2 + add_after = to_add - add_before + + pages = [pypdf.PageObject.create_blank_page(in_reader) for _ in range(add_before)] + pages += in_reader.pages + pages += [pypdf.PageObject.create_blank_page(in_reader) for _ in range(add_after)] + + for sig_start in range(0, len(in_reader.pages), section_length): + for side in range(section_length // 4): + top = [ + sig_start + section_length - side - 1, + sig_start + side, + ] + bottom = [ + sig_start + section_length // 2 + side, + sig_start + section_length // 2 + side - 1, + ] + + if side % 2 != 0: + top = list(reversed(top)) + bottom = list(reversed(bottom)) + + + print(top) + print(bottom) + + continue + for si, pi in enumerate(range(sig_start, sig_start + section_length)): + page_box = pages[pi] + trans = pypdf.Transformation() + + if si >= section_length // 4 and si < 3 * section_length // 4: + trans = trans.rotate(180) + + trans = trans.scale(0.5, 0.5)