AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1081895
Accepted
bill-lancaster
bill-lancaster
Asked: 2018-10-09 00:30:52 +0800 CST2018-10-09 00:30:52 +0800 CST 2018-10-09 00:30:52 +0800 CST

使用 convert 将 .png 批量转换为 .pdf 时出现问题

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

给出错误信息:

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

任何帮助,将不胜感激!

pdf convert imagemagick png
  • 5 5 个回答
  • 95889 Views

5 个回答

  • Voted
  1. Best Answer
    vanadium
    2018-10-09T01:00:19+08:002018-10-09T01:00:19+08:00

    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" /> -->

    如果您不想消除所有安全策略,这就是要走的路。

    • 346
  2. abu_bua
    2018-10-20T11:01:26+08:002018-10-20T11:01:26+08:00

    正如钒发布的那样,您必须更改 ImageMagick 政策。

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

    并更换线路

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

    和

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

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


    顺便说一句,对于那些对 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-vulnerability
    • 100
  3. ssokolow
    2020-02-16T05:37:09+08:002020-02-16T05:37:09+08:00

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

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

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

    • 始终无损:嵌入在 PDF 中的图像将始终具有与输入的每个像素完全相同的颜色信息
    • 小:如果可能,输入图像和输出 PDF 之间的文件大小差异只会是 PDF 容器本身的开销
    • 快速:如果可能,输入图像只是按原样粘贴到 PDF 文档中,而不需要对像素数据进行任何 CPU 消耗的重新编码

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

    1. 不是无损的,因为有损重新编码为 JPEG
    2. 不小,因为对原始像素数据使用了浪费的 flate 编码
    3. 不快,因为输入数据被重新编码

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

    这应该是等效的命令:

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

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

    • 17
  4. Antonin GAVREL
    2019-11-03T04:59:33+08:002019-11-03T04:59:33+08:00

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

    sudo sed -i 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/g' /etc/ImageMagick-6/policy.xml
    
    • 8
  5. Darren Hicks
    2020-07-23T12:56:55+08:002020-07-23T12:56:55+08:00

    这是一种更方便的方法,可以自动获取 policy.xml 文件的位置并对其全部执行搜索/替换:

    for file in `convert -list policy | grep "Path:" | grep -v built | sed 's/Path: \(.*\)/\1/g'`; do sed -i 's/domain="coder" rights="none" pattern="PDF"/domain="coder" rights="read|write" pattern="PDF"/g' $file; done
    
    • 3

相关问题

  • 如何在 LyX 中配置导出格式?

  • 如何合并多个PDF文件?

  • 我可以将 PDF 设为“打印到文件”的默认设置吗

  • 是否可以直接在 Chrome 中查看 PDF 而无需先下载它们?

  • 如何突出显示或注释 PDF?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve