类型错误:类型错误("类型为'NoneType'的对象没有长度",) 在转换PDF为图像时

2024-10-02 00:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建基于Django-REST框架,在macosenv上,将上传的pdf转换为图像的API。 当然,在系统上安装了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("object of type 'NoneType' has no len()",) in bound method Image.del of wand.image.Image: (empty) ignored

在线:

^{pr2}$

以下是trackback:

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

Traceback (most recent call last): File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response response = self.process_exception_by_middleware(e, request)

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view return view_func(*args, **kwargs)

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view 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", line 466, in dispatch response = self.handle_exception(exc) File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/rest_framework/views.py", line 463, in dispatch response = handler(request, *args, **kwargs)

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/data_api/announcement/views.py", line 582, in post filelist = self._slice_n_convert_pdf_to_image(tmp_dir, file_obj.name)

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/data_api/announcement/views.py", line 557, in _slice_n_convert_pdf_to_image with Image(filename=pdffile, resolution=300) as img:

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/wand/image.py", line 2744, in init self.read(filename=filename, resolution=resolution)

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/wand/image.py", line 2822, in read self.raise_exception()

File "/Volumes/WORK/Projects/BazeanAnalytics/web-app-baz-analytics/API/data-api/venv/lib/python2.7/site-packages/wand/resource.py", line 222, in raise_exception raise e DelegateError: FailedToExecuteCommand `'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pngalpha' -dTextAlphaBits=4 -dGraphicsAlphaBits=4 '-r300x300' '-sOutputFile=/var/folders/kl/5qf5q4x50xj2rbdp8t2prsbh0000gn/T/magick-645443wbRHI2nYLWV%d' '-f/var/folders/kl/5qf5q4x50xj2rbdp8t2prsbh0000gn/T/magick-64544qCe-gNjUlDXO' '-f/var/folders/kl/5qf5q4x50xj2rbdp8t2prsbh0000gn/T/magick-64544VNalr_sUZm2w'' (1) @ error/pdf.c/InvokePDFDelegate/292

我在谷歌上搜索这个问题,但找不到正确的解决办法。他们大多这样说:

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

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


Tags: inpyapiwebappdatalinebaz
1条回答
网友
1楼 · 发布于 2024-10-02 00:36:17

例外。。。在

Exception TypeError: TypeError("object of type 'NoneType' has no len()",) in bound method Image.del of wand.image.Image: (empty) ignored

。。。是由于魔杖认为光栅图像已经加载,即使它没有加载。这个TypeError已经在将来的版本中得到了解决,但这是问题的一个症状。真正的解决方案是发现为什么无法读取/呈现PDF。在

Have you ever faced issues like this?

通常PDF是问题所在。可能是格式错误的数据流,或者ghostscript/libtiff无法理解的令人困惑的元标记。不管是什么原因,gs以非零错误状态退出,ImageMagick将作为委派错误拒绝请求。在

Have any other solutions?

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

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

    ^{pr2}$
    • 观察上面的任何消息,但立即调用$?gs命令之后,通过返回0状态验证ghostscript成功完成。在

相关问题 更多 >

    热门问题