什么是纯Java HTML查看器和渲染器?要求是:
它应该实现JComponent
放置在Scrollable
窗格中的接口.
它应该优选是免费的解决方案; 开源是一个加号.
它作为Maven工件的可用性是一个加号.
我只知道一些组件和项目,其中一些现在已经不存在了:
内置JEditorPane
,支持HTML 3.2(自Java 1.4起)
DJ项目(纯Java?)
Eitive by hexidec(基于javax.swing.text.html.HTMLEditorKit
)
Sferyx的JSyndrome HTML编辑器
JWebPane
(它是否曾被发布)?
JDIC(放弃;从这里的一些信息我看到它是原生的)
(PDF渲染器)WebRenderer(以前的XHTMLRenderer)
Sheepy.. 33
从Java 8开始,您可以使用JavaFX的WebView Component,它也可以在Swing中使用.
代码很简单:
JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent Platform.runLater( () -> { // FX components need to be managed by JavaFX WebView webView = new WebView(); webView.getEngine().loadContent( " Hello World!" ); webView.getEngine().load( "http://www.stackoverflow.com/" ); jfxPanel.setScene( new Scene( webView ) ); });
它由WebKit引擎支持(版本依赖于JRE并且是合理的最新版本).但请记住,它不是一个完整的浏览器,所以不要指望支持HTML5音频/视频.否则,它会像浏览器一样运行HTML + CSS + JS.
从技术上讲,底层引擎是C++,而不是本机Java.但它捆绑在Oracle的官方JRE中,不需要库,零配置,与Java FX一样跨平台,并且正在积极更新和维护.
对于大多数用例而言,与原生Java一样好,我想?
以下信息已经过时,因为我们现在已经在Java中使用了WebView.
尝试Cobra/Lobo,CSSBox和Flying Saucer,都是纯Java.其他人是本地的或商业的.
内容:动态生成的简单HTML(作为字符串),嵌入式CSS 2.1,无JS.
简短说明:Flying Saucer最简单易用,渲染最正确,但你最好完全控制内容.否则寻找原生解决方案.
很长的故事:
CSSBox似乎更活跃,但它似乎取决于一些第三方库.例如,演示依赖于使用apache xerces的nekohtml,它改变了默认Java 1.7 sax解析器的工作方式并破坏了我的程序,但是当我强制它使用java的内置xerces时,我得到了ClassCastException (InlineBox to BlockBox)
.最后无法让它工作.另外还没有找到替换现有文档的方法 BrowserCanvas
.
Cobra不再维护,必须手动修复不兼容问题才能使其在1.7中运行.还需要抓住mozilla Rhino(不使用任何JS),但就是这样.之后它相当顺利,只需要让Logger隐藏绘制消息.渲染是正确的,速度是公平的 - 只要文档很简单.当您开始使用不太常见的标签或更复杂的布局时,Cobra很快就会崩溃.
在撰写时,飞碟有三个最好的CSS支持(2011年2月).安装非常简单(例如,不需要设置像cobo这样的文档或像cssbox这样的domparser)几乎没有依赖 - 这也意味着没有javascript.但飞碟对你喂它的东西非常严格.源必须是格式良好的XML,例如样式和脚本可能必须包装在CDATA中,如果使用html实体,则必须声明DTD(因此没有html5 doctype).但是,如果您要嵌入可以控制的内容,那么它可能是您的最佳选择.
从Java 8开始,您可以使用JavaFX的WebView Component,它也可以在Swing中使用.
代码很简单:
JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent Platform.runLater( () -> { // FX components need to be managed by JavaFX WebView webView = new WebView(); webView.getEngine().loadContent( " Hello World!" ); webView.getEngine().load( "http://www.stackoverflow.com/" ); jfxPanel.setScene( new Scene( webView ) ); });
它由WebKit引擎支持(版本依赖于JRE并且是合理的最新版本).但请记住,它不是一个完整的浏览器,所以不要指望支持HTML5音频/视频.否则,它会像浏览器一样运行HTML + CSS + JS.
从技术上讲,底层引擎是C++,而不是本机Java.但它捆绑在Oracle的官方JRE中,不需要库,零配置,与Java FX一样跨平台,并且正在积极更新和维护.
对于大多数用例而言,与原生Java一样好,我想?
以下信息已经过时,因为我们现在已经在Java中使用了WebView.
尝试Cobra/Lobo,CSSBox和Flying Saucer,都是纯Java.其他人是本地的或商业的.
内容:动态生成的简单HTML(作为字符串),嵌入式CSS 2.1,无JS.
简短说明:Flying Saucer最简单易用,渲染最正确,但你最好完全控制内容.否则寻找原生解决方案.
很长的故事:
CSSBox似乎更活跃,但它似乎取决于一些第三方库.例如,演示依赖于使用apache xerces的nekohtml,它改变了默认Java 1.7 sax解析器的工作方式并破坏了我的程序,但是当我强制它使用java的内置xerces时,我得到了ClassCastException (InlineBox to BlockBox)
.最后无法让它工作.另外还没有找到替换现有文档的方法 BrowserCanvas
.
Cobra不再维护,必须手动修复不兼容问题才能使其在1.7中运行.还需要抓住mozilla Rhino(不使用任何JS),但就是这样.之后它相当顺利,只需要让Logger隐藏绘制消息.渲染是正确的,速度是公平的 - 只要文档很简单.当您开始使用不太常见的标签或更复杂的布局时,Cobra很快就会崩溃.
在撰写时,飞碟有三个最好的CSS支持(2011年2月).安装非常简单(例如,不需要设置像cobo这样的文档或像cssbox这样的domparser)几乎没有依赖 - 这也意味着没有javascript.但飞碟对你喂它的东西非常严格.源必须是格式良好的XML,例如样式和脚本可能必须包装在CDATA中,如果使用html实体,则必须声明DTD(因此没有html5 doctype).但是,如果您要嵌入可以控制的内容,那么它可能是您的最佳选择.
如果您使用的是Swing,则可以嵌入JavaFX WebView.
1)应该实现JComponent接口放入Scrollable窗格.
为了将WebView添加到Swing,您需要将其添加到JFXPanel,这是一个JComponent.为了使WebView填充完整的JFXPanel,我使用了一个像这样的AnchorPane:
final AnchorPane anchorPane = new AnchorPane(); WebView webBrowser = new WebView(); //Set Layout Constraint AnchorPane.setTopAnchor(webBrowser, 0.0); AnchorPane.setBottomAnchor(webBrowser, 0.0); AnchorPane.setLeftAnchor(webBrowser, 0.0); AnchorPane.setRightAnchor(webBrowser, 0.0); //Add WebView to AnchorPane anchorPane.getChildren().add(webBrowser); //Create Scene final Scene scene = new Scene(anchorPane); // Obtain the webEngine to navigate final WebEngine webEngine = webBrowser.getEngine(); webEngine.load("http://www.google.com"); _jfxPanel.setScene(scene);
每当您运行JavaFX代码时,请确保在Platform.runLater()中运行它.
2)最好是免费解决方案; 开源是一个加号.
嗯,这是纯粹的Oracle java.
3)作为maven工件的可用性是一个加号.
有关集成JavaFX和Maven的建议,请参阅使用JavaFX的StackOverflow应答Maven项目(在`lib`中使用jar文件).
JavaFX上的Java8将完全集成在Java中.
Additonal Pros: - 支持HTML5和JavaScript(使用webkit) - 支持平台互操作性 - 甚至支持与DOM交互,运行JavaScript,从Webview获取事件通知.
缺点:需要安装-JavaFX.但它从v7u6(2012年8月)开始与java捆绑在一起.
其他经历:
我试过djproject,但平台互操作性有很多问题.在Windows上工作得很好,但只有在Linux上付出了巨大努力,我无法在Mac上运行它.对于每个平台,您还需要构建一个32位和64位版本的jar.经过大量的努力和一个巨大的jar文件,你可以将所有东西合并在一个罐子里.但这远非方便.
与我上面提到的JavaFX解决方案相比,DJProject是一个更大的痛苦.