OCRmyPDF/ocrmypdf/ghostscript.py

65 lines
2.0 KiB
Python
Raw Normal View History

2015-07-27 15:22:00 -07:00
#!/usr/bin/env python3
2015-07-28 04:36:58 -07:00
# © 2015 James R. Barlow: github.com/jbarlow83
2015-07-27 15:22:00 -07:00
from tempfile import NamedTemporaryFile
from subprocess import Popen, PIPE, check_call
from shutil import copy
from . import get_program
from .pdfa import SRGB_ICC_PROFILE
2015-07-27 15:22:00 -07:00
def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
pageno=1):
2015-07-27 15:22:00 -07:00
with NamedTemporaryFile(delete=True) as tmp:
args_gs = [
get_program('gs'),
'-dQUIET',
'-dSAFER',
'-dBATCH',
'-dNOPAUSE',
2015-07-27 15:22:00 -07:00
'-sDEVICE=%s' % raster_device,
'-dFirstPage=%i' % pageno,
'-dLastPage=%i' % pageno,
2015-07-27 15:22:00 -07:00
'-o', tmp.name,
'-r{0}x{1}'.format(str(round(xres)), str(round(yres))),
2015-07-27 15:22:00 -07:00
input_file
]
p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=PIPE,
universal_newlines=True)
stdout, stderr = p.communicate()
if stdout:
2016-10-27 15:36:20 -07:00
if 'error' in stdout:
log.error(stdout) # Ghostscript puts errors in stdout
else:
log.debug(stdout)
2015-07-27 15:22:00 -07:00
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, threads=1):
2015-07-27 15:22:00 -07:00
with NamedTemporaryFile(delete=True) as gs_pdf:
args_gs = [
get_program("gs"),
2015-07-27 15:22:00 -07:00
"-dQUIET",
"-dBATCH",
"-dNOPAUSE",
'-dNumRenderingThreads=' + str(threads),
2015-07-27 15:22:00 -07:00
"-sDEVICE=pdfwrite",
"-dAutoRotatePages=/None",
2015-07-27 15:22:00 -07:00
"-sColorConversionStrategy=/RGB",
"-sProcessColorModel=DeviceRGB",
"-dJPEGQ=95",
"-dPDFA=2",
"-dPDFACompatibilityPolicy=1",
2015-07-27 15:22:00 -07:00
"-sOutputFile=" + gs_pdf.name,
]
args_gs.extend(pdf_pages)
check_call(args_gs)
copy(gs_pdf.name, output_file)