我正在尝试使用Batik光栅化库将SVG转换为.png转换到我的Yii应用程序中。目前我在运行OSX 10.6.7,PHP 5.3.4和Java 1.6.0_24的Mac上本地工作。
当我运行处理转换的PHP脚本时,使用...
$output = shell_exec(java -jar batik/batik-rasterizer.jar -m image/png -d pdf_temp/file.png -w 800 pdf_temp/file.svg)
Batik失败了(无用的)错误:
About to transcode 1 SVG file(s)
Converting file.svg to pdf_temp/file.png ... file_1310581599.png
Error while converting SVG
然而,使用......
java -jar batik/batik-rasterizer.jar -m image/png -d pdf_temp/file.png -w 800 pdf_temp/file.svg
终端中的...处理并将.png文件与原始.svg一起保存在/ pdf_temp /目录中
那么当终端没问题时,导致Batik失败的PHP / apache环境会有什么不同呢?
编辑:
在与一些同事聊天之后,我们认为Java可能需要以root身份运行 - 它从终端运行,但不在Web服务器内运行。
...添加
2>&1 1> /dev/null
我的Batik shell_exec()命令显示以下错误:
Exception in thread "main" java.lang.InternalError: Can't connect to window server - not enough permissions.
关于如何在Web服务器环境中以root身份运行Java的任何想法?或者允许它执行我需要的功能?
答案 0 :(得分:0)
-Djava.awt.headless =真
http://www.emcken.dk/weblog/archives/25-svg-rasterizer-with-batik.html
答案 1 :(得分:0)
我目前正在与Batik和Yii合作。检查输出和源文件的路径。我提供了整条路径,现在正在运作。似乎Yii不站在您的视图所在的位置,而Yii当前位置是您的webroot。在我的情况下,我这样修理:
define ('BATIK_PATH', '/var/www/wattquotes/protected/views/calculator/reports/batik/batik-rasterizer.jar');
$typeString = ' -m image/jpeg';
$outfile = ' /var/www/wattquotes/protected/views/calculator/reports/batik/temp/pic.jpg';
$width = ' -w 600';
$tempName = ' /var/www/wattquotes/protected/views/calculator/reports/batik/temp/proposal.svg';
$output = shell_exec("java -jar ". BATIK_PATH ." $typeString -d $outfile $width $tempName");
有效!