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