ImageMagick - 不允许使用convert命令

我有多张喜欢的*.jpeg图片,想要合并成一个单独的*.pdf文件,就像这样:
convert Blatt1.jpg Blatt2.jpg Blatt3.jpg Blatt4.jpg out.pdf

我遇到了以下异常提示:
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408

这个问题是由什么引起的,我该如何解决?我做了一些研究,但没有找到关于这个特定问题的任何信息。
2个回答

ImageMagick有一些安全策略,出于安全原因禁用了某些权限。请在本答案底部查看原因。
您需要编辑一个配置文件来重新启用所需的操作。

使用您喜欢的文本编辑器打开/etc/ImageMagick-6/policy.xml,找到行<policy domain="coder" rights="none" pattern="PDF" />,将"none"替换为"read|write"

# Open the file 
sudo nano /etc/ImageMagick-6/policy.xml

# find and edit the line
<policy domain="coder" rights="none" pattern="PDF" />
# to :
<policy domain="coder" rights="read|write" pattern="PDF" />

关于ImageMagick安全策略 受限策略旨在防止来自第三方软件(如用于PDF文件的Ghostscript)的未知漏洞。请务必更新Ghostscript。

完美!正是我在寻找的东西!非常感谢! - n00b.exe
3对于任何来到这里的人,我建议看一下这个被标记为重复的问题。当有比让ImageMagick解码JPEG并在制作PDF时重新编码它们更安全和更无损的替代方案时,你真的不想放松ImageMagick的安全策略。 - ssokolow
禁用安全限制只是一个坏主意,无论它是否有效。ImageMagick认为存在安全问题。除非你确切知道自己在做什么,否则在这里正确的做法是使用其他软件,这些软件被其作者视为安全。 - Sqerstet
3@Sqerstet:你有没有阅读过关于安全policy.xml的ImageMagick文档?没有... ImageMagick认为存在安全问题。 不,他们并没有。限制策略是为了防止来自第三方软件(如用于PDF文件的Ghostscript)的未知漏洞。如果Ghostscript是最新版本,则没有(已知的)问题。祝你愉快,请阅读,阅读,阅读。 - cmak.fr
@Sqerstet: 你证实了我的想法。你之前的评论并不基于信息,而是一种信念。这个网站是一个提供帮助和信息的地方,不是信念的场所。如果你没有任何信息,请不要写下你的信念。感谢社区。 - cmak.fr
1既然你选择只读第一句话,我已经删除了它,因为它没有改变任何事情。你建议用户禁用设置,这些设置是出于"安全原因"(你的话),甚至没有解释其影响。抱歉,但这是不负责任的。 - Sqerstet
1如果我知道我只会处理由自己的脚本生成的自己的文件,我觉得可以安全地禁用阻止功能。有没有办法拥有多个策略? - Lenne
2附加信息:请确保您已安装GhostScript >= 9.26。之后,您可以尝试使用policy.xml进行操作。https://www.suse.com/support/kb/doc/?id=000019384 - Hermann Schwarz
脚本化:sudo sed -i 's#"coder" rights="none" pattern="PDF"#"coder" rights="read|write" pattern="PDF"#' /etc/ImageMagick-6/policy.xml - A T
修复(升级到较新的ghostscript)已经在bionic-updates中解决了(ghostscript-9.26~dfsg+0-0ubuntu0.18.04.17)。这意味着在任何更新的LTS版本(>= focal)中,您不会受到此错误的影响,但政策仍然存在。 - Olaf Dietsche

由于ImageMagick的convert功能存在一个已知的安全漏洞,因此PDF转换功能被禁用。
我建议您绕过这个问题,
  • 要么
    • 将图片导入到LibreOffice并保存文档。
    • 从LibreOffice中导出为pdf
  • 要么
    • 从存储库'universe'安装img2pdf

      sudo apt install img2pdf
      

      然后运行以下命令行,创建一个包含多个与问题相对应的图片的pdf文件,或者其他情况下类似的操作:

      img2pdf --out out.pdf Blatt1.jpg Blatt2.jpg Blatt3.jpg Blatt4.jpg
      
    • 有关微调的详细信息,请参阅手册man img2pdf


编辑:现在有一个解决方案了,在我的计算机上,ghostscript已经足够新,并且我认为在大多数最新的Linux操作系统中也是如此:
附加信息:请确保您安装了GhostScript >= 9.26。之后,您可以尝试修改policy.xml https://suse.com/support/kb/doc/?id=000019384
因此,我们可以根据接受的答案进行编辑,并开始再次使用ghostscript通过ImageMagick的convert功能将其转换为PDF文件。

3因为建议用一个互动替代批处理命令而被踩了,其实这个命令很容易从一个更大的脚本中提取出来。 - ssokolow
2因为没有建议人们去破坏默认的安全设置,所以给你点赞。这里还有另一个选择:https://askubuntu.com/a/1210721/304983 - Sqerstet
2@Sqerstet 这些默认的安全设置对大多数用户来说完全无关紧要。这并不是说它们没有用处:对于那些在某个网络服务中运行ImageMagick的少数用户来说,这确实是一个严重的安全问题,所以开发人员禁用它只是为了强制修复这个问题是正确的。但对于其他任何只是使用ImageMagick处理自己完全可控的PDF文件的用户来说,重新启用它比切换到一个完全不适合此任务的工具(如LibreOffice)更加明智。(尽管,唯一的“正确”解决方案是修复GhostScript...) - leftaroundabout
1@leftaroundabout 你几乎肯定是对的,但这不是重点。建议人们打破默认安全设置是一个糟糕的主意。正如你所说,解决办法是修复问题。或者使用其他替代方案,因为显然ImageMagick无法正确维护其软件。我推荐的替代方案并不是LibreOffice。 - Sqerstet