我正在构建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
我搜索了这个问题,但找不到正确的解决方案。大多数人都这样说:
这些解决方案对我不起作用。你有没有遇到这样的问题?有其他解决方案吗?
答案 0 :(得分:2)
例外......
Exception TypeError:类型错误("类型' NoneType'没有len()",)的绑定方法Wand.image.Image的Image.del :(空)忽略
...是由魔杖认为已加载光栅图像引起的 - 即使它不是。此TypeError
已在以后的版本中得到解决,但这是问题的症状。真正的解决方案是发现 ghostscript无法读取/呈现PDF的原因。
你有没有遇到过这样的问题?
通常PDF是问题所在。也许是一个格式错误的数据流,或者是ghostscript / libtiff无法理解的令人困惑的元标记。无论原因如何,gs都以非零错误状态退出,而ImageMagick将请求拒绝为委托错误。
有其他解决方案吗?
验证ImageMagick是否可以按预期呈现文件。
convert -density 300x300 source.pdf output%d.png
-debug All
查看所有操作的详细日志。验证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是否成功完成。