当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《用于Scrollable窗格的纯JavaHTML查看器/渲染器》经验,为你挑选了2个好方法。

什么是纯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).但是,如果您要嵌入可以控制的内容,那么它可能是您的最佳选择.



1> Sheepy..:

从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).但是,如果您要嵌入可以控制的内容,那么它可能是您的最佳选择.



2> haferblues..:

如果您使用的是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是一个更大的痛苦.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有