在没有GTK的情况下使用batik-rasterizer

0 投票
3 回答
1351 浏览
提问于 2025-04-16 05:24

我在用 Apache Batik SVG Rasterizer Library 这个库在 Python 中处理图像,但当我尝试把一个 SVG 文件转换成 PNG 格式时,出现了这个错误:Gtk-WARNING **: cannot open display:

我该怎么做才能不使用 GTK 来转换 SVG 文件呢?

谢谢,抱歉我的英语不好!


我的代码是这样的:

gij --jar batik/batik-rasterizer.jar file.svg

我用 GIJ,因为这是一个共享主机。

谢谢!!

3 个回答

0

我找到了一些信息,链接在这里:http://xmlgraphics.apache.org/fop/1.0/graphics.html#batik

这里有一些解决方法:

  • 启动Java时加上 -Djava.awt.headless=true 这个命令行选项。
  • 安装一个X服务器,它可以在内存中提供一个帧缓冲区,而不需要实际的显示屏或任何显示硬件。比如说 Xvfb
  • 安装一个工具包,它可以模拟AWT,而不需要底层的X服务器。比如说PJA工具包,它是免费的,并且有详细的安装说明。

这里是“如何在Linux服务器上安装Xvfb(X11服务器)”的链接:http://corpocrat.com/2008/08/19/how-to-install-xvfb-x11-server-in-linux-server/

0

试试这个:

$ export DISPLAY=java; gij -Djava.awt.headless=true --jar batik/batik-rasterizer.jar file.svg

更多信息请查看 http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/

3

你有没有代码示例?这个错误提示你是在一个没有显示器的系统上进行绘图。这可能不是因为SVG转换的问题,而是因为你尝试显示一个图形或窗口等操作导致的。如果你连接上显示器或者在环境中设置DISPLAY变量,这个错误就会消失。

另外,你遇到的这个错误其实只是一个警告。batik的光栅化工具可能依赖于其他一些没有提供的库文件。你可能需要使用类路径设置或者一个包装脚本。试着在batik文件夹内运行batik-rasterizer,也就是:

cd batik; gij --jar batik-rasterizer.jar ../file.svg

撰写回答