bil*_*ter 239 pdf convert png imagemagick
convert /home/bill/TempScan/*.png myfile.pdf
Run Code Online (Sandbox Code Playgroud)
给出错误信息:
convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
van*_*ium 321
convert是一个强大的命令行工具来转换图形。它对 PDF 的支持由 Ghostscript 提供。由于9.24 版之前的Ghostscript中存在重大安全漏洞,convert因此作为权宜之计阻止了对 PDF 文件的使用。自 Ghostscript 9.24 版以来,该问题已得到修复。虽然 Ghostscript 版本已更新为所有支持的 Ubuntu 版本中的安全版本(此时从 Ubuntu 16.04 开始),但使用限制可能仍然存在。
策略文件是/etc/ImageMagick-6/policy.xml. 您可以以 root 用户身份编辑该文件以更改策略。
取消所有使用限制
对于没有运行网络服务器的桌面用户,简单地消除这些限制可能就足够了。为此,可以删除文件,但最好通过重命名来“移出文件”。使用此命令,您正在重命名文件。因此,所有政策都已取消,但您仍可以根据需要恢复:
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" /> -->
如果您不想消除所有安全策略,这就是要走的路。
abu*_*bua 94
正如钒发布的那样,您必须更改 ImageMagick 政策。
sudo vim /etc/ImageMagick-6/policy.xml
Run Code Online (Sandbox Code Playgroud)
并更换线
<policy domain="coder" rights="none" pattern="PDF" />
Run Code Online (Sandbox Code Playgroud)
和
<policy domain="coder" rights="read|write" pattern="PDF" />
Run Code Online (Sandbox Code Playgroud)
如果您只想允许写入,不允许读取,您也可以擦除read|上面一行中的部分。
顺便说一句,对于那些对 ImageMagick 漏洞感兴趣的人,这里有 2 个信息链接:
sso*_*low 13
而不是重新放松 ImageMagick 的安全限制,我只是使用img2pdf。
它是专门为这种用例设计的。
如果您的优先级是(按此顺序),您应该使用 img2pdf:
- 始终无损:嵌入在 PDF 中的图像对于每个像素将始终具有与输入完全相同的颜色信息
- 小:如果可能,输入图像和输出 PDF 之间的文件大小差异将仅是 PDF 容器本身的开销
- 快速:如果可能,输入图像将按原样粘贴到 PDF 文档中,无需对像素数据进行任何 CPU 占用的重新编码
传统的转换软件(如 ImageMagick)要么:
- 不是无损的,因为有损重新编码为 JPEG
- 不小,因为使用原始像素数据的浪费平面编码
- 不快,因为输入数据被重新编码
无需重新编码输入(在大多数常见情况下)的另一个优点是,img2pdf 能够处理比其他软件大得多的输入,因为原始像素数据永远不必加载到内存中。
这应该是等效的命令:
img2pdf --out myfile.pdf /home/bill/TempScan/*.png
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因您不能这样做(例如,无法安装新软件包),另一种无损转换的潜在途径是将convert您的图像转换为多页 TIFF 文件,然后tiff2pdf从 libtiff 工具中使用。
小智 7
abu_bua 的解决方案对我来说真的很好用。为方便起见,在一个命令行中使用sed:
sudo sed -i 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/g' /etc/ImageMagick-6/policy.xml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85837 次 |
| 最近记录: |