You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:40:30