diff --git a/docs/topics/settings.rst b/docs/topics/settings.rst index a98e311881..be4abb9ff1 100644 --- a/docs/topics/settings.rst +++ b/docs/topics/settings.rst @@ -187,6 +187,13 @@ Default: ``/usr/bin/libreoffice`` Path to the libreoffice binary used to call LibreOffice for office document conversion. +**CONVERTER_PDFTOPPM_PATH** + +Default: ``/usr/bin/pdftoppm`` + +Path to the Popple program pdftoppm. + + Storage ======= diff --git a/mayan/apps/converter/backends/python.py b/mayan/apps/converter/backends/python.py index c6dad6bb1a..95778f27df 100644 --- a/mayan/apps/converter/backends/python.py +++ b/mayan/apps/converter/backends/python.py @@ -1,33 +1,30 @@ from __future__ import absolute_import +import io import logging import os import tempfile -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO - import slate from PIL import Image import sh -try: - pdftoppm = sh.Command('/usr/bin/pdftoppm') -except sh.CommandNotFound: - pdftoppm = None -else: - pdftoppm = pdftoppm.bake('-png') - from common.utils import fs_cleanup from mimetype.api import get_mimetype from . import ConverterBase -from ..exceptions import UnknownFileFormat +from ..exceptions import ConvertError, UnknownFileFormat from ..literals import (DEFAULT_FILE_FORMAT, DEFAULT_PAGE_NUMBER, TRANSFORMATION_RESIZE, TRANSFORMATION_ROTATE, TRANSFORMATION_ZOOM) +from ..settings import PDFTOPPM_PATH + +try: + pdftoppm = sh.Command(PDFTOPPM_PATH) +except sh.CommandNotFound: + pdftoppm = None +else: + pdftoppm = pdftoppm.bake('-png') Image.init() logger = logging.getLogger(__name__) @@ -72,7 +69,7 @@ class Python(ConverterBase): try: if mimetype == 'application/pdf' and pdftoppm: - image_buffer = StringIO() + image_buffer = io.BytesIO() pdftoppm(input_filepath, f=page, l=page, _out=image_buffer) image_buffer.seek(0) im = Image.open(image_buffer) @@ -81,6 +78,8 @@ class Python(ConverterBase): except Exception as exception: logger.error('Error converting image; %s', exception) # Python Imaging Library doesn't recognize it as an image + raise ConvertError + except IOError: # cannot identify image file raise UnknownFileFormat finally: if tmpfile: diff --git a/mayan/apps/converter/settings.py b/mayan/apps/converter/settings.py index 6fb274be9a..cf09c32448 100644 --- a/mayan/apps/converter/settings.py +++ b/mayan/apps/converter/settings.py @@ -14,5 +14,6 @@ register_settings( {'name': u'GM_SETTINGS', 'global_name': u'CONVERTER_GM_SETTINGS', 'default': u''}, {'name': u'GRAPHICS_BACKEND', 'global_name': u'CONVERTER_GRAPHICS_BACKEND', 'default': u'converter.backends.python.Python', 'description': _(u'Graphics conversion backend to use. Options are: converter.backends.imagemagick.ImageMagick, converter.backends.graphicsmagick.GraphicsMagick and converter.backends.python.Python')}, {'name': u'LIBREOFFICE_PATH', 'global_name': u'CONVERTER_LIBREOFFICE_PATH', 'default': u'/usr/bin/libreoffice', 'exists': True, 'description': _(u'Path to the libreoffice program.')}, + {'name': u'PDFTOPPM_PATH', 'global_name': u'CONVERTER_PDFTOPPM_PATH', 'default': u'/usr/bin/pdftoppm', 'exists': True, 'description': _(u'Path to the Popple program pdftoppm.')}, ] )