【发布时间】:2015-09-02 04:19:25
【问题描述】:
我们可以成功地使用 Batik 将 SVG 转换为图像,但是,我需要将整个 HTML div(其中实现了 SVG)连同其 CSS 演示代码转换为图像。
Batik 或其他一些 Java API 中是否有任何模块/支持来实现这一点?
【问题讨论】:
我们可以成功地使用 Batik 将 SVG 转换为图像,但是,我需要将整个 HTML div(其中实现了 SVG)连同其 CSS 演示代码转换为图像。
Batik 或其他一些 Java API 中是否有任何模块/支持来实现这一点?
【问题讨论】:
用于 Java 的 Selenium 库可能会对您有所帮助。它可以在后台模式下运行浏览器(即 chrome、firefox 等),您可以加载 HTML 并对内容进行快照。
虽然它是为测试和自动化而设计的,但这是我能为您提供的唯一方法。
希望对你有帮助。
【讨论】:
我们遇到了同样的问题,我们通过生成 PhantomJS process 解决了它。
Phantom 获取一个 JavaScript 文件,该文件将指示其无头浏览器做什么。
您可以等到页面完全加载,然后您可以将输出作为数据 URI 打印到控制台。
下面是我的 PhantomJS 脚本中的一个非常简单的示例:
var page = require( "webpage" ).create();
var options = JSON.parse( phantom.args[ 0 ] );
page.open( options.url, "POST", decodeURIComponent( options.payload || "" ), function( status ) {
if ( status === "fail" ) {
phantom.exit( 1 );
}
var contents = page.renderBase64( "png" );
require( "system" ).stderr.write( contents );
});
【讨论】:
这不是一件容易的事,因为您要问的是称为“html 渲染”的过程,基本上是浏览器尝试正确实现 2 多年的过程。
如果您需要渲染的 CSS 相当简单(没有 CSS3,没有花哨的东西等),那么很可能其中一个开源渲染器会是能够处理(以 PhantomJS 为例)。有关详细信息,请参阅@gustavohenke 答案。
如果 CSS 比较复杂,并且如果您能够在需要时对其进行修改 - 那么有一些快速但非免费的渲染器,例如 PrinceXML 和 DocRaptor。
如果 CSS 可能非常复杂并且您无法使其更简单 - 那么唯一的选择就是在真正的浏览器中呈现它。您可以为此使用 Selenium,因为它具有运行浏览器、在其中呈现 HTML 并以自动方式“截屏”结果的方式。有关详细信息,请参阅@Jorgeblom 答案。
【讨论】: