2011-04-12 51 views
1

我使用Batik将SVG图像转换为PDF。当通过终端转换它们时,每个都很好,并且文件被转换。不过,我想要的是使用exec()从PHP动态地转换它。PHP exec和Batik光栅化器

这是我所看到的,当我从终端转换:

About to convert 1 SVG file(s) 

Converting output.svg to /opt/lampp/htdocs/tool/generated/output.pdf... 

... success 

当使用EXEC()的输出被限制为“转换output.svg ...等”,不...成功的一部分。就好像服务器不会等待脚本完成一样。而且,生成的PDF文件完全是空的。

这是在PHP中的调用:

$command = 'cd ~/Downloads/batik-1.7 && java -jar batik-rasterizer.jar /opt/lampp/htdocs/tool/generated/output.svg -m "application/pdf"';

$string = exec($command);

echo '{"success": true, "message": "Design saved as generated/output.svg' . $string . '"}';` 

这是我在JS控制台中看到:

Design saved as generated/output.svgConverting output.svg to /opt/lampp/htdocs/tool/generated/output.pdf ...

编辑:

使用标准错误我:

No protocol specified Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.

编辑2:

一些谷歌上搜索,我发现后,将溶液:

-Djava.awt.headless=true :)

感谢所有为指导我在找到答案!

+0

您能向我们展示一些电话代码吗? – 2011-04-12 07:36:53

+0

编辑了这个问题。 – 2011-04-12 07:39:26

+0

你到目前为止尝试过什么?我会执行cmd> /tmp/stdout.txt 2> /tmp/stderr.txt来查看哪个是哪个。然后我会仔细看看哪些uid正在执行命令,然后尝试在终端中复制错误。 – 2011-04-12 08:05:30

回答

0

了解标准流stdout和stderr。

+0

我得到了'没有指定协议 线程“main”中的异常java.lang.InternalError:无法使用':0.0'作为DISPLAY变量的值连接到X11窗口服务器.'来自stderr – 2011-04-12 09:37:31

+0

似乎它有问题没有运行一个X服务器,这很奇怪。 – cweiske 2011-04-12 09:41:49