TypeError:TypeError(“类型为'NoneType'的对象没有len()”,)将pdf转换为图像

时间:2018-01-30 10:15:11

标签: python django macos imagemagick ghostscript

我正在构建API,它将上传的pdf转换为基于Django REST框架的图像,在MacOS环境中。 当然,在系统上安装了imagemagick和ghostscript。

这是我的代码段。

from wand.image import Image 
try:
       with Image(filename=pdffile, resolution=300) as img:
                for i, page in enumerate(img.sequence):
                    filename = '{}-{}.jpg'.format(imagefilename, i + 1)
                    file ='{}/{}'.format(tmp_dir, filename)
                    Image(page).save(filename=file)
                    filelist.append(filename)
except WandException as e:
       print e
except TypeError as e:
       print e

但是我收到了这个错误:

  

Exception TypeError:TypeError(“类型为'NoneType'的对象没有   len()“,)在wand.image.Image的绑定方法Image。 del 中:   (空)忽略

在这一行:

with Image(filename=pdffile, resolution=300) as img:

这是引用:

内部服务器错误:/ api / v1 / admin / upload / pdf

  

Traceback(最近一次调用最后一次):文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/core/handlers/base.py”   第149行,在get_response中       response = self.process_exception_by_middleware(e,request)

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/core/handlers/base.py”   第147行,在get_response中       response = wrapped_callback(request,* callback_args,** callback_kwargs)

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py”   第58行,在wrapped_view中       return view_func(* args,** kwargs)

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/views/generic/base.py”   第68行,在视野中       return self.dispatch(request,* args,** kwargs)file“/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages /rest_framework/views.py”   第466行,在派遣中       response = self.handle_exception(exc)文件“/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/rest_framework/views.py ”   第463行,在发送中       response = handler(request,* args,** kwargs)

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/data_api/announcement/views.py”   第582行,在帖子中       filelist = self._slice_n_convert_pdf_to_image(tmp_dir,file_obj.name)

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/data_api/announcement/views.py”   第557行,在_slice_n_convert_pdf_to_image中       with Image(filename = pdffile,resolution = 300)as img:

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/wand/image.py”   第2744行,在 init 中       self.read(filename = filename,resolution = resolution)

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/wand/image.py”   第2822行,正在阅读中       self.raise_exception()

     

文件   “/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/wand/resource.py”   第222行,在raise_exception中       提高ËDelegateError:FailedToExecuteCommand` 'GS' -sstdout =%stderr的-dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap = 5亿-dAlignToPixels = 0 -dGridFitTT = 2 '-sDEVICE = pngalpha' -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4   '-r300x300'   '-sOutputFile = /变种/文件夹/ KL / 5qf5q4x50xj2rbdp8t2prsbh0000gn / T / magick-645443wbRHI2nYLWV%d'   '-f的/ var /文件夹/ KL / 5qf5q4x50xj2rbdp8t2prsbh0000gn / T / magick-64544qCe-gNjUlDXO'   '-f的/ var /文件夹/ KL / 5qf5q4x50xj2rbdp8t2prsbh0000gn / T / magick-64544VNalr_sUZm2w'”   (1)@ error / pdf.c / InvokePDFDelegate / 292

我搜索了这个问题,但找不到正确的解决方案。大多数人都这样说:

  • 重新安装ImageMagick / Ghostscript。
  • 检查系统环境路径变量。

这些解决方案对我不起作用。你有没有遇到这样的问题?有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

例外......

  

Exception TypeError:类型错误("类型' NoneType'没有len()",)的绑定方法Wand.image.Image的Image.del :(空)忽略

...是由魔杖认为已加载光栅图像引起的 - 即使它不是。此TypeError已在以后的版本中得到解决,但这是问题的症状。真正的解决方案是发现 无法读取/呈现PDF的原因。

  

你有没有遇到过这样的问题?

通常PDF是问题所在。也许是一个格式错误的数据流,或者是ghostscript / libtiff无法理解的令人困惑的元标记。无论原因如何,gs都以非零错误状态退出,而ImageMagick将请求拒绝为委托错误。

  

有其他解决方案吗?

  1. 验证ImageMagick是否可以按预期呈现文件。

    convert -density 300x300 source.pdf output%d.png
    
    • 观察写入stdout&的任何警告/错误消息。标准错误,
    • 使用-debug All查看所有操作的详细日志。
  2. 验证Ghostscript是否可以按预期呈现文件。

     gs -sstdout=%stderr -dQUIT -dSAFER -dBATCH \
        -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
        -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=pngalpha \
        -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300x300 \
        -sOutputFile=output%d.png \
        -fsource.pdf
    
    • 观察上述任何消息,但请立即致电$?gs命令之后,通过返回0状态来验证ghostscript是否成功完成。