From 77d4cb367e14b7f86371e28e8795a28989084448 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Mon, 27 Jul 2015 15:22:00 -0700 Subject: [PATCH] Put ghostscript in a module --- ocrmypdf/ghostscript.py | 49 +++++++++++++++++++++++++++++++++++++++++ ocrmypdf/main.py | 42 +++-------------------------------- 2 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 ocrmypdf/ghostscript.py diff --git a/ocrmypdf/ghostscript.py b/ocrmypdf/ghostscript.py new file mode 100644 index 00000000..531ea01d --- /dev/null +++ b/ocrmypdf/ghostscript.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +from tempfile import NamedTemporaryFile +from subprocess import Popen, PIPE, check_call +from shutil import copy + + +def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log): + with NamedTemporaryFile(delete=True) as tmp: + args_gs = [ + 'gs', + '-dBATCH', '-dNOPAUSE', + '-sDEVICE=%s' % raster_device, + '-o', tmp.name, + '-r{0}x{1}'.format(str(xres), str(yres)), + input_file + ] + + p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=PIPE, + universal_newlines=True) + stdout, stderr = p.communicate() + if stdout: + log.debug(stdout) + if stderr: + log.error(stderr) + + if p.returncode == 0: + copy(tmp.name, output_file) + else: + log.error('Ghostscript rendering failed') + + +def generate_pdfa(pdf_pages, output_file): + with NamedTemporaryFile(delete=True) as gs_pdf: + args_gs = [ + "gs", + "-dQUIET", + "-dBATCH", + "-dNOPAUSE", + "-sDEVICE=pdfwrite", + "-sColorConversionStrategy=/RGB", + "-sProcessColorModel=DeviceRGB", + "-dPDFA", + "-sPDFACompatibilityPolicy=2", + "-sOutputICCProfile=srgb.icc", + "-sOutputFile=" + gs_pdf.name, + ] + args_gs.extend(pdf_pages) + check_call(args_gs) + copy(gs_pdf.name, output_file) diff --git a/ocrmypdf/main.py b/ocrmypdf/main.py index a3d8f03e..4eb05093 100755 --- a/ocrmypdf/main.py +++ b/ocrmypdf/main.py @@ -29,6 +29,7 @@ import ruffus.cmdline as cmdline from .hocrtransform import HocrTransform from .pageinfo import pdf_get_all_pageinfo from .pdfa import generate_pdfa_def +from .ghostscript import rasterize_pdf, generate_pdfa from . import tesseract @@ -405,28 +406,8 @@ def rasterize_with_ghostscript( xres = max(pageinfo['xres'], options.oversample or 0) yres = max(pageinfo['yres'], options.oversample or 0) - with NamedTemporaryFile(delete=True) as tmp: - args_gs = [ - 'gs', - '-dBATCH', '-dNOPAUSE', - '-sDEVICE=%s' % device, - '-o', tmp.name, - '-r{0}x{1}'.format(str(xres), str(yres)), - input_file - ] - p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=PIPE, - universal_newlines=True) - stdout, stderr = p.communicate() - if stdout: - log.debug(stdout) - if stderr: - log.error(stderr) - - if p.returncode == 0: - shutil.copy(tmp.name, output_file) - else: - log.error('Ghostscript rendering failed') + rasterize_pdf(input_file, output_file, xres, yres, device, log) @transform( @@ -722,24 +703,7 @@ def merge_pages( pdf_pages = sorted(input_files, key=input_file_order) log.info(pdf_pages) - - with NamedTemporaryFile(delete=True) as gs_pdf: - args_gs = [ - "gs", - "-dQUIET", - "-dBATCH", - "-dNOPAUSE", - "-sDEVICE=pdfwrite", - "-sColorConversionStrategy=/RGB", - "-sProcessColorModel=DeviceRGB", - "-dPDFA", - "-sPDFACompatibilityPolicy=2", - "-sOutputICCProfile=srgb.icc", - "-sOutputFile=" + gs_pdf.name, - ] - args_gs.extend(pdf_pages) - check_call(args_gs) - shutil.copy(gs_pdf.name, output_file) + generate_pdfa(pdf_pages, output_file) @transform(