用于Scrollable窗格的纯Java HTML查看器/渲染器

时间:2010-03-13 11:50:58

标签: java html html-rendering

哪些纯Java HTML查看器和渲染器可用?要求是:

  • 它应该实现JComponent窗口中的Scrollable接口。
  • 最好是免费的解决方案;开源是一个加号。
  • 作为Maven工件的可用性是一个优势。

我只知道一些组件和项目,其中一些已经不存在了:

6 个答案:

答案 0 :(得分:33)

从Java 8开始,您可以使用JavaFX的WebView Component,它也可以是used in Swing

代码简单如下:

JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent
Platform.runLater( () -> { // FX components need to be managed by JavaFX
   WebView webView = new WebView();
   webView.getEngine().loadContent( "<html> 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/LoboCSSBoxFlying 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,必须手动修复incompatibility issue才能使其在1.7中运行。还需要抓住mozilla Rhino(不使用任何JS),但就是这样。之后它相当顺利,只需要让Logger隐藏绘制消息。渲染是正确的,速度是公平的 - 只要文档很简单。当你开始使用不太常见的标签或更复杂的布局时,Cobra会很快崩溃。

飞碟在撰写时具有最好的CSS支持(2011年2月)。安装非常简单(例如,不需要设置像cobo这样的文档或像cssbox这样的domparser)几乎没有依赖 - 这也意味着没有javascript。但飞碟对你喂它的东西非常严格。源必须是格式良好的XML,例如样式和脚本可能必须包装在CDATA中,如果使用html实体,则必须声明DTD(因此没有html5 doctype)。但是,如果您要嵌入可以控制的内容,那么它可能是您的最佳选择。

答案 1 :(得分:10)

如果您使用的是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的建议,请参阅StackOverflow答案Maven project with JavaFX (with jar file in `lib`)

JavaFX上的Java8将完全集成在Java中。

Additonal Pros: - 支持HTML5和JavaScript(使用webkit) - 支持平台互操作性 -even支持与DOM交互,运行JavaScript,从Webview获得事件通知。

缺点: -JavaFX需要安装。但是自从v7u6(2012年8月)以来它与java捆绑在一起。

其他经历:

我尝试了djproject,但在平台互操作性方面遇到了很多问题。在Windows上工作得很好,但只有在Linux上付出了巨大努力,我无法在Mac上运行它。对于每个平台,您还需要构建一个32位和64位版本的jar。经过大量的努力和一个巨大的jar文件,你可以将所有东西合并在一个罐子里。但这远非方便。

与我上面提到的JavaFX解决方案相比,DJProject是一个更大的痛苦。

答案 2 :(得分:2)

您还可以通过以下方式访问本机浏览器: http://djproject.sourceforge.net/ns/

对于某些网页,这有时是唯一的方法。总是存在折衷。

我还没有找到一个呈现良好,开源且足够灵活的浏览器组件。眼镜蛇很接近,但有些页面无法渲染,而且很难(不可能?)做一些事情,比如摆脱自己的滚动条等等。

答案 3 :(得分:2)

CSSBox可能正是您所寻找的:http://cssbox.sourceforge.net

答案 4 :(得分:1)

查看此文章:http://devdaily.com/blog/post/jfc-swing/how-create-simple-swing-html-viewer-browser-java

它使用JEditorPane和其他一些Swing类来解析和渲染HTML,还有CSS。

答案 5 :(得分:0)

Flying Flying正在完成这项工作,但是下面的渲染文本示例对于我在Linux Java上的移动应用程序开发来说是一个巨大的挫折:

Sometimes the period at the end changes line without the text beside .

此外,与JTextPanel不同,文本不可选。

Parser似乎只接受UTF-8编码。解析时我无法强制使用自己的编码。