From 537aaf56d763463fe1f2cd763dd3c99c46db7888 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 23 Mar 2018 13:38:05 -0700 Subject: [PATCH] Remove duplication between page merge functions --- ocrmypdf/pipeline.py | 69 ++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/ocrmypdf/pipeline.py b/ocrmypdf/pipeline.py index 9db5d16e..a5682feb 100644 --- a/ocrmypdf/pipeline.py +++ b/ocrmypdf/pipeline.py @@ -900,29 +900,42 @@ def skip_page( re_symlink(input_file, output_file, log) +def _merge_pages_common( + input_files_groups, + output_file, + log, + context): + """Determine ordered list of PDF pages to merge. Returns PDF from which + metadata should be drawn if present (for qpdf).""" + + input_files = list(f for f in flatten_groups(input_files_groups) + if not f.endswith('.txt')) + metadata_file = next( + (ii for ii in input_files if ii.endswith('.repaired.pdf')), None) + input_files.remove(metadata_file) + + def input_file_order(s): + '''Sort order: All rendered pages followed + by their debug page.''' + key = page_number(s) * 10 + if 'debug' in os.path.basename(s): + key += 1 + return key + + pdf_pages = sorted(input_files, key=input_file_order) + log.debug("Final pages: " + "\n".join(pdf_pages)) + + return pdf_pages, metadata_file + + def merge_pages_ghostscript( input_files_groups, output_file, log, context): options = context.get_options() - def input_file_order(s): - '''Sort order: All rendered pages followed - by their debug page, if any, followed by Postscript stub. - Ghostscript documentation has the Postscript stub at the - beginning, but it works at the end and also gets document info - right that way.''' - if s.endswith('.ps'): - return 99999999 - key = page_number(s) * 10 - if 'debug' in os.path.basename(s): - key += 1 - return key - - input_files = (f for f in flatten_groups(input_files_groups) - if not f.endswith('.txt')) - pdf_pages = sorted(input_files, key=input_file_order) - log.debug("Final pages: " + "\n".join(pdf_pages)) + pdf_pages, _ = _merge_pages_common( + input_files_groups, output_file, log, context) input_pdfinfo = context.get_pdfinfo() ghostscript.generate_pdfa( pdf_version=input_pdfinfo.min_version, @@ -940,23 +953,8 @@ def merge_pages_qpdf( log, context): options = context.get_options() - - input_files = list(f for f in flatten_groups(input_files_groups) - if not f.endswith('.txt')) - metadata_file = next( - (ii for ii in input_files if ii.endswith('.repaired.pdf'))) - input_files.remove(metadata_file) - - def input_file_order(s): - '''Sort order: All rendered pages followed - by their debug page.''' - key = page_number(s) * 10 - if 'debug' in os.path.basename(s): - key += 1 - return key - - pdf_pages = sorted(input_files, key=input_file_order) - log.debug("Final pages: " + "\n".join(pdf_pages)) + pdf_pages, metadata_file = _merge_pages_common( + input_files_groups, output_file, log, context) reader_metadata = pypdf.PdfFileReader(metadata_file) pdfmark = get_pdfmark(reader_metadata, options) @@ -965,7 +963,8 @@ def merge_pages_qpdf( first_page = pypdf.PdfFileReader(pdf_pages[0]) writer = pypdf.PdfFileWriter() - writer._header = b'%PDF-' + _pdf_guess_version(pdf_pages[0]) # copy version from source + # copy version from source + writer._header = b'%PDF-' + _pdf_guess_version(pdf_pages[0]) writer.appendPagesFromReader(first_page) writer.addMetadata(pdfmark) writer_file = pdf_pages[0].replace('.pdf', '.metadata.pdf')