Use TIFFs as intermediates

pdftoppm in recent versions (0.26.4,5) seems to be incapable of
producing valid TIFFs, so have it dump a .pnm file and let ImageMagick
figure out how to convert it to TIFF. This is not ideal, but at least
it works.
This commit is contained in:
Jim Barlow
2014-10-10 01:54:16 -07:00
parent 63dc753c1b
commit e5c79a6666
+21 -8
View File
@@ -179,6 +179,7 @@ def unpack_with_pdftoppm(
input_file,
output_file):
force_ppm = True
allow_jpeg = False
colorspace = 'color'
compression = 'deflate'
@@ -191,7 +192,8 @@ def unpack_with_pdftoppm(
for image in pageinfo['images']):
colorspace = 'gray'
if all(image['enc'] == 'jpeg' for image in pageinfo['images']):
if allow_jpeg and \
all(image['enc'] == 'jpeg' for image in pageinfo['images']):
output_format = 'jpeg'
args_pdftoppm = [
@@ -204,7 +206,7 @@ def unpack_with_pdftoppm(
if not force_ppm:
if output_format == 'tiff':
args_pdftoppm.append('-tiff')
if compression:
if False and compression:
args_pdftoppm.append('-tiffcompression')
args_pdftoppm.append(compression)
elif output_format == 'jpeg':
@@ -226,11 +228,21 @@ def unpack_with_pdftoppm(
logger.error(iterdecode(stderr, sys.getdefaultencoding(),
errors='ignore'))
if p.returncode != 0:
raise CalledProcessError(' '.join(args_pdftoppm))
raise CalledProcessError(p.returncode, args_pdftoppm)
@transform(unpack_with_pdftoppm, suffix(".pnm"), ".tif")
def convert_to_tiff(input_file, output_file):
args_convert = [
'convert',
input_file,
output_file
]
check_call(args_convert)
@active_if(options.preprocess_deskew != 0)
@transform(unpack_with_pdftoppm, suffix(".pnm"), ".deskewed.pnm")
@transform(convert_to_tiff, suffix(".tif"), ".deskewed.tif")
def deskew_imagemagick(input_file, output_file):
args_convert = [
'convert',
@@ -238,6 +250,7 @@ def deskew_imagemagick(input_file, output_file):
'-deskew', '40%',
'-gravity', 'center',
'-extent', '{width_pixels}x{height_pixels}'.format(**pageinfo),
'+repage',
output_file
]
@@ -252,7 +265,7 @@ def deskew_imagemagick(input_file, output_file):
logger.error(stderr)
if p.returncode != 0:
raise CalledProcessError(' '.join(args_convert))
raise CalledProcessError(p.returncode, args_convert)
def clean_unpaper(pageinfo, infile, prefix, output_folder):
@@ -276,13 +289,13 @@ def clean_unpaper(pageinfo, infile, prefix, output_folder):
return tmpfile.name
@merge([unpack_with_pdftoppm, deskew_imagemagick],
os.path.join(options.tmp_fld, "%04i.for_ocr.pnm" % pageno))
@merge([convert_to_tiff, deskew_imagemagick],
os.path.join(options.tmp_fld, "%04i.for_ocr.tif" % pageno))
def select_ocr_image(infiles, output_file):
re_symlink(infiles[-1], output_file, logger, logger_mutex)
@transform(select_ocr_image, suffix(".for_ocr.pnm"), ".hocr")
@transform(select_ocr_image, suffix(".for_ocr.tif"), ".hocr")
def ocr_tesseract(
input_file,
output_file):