From 0d014a4b34a07a28c54015ff95974b8cf4a0097d Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Fri, 1 Mar 2024 00:02:13 +0100
Subject: [PATCH] winziprint.py: Add option to add letterhead

---
 src/winziprint.py | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/winziprint.py b/src/winziprint.py
index 462f14d..61d9521 100755
--- a/src/winziprint.py
+++ b/src/winziprint.py
@@ -16,7 +16,7 @@ import weasyprint
 import pypdf
 
 
-VERSION = __version__ = '0.1.0'
+VERSION = __version__ = '0.2.0'
 SOCKET_ADDRESS = ('127.0.0.1', 30983)
 
 BATCH_SIZE = 10
@@ -50,7 +50,7 @@ def convert(input_files: list[str],
     tmp_file_names = []
     page_nums = []
 
-    html_files = [file.lstrip('!') for file in input_files if not file.endswith('.pdf')]
+    html_files = [file.lstrip('!#') for file in input_files if not file.endswith('.pdf')]
     total_steps = len(html_files) + math.ceil(len(html_files) / BATCH_SIZE) + 1
     steps = [0]
 
@@ -67,21 +67,41 @@ def convert(input_files: list[str],
             batch = html_files[i:i + BATCH_SIZE]
             tmp_page_nums += convert_part(tmp_file, batch, next_step, encoding=encoding)
 
+        letterhead = None
         merger = pypdf.PdfWriter()
         i = 0
         for n, file_name in enumerate(input_files):
             p0 = len(merger.pages)
             if file_name.endswith('.pdf'):
-                merger.append(file_name.lstrip('!'))
+                if file_name.startswith('#'):
+                    r = pypdf.PdfReader(file_name.lstrip('!#'))
+                    letterhead = r.pages[0]
+                    del r
+                else:
+                    merger.append(file_name.lstrip('!#'))
             else:
                 batch_page_nums = tmp_page_nums[i // BATCH_SIZE * BATCH_SIZE:(i // BATCH_SIZE + 1) * BATCH_SIZE]
                 page_start = sum(batch_page_nums[:i % BATCH_SIZE])
-                merger.append(tmp_file_names[n // BATCH_SIZE], pages=(page_start, page_start + tmp_page_nums[i]))
+                if file_name.startswith('#'):
+                    r = pypdf.PdfReader(tmp_file_names[n // BATCH_SIZE])
+                    letterhead = r.pages[0]
+                    del r
+                else:
+                    merger.append(tmp_file_names[n // BATCH_SIZE], pages=(page_start, page_start + tmp_page_nums[i]))
                 i += 1
             p1 = len(merger.pages)
             page_nums.append(p1 - p0)
             if padding and file_name[0] != '!' and len(merger.pages) % 2 != 0:
-                merger.add_blank_page()
+                if letterhead:
+                    merger.add_page(letterhead)
+                    letterhead = None
+                else:
+                    merger.add_blank_page()
+        if letterhead:
+            merger.insert_page(letterhead, index=0)
+            merger.insert_blank_page(index=1)
+            page_nums.pop(0)
+            page_nums.insert(0, 1)
         merger.write(output_files)
         merger.close()
         del merger