php - PHP ImageMagick 委托错误 - 找不到指定的文件
问题描述
我正在尝试在 PHP 中使用 ImageMagick 将 PDF 转换为图像。初始化构造函数给我一个“委托错误,找不到指定的文件”。
请注意,从命令行运行转换确实有效。它成功地将 PDF 的所有页面转换为每页的图像。
我尝试过的事情:
卸载 ImageMagick 和 Ghostscript,重新启动,安装 Ghostscript ( 32 ),重新启动,安装 ImageMagick,重新启动
在 Windows 中将 Ghostscript 文件夹的路径添加到 PATH 变量并重新启动(当前在我检查时添加)
在正确配置 ImageMagick 且不存在错误的服务器上运行完全相同的 PHP 脚本 - 所以 php 脚本不应该是问题吗?
如果我应该提供更多信息,请告诉我。在过去的 2 个小时里,我一直在寻找解决方案,现在完全没有想法。
谢谢你。
另外,我在 Windows 10 XAMPP 上运行。
ImageMagick中的delegates.xml
<?xml version="1.0"?>
<!DOCTYPE delegatemap [
<!ELEMENT delegatemap (delegate)+>
<!ELEMENT delegate (#PCDATA)>
<!ATTLIST delegate decode CDATA #IMPLIED>
<!ATTLIST delegate encode CDATA #IMPLIED>
<!ATTLIST delegate mode CDATA #IMPLIED>
<!ATTLIST delegate spawn CDATA #IMPLIED>
<!ATTLIST delegate stealth CDATA #IMPLIED>
<!ATTLIST delegate thread-support CDATA #IMPLIED>
<!ATTLIST delegate command CDATA #REQUIRED>
]>
<!--
Delegate command file.
Commands which specify
decode="in_format" encode="out_format"
specify the rules for converting from in_format to out_format These
rules may be used to translate directly between formats.
Commands which specify only
decode="in_format"
specify the rules for converting from in_format to some format that
ImageMagick will automatically recognize. These rules are used to
decode formats.
Commands which specify only
encode="out_format"
specify the rules for an "encoder" which may accept any input format.
For delegates other than ps:alpha, ps:color, ps:mono, and mpeg-encode the
substitution rules are as follows:
%i input image filename
%o output image filename
%u unique temporary filename
%# input image signature
%b image file size
%c input image comment
%g image geometry
%h image rows (height)
%k input image number colors
%l image label
%m input image format
%p page number
%q input image depth
%s scene number
%w image columns (width)
%x input image x resolution
%y input image y resolution
-->
<delegatemap>
<delegate decode="bpg" command="cmd.exe /c ("bpgdec" -b 16 -o "%o.png" "%i") & (move "%o.png" "%o" >nul)"/>
<delegate decode="png" encode="bpg" command=""bpgenc" -b 12 -q %~ -o "%o" "%i""/>
<delegate decode="browse" stealth="True" spawn="True" command="cmd.exe /c start "" http://www.imagemagick.org/"/>
<delegate decode="dng:decode" stealth="True" command="dcraw.exe -6 -W -O "%u.ppm" "%i""/>
<delegate decode="dot" command="dot -Tps "%i" -o "%o""/>
<delegate decode="dvi" command="dvips -q -o "%o" "%i""/>
<delegate decode="edit" stealth="True" command="notepad "%o""/>
<delegate decode="eps" encode="pdf" mode="bi" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -sDEVICE=pdfwrite "-sOutputFile=%o" -- "%i""/>
<delegate decode="eps" encode="ps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=ps2write "-sOutputFile=%o" -- "%i""/>
<delegate decode="hpg" command="hp2xx -q -m eps -f "%o" "%i""/>
<delegate decode="hpgl" command="hp2xx -q -m eps -f "%o" "%i""/>
<delegate decode="htm" command="html2ps -U -o "%o" "%i""/>
<delegate decode="html" command="html2ps -U -o "%o" "%i""/>
<delegate decode="jxr" command="cmd.exe /c (move "%i" "%i.jxr" >nul) & ("JXRDecApp.exe" -i "%i.jxr" -o "%o.pnm") & (move "%i.jxr" "%i" >nul) & (move "%o.pnm" "%o" >nul)"/>
<delegate decode="mpeg:decode" command=""ffmpeg.exe" -nostdin -v -1 -i "%i" -vframes %S -vcodec pam -an -f rawvideo -y "%u.pam""/>
<delegate decode="pcl:cmyk" stealth="True" command=""pcl6.exe" -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pamcmyk32" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
<delegate decode="pcl:color" stealth="True" command=""pcl6.exe" -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=ppmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
<delegate decode="pcl:mono" stealth="True" command=""pcl6.exe" -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pbmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
<delegate decode="pdf" encode="eps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -sDEVICE=eps2write -sPDFPassword="%a" "-sOutputFile=%o" -- "%i""/>
<delegate decode="pdf" encode="ps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=ps2write -sPDFPassword="%a" "-sOutputFile=%o" -- "%i""/>
<delegate decode="pgp" command="pgpv -fq "%i""/>
<delegate decode="png" encode="launch" spawn="True" mode="encode" command="imdisplay "%i"" />
<delegate decode="png" encode="show" spawn="True" mode="encode" command="imdisplay "%i"" />
<delegate decode="png" encode="win" spawn="True" mode="encode" command="imdisplay "%i"" />
<delegate decode="pnm" encode="ilbm" mode="encode" command="ppmtoilbm -24if "%i" > "%o""/>
<delegate decode="pnm" encode="jxr" command="cmd.exe /c (move "%i" "%i.pnm" >nul) & ("JXREncApp.exe" -i "%i.pnm" -o "%o.jxr") & (move "%i.pnm" "%i" >nul) & (move "%o.jxr" "%o" >nul)"/>
<delegate decode="pnm" encode="wdp" command="cmd.exe /c (move "%i" "%i.pnm" >nul) & ("JXREncApp.exe" -i "%i.pnm" -o "%o.jxr") & (move "%i.pnm" "%i" >nul) & (move "%o.jxr" "%o" >nul)"/>
<delegate decode="ps:alpha" stealth="True" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/>
<delegate decode="ps:cmyk" stealth="True" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pamcmyk32" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/>
<delegate decode="ps:color" stealth="True" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/>
<delegate decode="ps" encode="eps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=eps2write "-sOutputFile=%o" -- "%i""/>
<delegate decode="ps" encode="pdf" mode="bi" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=pdfwrite "-sOutputFile=%o" -- "%i""/>
<delegate decode="ps:mono" stealth="True" command=""@PSDelegate@" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/>
<delegate decode="shtml" command="html2ps -U -o "%o" "%i""/>
<delegate decode="svg" command=""rsvg-convert" -o "%o" "%i""/>
<!-- Remove the extra space in - -export in the line below when you want to use inkscape -->
<!--<delegate decode="svg:decode" stealth="True" command=""inkscape" "%s" - -export-eps="%s" - -export-dpi="%s" - -export-background="%s" - -export-background-opacity="%s" > "%s" 2>&1"/>-->
<delegate decode="wdp" command="cmd.exe /c (move "%i" "%i.jxr" >nul) & ("JXRDecApp.exe" -i "%i.jxr" -o "%o.pnm") & (move "%i.jxr" "%i" >nul) & (move "%o.pnm" "%o" >nul)"/>
<delegate decode="xps:cmyk" stealth="True" command=""gxps.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pamcmyk32" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
<delegate decode="xps:color" stealth="True" command=""gxps.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
<delegate decode="xps:mono" stealth="True" command=""gxps.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pbmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
<delegate encode="mpeg:encode" stealth="True" command=""ffmpeg.exe" -nostdin -v -1 -i "%M%%d.jpg" "%u.%m""/>
</delegatemap>
收到错误:
object(ImagickException)#805 (7) {
["message":protected]=>
string(95) "PDFDelegateFailed `The system cannot find the file specified.
' @ error/pdf.c/ReadPDFImage/801"
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(415)
["file":protected]=>
string(70) "D:\xampp\htdocs\pdfshare\wp-content\plugins\pdfshare\lib\class.pdf.php"
["line":protected]=>
int(57)
["trace":"Exception":private]=>
array(6) {
[0]=>
array(6) {
["file"]=>
string(70) "D:\xampp\htdocs\pdfshare\wp-content\plugins\pdfshare\lib\class.pdf.php"
["line"]=>
int(57)
["function"]=>
string(11) "__construct"
["class"]=>
string(7) "Imagick"
["type"]=>
string(2) "->"
["args"]=>
array(1) {
[0]=>
string(62) "D:\xampp\htdocs\pdfshare\wp-content\uploads\2019\05\2А-74.pdf"
}
}
[1]=>
array(6) {
["file"]=>
string(65) "D:\xampp\htdocs\pdfshare\wp-content\plugins\pdfshare\inc\ajax.php"
["line"]=>
int(94)
["function"]=>
string(15) "generate_images"
["class"]=>
string(12) "PDFShare_PDF"
["type"]=>
string(2) "->"
["args"]=>
array(0) {
}
}
[2]=>
array(4) {
["file"]=>
string(54) "D:\xampp\htdocs\pdfshare\wp-includes\class-wp-hook.php"
["line"]=>
int(286)
["function"]=>
string(30) "PDFShare\AJAX\upload_pdf_entry"
["args"]=>
array(1) {
[0]=>
string(0) ""
}
}
[3]=>
array(6) {
["file"]=>
string(54) "D:\xampp\htdocs\pdfshare\wp-includes\class-wp-hook.php"
["line"]=>
int(310)
["function"]=>
string(13) "apply_filters"
["class"]=>
string(7) "WP_Hook"
["type"]=>
string(2) "->"
["args"]=>
array(2) {
[0]=>
string(0) ""
[1]=>
array(1) {
[0]=>
string(0) ""
}
}
}
[4]=>
array(6) {
["file"]=>
string(47) "D:\xampp\htdocs\pdfshare\wp-includes\plugin.php"
["line"]=>
int(465)
["function"]=>
string(9) "do_action"
["class"]=>
string(7) "WP_Hook"
["type"]=>
string(2) "->"
["args"]=>
array(1) {
[0]=>
array(1) {
[0]=>
string(0) ""
}
}
}
[5]=>
array(4) {
["file"]=>
string(48) "D:\xampp\htdocs\pdfshare\wp-admin\admin-ajax.php"
["line"]=>
int(167)
["function"]=>
string(9) "do_action"
["args"]=>
array(1) {
[0]=>
string(33) "wp_ajax_pdfshare_upload_pdf_entry"
}
}
}
["previous":"Exception":private]=>
NULL
}
解决方案
推荐阅读
- authentication - 如何使用 asp.net core api 在其标头中授权带有 x-auth-token 的请求?
- android-studio - 在android studio的exoplayer中添加特定时间显示弹出框
- java - Swing:保存当前图形
- react-native - 如何通过仅更改应用程序名称和徽标来为同一项目和代码库中的多个客户端创建多个 Apk 和 ipa?
- javascript - saga 的高阶函数为 saga 函数注入参数
- ios - 如何知道字符串是否在 iOS 中进行了 url 编码?
- node.js - 如何修复 ['application/vnd.microsoft.card.oauth' 类型的文件]?
- python - 如何在 Python 中操作列表中的数据
- python - createsuperuser 命令中的 django+heroku+postgres 错误,它给出错误“psycopg2.errors.UndefinedTable: 关系“users_profile”不存在”
- spring-boot - 用于多个数据库的 Liquibase(Spring-boot)