既然 imagemagick 不再适用于我的共享托管服务器,我该如何将 pdf 转换为 png

How can I convert pdf to png now that imagemagik no longer works on my shared hosting server

---编辑---

正如下面和评论中所讨论的,我的 ISP 在 6 月 25 日为 Imagemagick 采用了默认值 policy.xml,它关闭了 pdf 文件的转换,这正是我需要的。我从我的修改请求中得到了蟋蟀,我不认为这是一个好的解决方案,因为它可以在下一次升级时恢复。我发现 Ghostscript 可以转换 pdf 文件。如果我走在正确的轨道上,我将不胜感激,但到目前为止,这是非常有希望的。

我现有的电话是这个

convert -density 300 -quality 100 \"" . Aqualarm.pdf . "\"  -resize 800  -sharpen 0x1.0 -flatten \"" . Aqualarm.png  . "\"

建议的 Ghostscript 版本是这个

gs -dNOPAUSE -dBATCH -r300 -dDownScaleFactor=3  -sDEVICE=png16m -sOutputFile="Aqualarm_%03d.png" Aqualarm.pdf

在这种情况下,Aqualarm 是一个测试文件。

---编辑 2---

如上所述使用 Ghostscript 并进行了一次修改。转换以 0 开头的数字文件和以 1 开头的 gs 数字文件。我必须进行测试,如果文件 0 丢失,我将索引更改为 1。除此之外,我对结果很满意。即使在非共享主机系统上,这显然也是一个常见问题。问题是对 ImageMagick 的更新将覆盖对 policy.xml 的编辑,因此您在那里所做的使事情正常进行的操作可能会在下一次更新时停止工作。由于 ImageMagick 无论如何都使用 Ghostscript 来执行此操作,因此我看不出有任何理由不绕过中间人。

从其他阅读中我发现 ImageMagick 默认禁用 pdf 的原因是因为 Ghostscript 中的一个错误已修复几个版本。

---结束编辑---

我的网站位于共享托管服务器上。多年来,我一直使用 ImageMagick“转换”将 pdf 文档转换为 png。现在我收到一条错误消息,如下所述

消息是:convert-im6.q16:尝试执行安全策略“PDF”不允许的操作@error/constitute。c/IsCoderAuthorized/408。

建议的解决方案是修改 policy.xml 但当然在共享主机上我无权访问该文件。

我也看到了安装 pdftopm 的建议,但即使经过数小时的搜索,我也无法在没有 root 访问权限的情况下找到如何在本地安装。

有没有一种方法可以在共享主机服务器上运行?

感谢您的阅读。

我决定将 policy.xml 更改为允许使用 pdf 并不是一个好的解决方案,因为它可能会在下一个版本中被覆盖并让我回到原来的位置。研究发现 ImageMagick 使用 Ghostscript 进行 pdf 转换,所以为什么要忍受不可靠的中间人。更多研究发现一些命令行批处理指令可以进行转换。然而,决议是可怕的。只有当我达到接近 300 的分辨率时,我才得到好的结果,但文件很大。 Ghostscript 有一个允许高内部分辨率的命令,然后是一个缩小因子以将文件缩小到更小的尺寸。为什么这比直接转换为我想要的文件大小更好是一个谜,但这是推荐的解决方案,实验表明它是高质量的。最终解决方案如下:

$gscommand = "gs -dNOPAUSE -dBATCH -r300 -dDownScaleFactor=3  -sDEVICE=png16m -sOutputFile=\"" .$file . "_%d.png\"  " . $file . ".pdf";
$returnedvalue = exec($gscommand);

最后,这似乎是一个非常普遍的问题,除了使用不同的程序之外没有其他解决方案。一个推荐的是 pdftopm,我没有找到如何在共享主机系统上安装并且使用 Ghostscript 完成这项工作,因此无需弄清楚。

我希望这 post 能帮助其他面临这个问题的人。