Ubuntu 24 LTS服务器迁移后,Django中Wand处理PDF报错MagickReadImage returns false(手动执行及Shell环境正常)
Ubuntu 24 LTS服务器迁移后,Django中Wand处理PDF报错MagickReadImage returns false(手动执行及Shell环境正常)
我这边有个运行多年的Django项目,核心功能之一是用Wand读取PDF并生成第一页的PNG截图展示在网站上。最近把服务器从Ubuntu 22 LTS升级到24 LTS后,这个功能突然挂了,折腾了好久都没解决,希望能得到帮助。
先说明下当前的环境:
- 操作系统:Ubuntu 24 LTS
- Python版本:3.12.3
- Django版本:5.2.4
- Wand版本:0.6.13
- Web服务:nginx 1.24.0 + gunicorn 23.0.0
- 无Docker,直接在服务器本地虚拟环境运行项目
- 报错出现在后台管理端的PDF处理流程中
核心处理代码
这是处理PDF转PNG的核心代码:
with Image(filename=pdf_location) as pdf: with Image(pdf.sequence[0]) as first_page_pdf: with first_page_pdf.convert('png') as first_page_png: first_page_png.background_color = Color('white') first_page_png.alpha_channel = 'remove' return first_page_png.make_blob()
报错信息
当在后台上传PDF处理时,会抛出这个错误:
MagickReadImage returns false, but did not raise ImageMagick exception. This can occur when a delegate is missing, or returns EXIT_SUCCESS without generating a raster.
我已经尝试过的所有操作
我查了大量资料,做了以下尝试,但都没解决问题:
- 确认GhostScript已安装:
$ gs --version 10.02.1 $ which gs /usr/bin/gs - 检查ImageMagick的policy.xml配置:
配置文件用的是ImageMagick包自带的policy-debian.xml默认内容,重点确保了PDF的读写权限配置:<policy domain="coder" rights="read|write" pattern="PDF" /> - 手动执行转换命令正常:
用GhostScript和ImageMagick手动转换测试PDF都能生成正确的PNG:# GhostScript方式 $ gs -sDEVICE=pngalpha -o page-%03d.png -r120 pdf-test.pdf # ImageMagick方式 $ convert -density 120 pdf-test.pdf page-%03d.png - Django Shell中执行代码正常:
进入项目的虚拟环境,启动Django Shell执行相同的转换逻辑,能成功生成PNG文件:>>> from wand.image import Image, Color >>> with Image(filename='pdf-test.pdf') as pdf: ... with Image(pdf.sequence[0]) as first_page_pdf: ... with first_page_pdf.convert('png') as first_page_png: ... first_page_png.background_color = Color('white') ... first_page_png.alpha_channel = 'remove' ... blob = first_page_png.make_blob() ... with open('screenshot.png', 'wb') as png: ... png.write(blob) ... 24420
发现的异常现象
有个奇怪的点:查看ImageMagick的委托列表时,找不到gs的身影,这是目前我能想到的唯一可能的问题,但不知道怎么修复:
$ convert -list configure | grep DELEGATES DELEGATES bzlib djvu fftw fontconfig freetype heic jbig jng jpeg lcms lqr lzma openexr openjp2 pango png ps raw tiff webp wmf x xml zlib zstd DELEGATES bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png raw tiff webp wmf x xml zlib
另外,执行convert -version时,输出里也没有pdf相关的标识:
$ convert -version Version: ImageMagick 6.9.12-98 Q16 x86_64 18038 https://legacy.imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC
之前这个代码在旧服务器上运行完全正常,所以我肯定是服务器迁移后某个配置(比如ImageMagick、nginx的配置)出了问题,但就是找不到根源,希望有人能给点思路。
内容来源于stack exchange
相关产品推荐
相关产品推荐

