convert /home/bill/TempScan/*.png  myfile.pdf


给出错误消息:

convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.


任何帮助将不胜感激!

评论

看看这个对我有用! askubuntu.com/questions/1081895/…

您应该从标题中删除单词batch。 Google会将常见的搜索字词定向到重复的askubuntu.com/questions/1127260/imagemagick-convert-not-allowed。

#1 楼

convert是功能强大的命令行工具,可以转换图形。它对PDF的支持由Ghostscript提供。由于9.24版之前的Ghostscript中存在重大安全漏洞,因此,将PDF文件上的convert用作权宜之计已被阻止。自Ghostscript 9.24版以来,此问题已得到解决。虽然Ghostscript版本已更新为所有受支持的Ubuntu版本中的安全版本(当前从Ubuntu 16.04起),但使用限制可能仍然存在。

策略文件为/etc/ImageMagick-6/policy.xml。您可以以root用户身份编辑该文件以更改策略。

消除所有使用限制

对于未运行Web服务器的桌面用户,只需消除这些限制可能就足够了。为此,可以删除文件,但是更好的做法是通过重命名“将文件移出”。使用此命令,您将重命名文件。结果,所有策略都被取消,但是如果需要,您仍然可以还原:

sudo mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout

要还原为原始状态,只需将其重命名为原始名称:

sudo mv /etc/ImageMagick-6/policy.xmlout /etc/ImageMagick-6/policy.xml

请注意,移出策略文件会降低系统安全性。

仅消除合并为PDF的限制

对于您的特定情况,gene_wood在评论中指出,可以通过注释掉一行来选择性地放宽使用PDF文件的政策:

<policy domain="coder" rights="none" pattern="PDF" />

编辑该文件,并在此行周围加上注释标记以禁用此规则:

<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->

如果您不想消除所有安全策略,这是一种方法。

评论


多亏了钒,我按建议的方式将文件重命名,因此可以正常工作。

–bill-lancaster
18-10-8在11:58

我进入了policy.xml文件,找到了阻止我将png文件组合为pdf并注释掉的那行。如果您想保留其他规则但允许使用pdf,则该行为

–gene_wood
18-10-8在22:33

@gene_wood,谢谢:我添加到帖子中是因为它为希望更加谨慎地消除限制的用户提供了更多的见解和选择。

–钒
'18 -10-9在9:18

好的,这可以在Ubuntu 18.04中与imagemagick 8:6.9.7.4 + dfsg-16ubuntu6.4一起使用。谢谢。

–Geppettvs D'Constanzo
18-10-14在22:19



第二种方法对我有用,但第一种没有。

–壁架
19年2月16日在4:07

#2 楼

钒发布后,您必须更改ImageMagick政策。

sudo vim /etc/ImageMagick-6/policy.xml


并替换行

<policy domain="coder" rights="none" pattern="PDF" />


使用

<policy domain="coder" rights="read|write" pattern="PDF" />


如果只想允许写而不是读,还可以擦除上面一行中的read|部分。







BTW,对于那些对ImageMagick漏洞感兴趣的人,这里有2条信息链接:


https://www.enisa.europa.eu/publications/info-notes/what2019s-behind-imagemagick-vulnerability
https://security.stackexchange.com/questions/122328/how-to-prevent-the -latest-imagemagick-漏洞


评论


简短而直截了当。好答案。

–弗朗西斯科·卢兹(Francisco Luz)
20 Sep 13 '20:11

#3 楼

我不会再放松ImageMagick的安全限制,而是使用img2pdf。

它是专门为这种用例设计的。


您应该使用img2pdf,如果您的优先级是(按此顺序):



总是无损:嵌入在PDF中的图像对于每个像素始终具有与输入完全相同的颜色信息

小:如果可能,输入图像和输出PDF之间的文件大小差异仅是PDF容器本身的开销。

快速:如果可能,输入图像仅按原样粘贴到PDF文档中,而无需CPU过多的像素数据重新编码

传统的转换软件(如ImageMagick)可以:


不是无损的,因为有损地将其重新编码为JPEG
不是太小,因为对原始像素数据使用了浪费的平面编码
不能很快,因为输入数据被重新编码了

n的另一个优点必须重新编码输入(在大多数常见情况下)是,img2pdf能够处理比其他软件大得多的输入,因为原始像素数据永远不必加载到内存中。


这应该是等效的命令:

 img2pdf --out myfile.pdf /home/bill/TempScan/*.png 
 


如果出于某些原因,您不能这样做(例如无法安装新软件包),另一种无损转换的潜在途径是将图像convert转换成多页TIFF文件,然后使用libtiff工具中的tiff2pdf

评论


+1是一种很好的解决方法,可以避免ImageMagick的安全限制:-)

– sudodus
20年6月9日在6:56

#4 楼

解决方案abu_bua的解决方案对我来说真的很好。为了方便起见,在一个带有sed的命令行中:

sudo sed -i 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/g' /etc/ImageMagick-6/policy.xml


#5 楼

这是一种更方便的方法,可自动获取policy.xml文件的位置并对其全部执行搜索/替换:
for file in `convert -list policy | grep "Path:" | grep -v built | sed 's/Path: \(.*\)//g'`; do sed -i 's/domain="coder" rights="none" pattern="PDF"/domain="coder" rights="read|write" pattern="PDF"/g' $file; done