winziprint.py: Add option to add letterhead

This commit is contained in:
2024-03-01 00:02:13 +01:00
parent 0ec9092df5
commit 0d014a4b34

View File

@ -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