由蟒蛇用户棒将PDF转换为JEPG,在码头工人提高wand.exceptions.WandRunti

2019-10-29 03:21发布

我想PDF的第一页转换为图像。 而我下面的代码是在我的本地环境正常工作:Ubuntu的18。但是,当我在泊坞窗环境中运行,它失败并引发:

wand.exceptions.WandRuntimeError:MagickReadImage返回false,但没有提高ImageMagick的例外。 委托丢失时,会出现此罐,或不产生光栅返回EXIT_SUCCESS。

我缺少的依赖? 或者是其他东西? 我不知道它指的是作为“代理”。

我看到的源代码,它在这里失败: wand/image.py::7873lines

if blob is not None:
    if not isinstance(blob, abc.Iterable):
        raise TypeError('blob must be iterable, not ' +
                        repr(blob))
    if not isinstance(blob, binary_type):
        blob = b''.join(blob)
    r = library.MagickReadImageBlob(self.wand, blob, len(blob))
elif filename is not None:
    filename = encode_filename(filename)
    r = library.MagickReadImage(self.wand, filename)
if not r:
    self.raise_exception()
    msg = ('MagickReadImage returns false, but did raise ImageMagick '
           'exception. This can occurs when a delegate is missing, or '
           'returns EXIT_SUCCESS without generating a raster.')
    raise WandRuntimeError(msg)

r = library.MagickReadImageBlob(self.wand, blob, len(blob))返回true在我当地的环境,但在泊坞窗则返回false 。 此外,ARGS blob和LEN(BLOB)是一样的。

def pdf2img(fp, page=0):
    """
    convert pdf to jpeg image
    :param fp: a file-like object
    :param page:
    :return: (Bool, File) if False, mean the `fp` is not pdf, if True, then the `File` is a file-like object
        contain the `jpeg` format data
    """
    try:
        reader = PdfFileReader(fp, strict=False)
    except Exception as e:
        fp.seek(0)
        return False, None
    else:
        bytes_in = io.BytesIO()
        bytes_out = io.BytesIO()
        writer = PdfFileWriter()

        writer.addPage(reader.getPage(page))
        writer.write(bytes_in)
        bytes_in.seek(0)

        im = Image(file=bytes_in, resolution=120)
        im.format = 'jpeg'
        im.save(file=bytes_out)
        bytes_out.seek(0)
        return True, bytes_out

Answer 1:

我不知道它指的是作为“代理”。

与ImageMagick的,一个“委托”是指任何共享库,实用程序或外部,做文件类型的实际编码和解码方案。 具体地,文件格式为栅格。

我缺少的依赖?

最有可能的。 对于PDF,你需要一个ghostscript安装在泊坞窗实例。

或者是其他东西?

有可能,但很难确定没有错误消息。 该“WandRuntimeError”的例外是一个包罗万象的。 它的存在是因为光栅无法从PDF生成,并且都法杖和ImageMagick的无法确定原因 。 通常会有如果委托失败例外,安全政策信息,或OS错误。

最好的办法是运行几个gs命令来查看是否ghostscript的正常工作。

gs -sDEVICE=pngalpha -o page-%03d.png -r120 input.pdf

如果上述方法无效,那么就用ImageMagick的重试

convert -density 120 input.pdf page-%03d.png


文章来源: User wand by python to convert pdf to jepg, raise wand.exceptions.WandRuntimeError in docker