Imagemagick安全策略似乎不允许我执行从pdf到png的转换。转换其他扩展名似乎可行,只是不能从pdf中转换。自安装它以来,我尚未更改任何imagemagick设置...如果操作系统很重要,我正在使用Arch Linux。
user@machine $ convert -density 300 -depth 8 -quality 90 input.pdf output.png
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert: no images defined `output.png' @ error/convert.c/ConvertImageCommand/3288.
答案 0 :(得分:68)
好吧,我补充了
<policy domain="coder" rights="read | write" pattern="PDF" />
在</policymap>
中/etc/ImageMagick-7/policy.xml
的前面,这使得它可以再次工作,但不确定其安全性。
答案 1 :(得分:39)
正如一些评论中指出的那样,您需要在/etc/ImageMagick-7/policy.xml
中编辑ImageMagick的策略。更具体地说,在撰写本文时(2019年5月1日),在ArchLinux中,以下行未注释:
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
只需将其包装在<!--
和-->
之间即可对其进行注释,然后pdf转换应再次起作用。
答案 2 :(得分:11)
对我来说,在我的archlinux系统上,该行已被取消注释。我必须将“ none”替换为“ read | write”才能使其正常工作。
答案 3 :(得分:7)
在Arch Linux上对我来说我不得不发表评论:
Overlay
答案 4 :(得分:6)
或者,您可以使用 img2pdf 将图像转换为 pdf。在 Debian 或 Ubuntu 上安装它:
sudo apt install img2pdf
将一张或多张图片转换为 pdf:
img2pdf img.jpg -o output.pdf
它使用与 imagemagick 不同的机制将图像嵌入到 pdf 中。在可能的情况下,Img2pdf 将图像直接嵌入到 pdf 中,无需对图像进行解码和重新编码。
答案 5 :(得分:5)
补充 Stefan Seidel 的答案。
好吧,至少在 Ubuntu 20.04.2 LTS 或其他版本中,您无法真正以 GUI 方式直接编辑 policy.xml 文件。这是编辑它的终端方式。
通过输入此命令在终端中打开 policy.xml 文件 -
sudo nano /etc/ImageMagick-6/policy.xml
现在,直接在终端编辑文件,找到
<policy domain="coder" rights="none" pattern="PDF" />
并将 none
替换为 read|write
,如图所示。然后按 Ctrl+X 退出。
答案 6 :(得分:4)
在Ubuntu 20.04中工作
将此行添加到<policymap>
<policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" />
评论这些行:
<!--
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
-->
答案 7 :(得分:4)
在修复 Ghostscript 后保留了 ImageMagick 更改,因为应用程序(尤其是 Web 应用程序)经常将任意用户提供的文件提供给 ImageMagick,并不总是正确强制执行格式限制,并且由于 Postscript(PDF 使用的)是图灵-在沙箱中运行的完整编程语言,沙箱中总是有另一个漏洞的可能性。
最好保持配置,以便 ImageMagick 拒绝处理需要运行程序的文件,而是在您有意希望允许 Postscript 渲染时直接调用 Ghostscript。
这将通过像这样的 Ghostscript 命令来完成:
gs -dSAFER -r600 -sDEVICE=pngalpha -o foo.png myfile.pdf
是的,这是 ImageMagic 调用的 GhostScript 命令的变体。 (请参阅 ImageMagick 的 delegates.xml
。-o
是 -dBATCH -dNOPAUSE -sOutputFile=
的简写)
重要的是 ImageMagick 保持锁定状态,您无需不必要地调用中间程序,并且您可以更好地控制渲染参数。 (例如,-r600
是要呈现的 DPI,更改 -sDEVICE=pngalpha
允许您直接呈现为您想要的格式)
答案 8 :(得分:2)
nextcloud遇到了这个问题,该问题无法为pdf文件创建缩略图。
但是,建议的步骤都无法为我解决问题。
最终,我找到了原因:可接受的答案确实起作用,但是在编辑policy.xml文件后,我还必须重新启动php-fpm:
referrers
答案 9 :(得分:1)
在Ubuntu 19.10上,我已经在/etc/ImageMagick-6/policy.xml中完成了此操作
取消注释
<policy domain="module" rights="read | write" pattern="{PS,PDF,XPS}" />
对此发表评论
<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
此后,此命令将正常运行
convert -thumbnail x300 -background white -alpha remove sample.pdf sample.png
答案 10 :(得分:1)
这是由于Ghostscript 9.24(source)中已解决的安全漏洞引起的。如果您有较新的版本,则不再需要此解决方法。在具有Ghostscript 6的Ubuntu 19.10上,这意味着:
确保您的Ghostscript≥9.24:
gs --version
如果是,只需从/etc/ImageMagick-6/policy.xml
中删除以下整个部分:
<!-- disable ghostscript format types -->
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
答案 11 :(得分:1)
Manjaro 2021 年 4 月
只需删除 /etc/ImageMagick-7/policy.xml 中 <policymap>
内未注释的行