From 3795d6720f88692101ba13c537776b79283b4d0a Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 23 Mar 2018 13:39:16 -0700 Subject: [PATCH] Try out pymupdf merging With garbage collection it reduces waste on the worst case file. That's nice. 1 MB -> 105 MB -> 1.5 MB. Indicates really problem is using PyPDF2 to watermark. Currently hacked into --output-type pdf. --- ocrmypdf/pipeline.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/ocrmypdf/pipeline.py b/ocrmypdf/pipeline.py index a5682feb..c2cc39f7 100644 --- a/ocrmypdf/pipeline.py +++ b/ocrmypdf/pipeline.py @@ -978,6 +978,29 @@ def merge_pages_qpdf( log=log) +def merge_pages_mupdf( + input_files_groups, + output_file, + log, + context): + options = context.get_options() + + pdf_pages, metadata_file = _merge_pages_common( + input_files_groups, output_file, log, context) + + import fitz + doc = fitz.Document() + + for pdf_page in pdf_pages: + page = fitz.open(pdf_page) + doc.insertPDF(page) + + metadata = fitz.open(metadata_file) + doc.setToC(metadata.getToC()) + doc.setMetadata(metadata.metadata) + doc.save(output_file, garbage=4) + + def merge_sidecars( input_files_groups, output_file, @@ -1254,7 +1277,7 @@ def build_pipeline(options, work_folder, log, context): task_merge_pages_ghostscript.active_if(options.output_type.startswith('pdfa')) task_merge_pages_qpdf = main_pipeline.merge( - task_func=merge_pages_qpdf, + task_func=merge_pages_mupdf, input=[task_combine_layers, task_render_hocr_debug_page, task_skip_page,