diff --git a/winziprint/winziprint.py b/winziprint/winziprint.py index bb0fe8b..34e23ec 100755 --- a/winziprint/winziprint.py +++ b/winziprint/winziprint.py @@ -19,29 +19,34 @@ def convert(input_file_names: list[str], output_file_name: str, encoding: str = page_nums = [] tmp_file_names = [] - for i in range(0, len(input_file_names), BATCH_SIZE): - batch = input_file_names[i:i + BATCH_SIZE] - documents = [] - for file_name in batch: - html = weasyprint.HTML(file_name, encoding=encoding) - doc = html.render() - documents.append(doc) - del html - all_pages = [p for doc in documents for p in doc.pages] - tmp_file_name = f'{output_file_name}.part.{i:0000}' - documents[0].copy(all_pages).write_pdf(tmp_file_name) - tmp_file_names.append(tmp_file_name) - page_nums += [len(doc.pages) for doc in documents] - del documents - del all_pages - gc.collect() + try: + for i in range(0, len(input_file_names), BATCH_SIZE): + batch = input_file_names[i:i + BATCH_SIZE] + documents = [] + for file_name in batch: + html = weasyprint.HTML(file_name, encoding=encoding) + doc = html.render() + documents.append(doc) + del html + all_pages = [p for doc in documents for p in doc.pages] + tmp_file_name = f'{output_file_name}.part.{i:0000}' + documents[0].copy(all_pages).write_pdf(tmp_file_name) + tmp_file_names.append(tmp_file_name) + page_nums += [len(doc.pages) for doc in documents] + del documents + del all_pages + gc.collect() - merger = pypdf.PdfWriter() - for pdf in tmp_file_names: - merger.append(pdf) - os.remove(pdf) - merger.write(output_file_name) - merger.close() + merger = pypdf.PdfWriter() + for pdf in tmp_file_names: + merger.append(pdf) + merger.write(output_file_name) + merger.close() + del merger + finally: + for pdf in tmp_file_names: + if os.path.isfile(pdf): + os.remove(pdf) return page_nums @@ -59,6 +64,8 @@ def _wrapper_convert(args: list[str], encoding: str = None) -> None: msg = str(e).replace('\n', ' ') print(f'error: {msg}', flush=True) traceback.print_exception(e) + finally: + gc.collect() def usage() -> None: