DOC-04-09 打印HTML内容

本章教会你如何打印WebView组件中加载的Web页面。

使用JavaFX8中提供的打印API,你可以打印JavaFX程序的图形化内容。在javafx.print包中有对应的类和枚举。

9.1 使用打印API

要想在JavaFX程序中启用打印功能,你需要使用PrinterJob类。该类表示与系统默认打印机相关联的一个打印任务。使用Printer类来控制一个打印机来执行特定的打印任务。对于每一个打印任务,你都可以通过使用JobSetting类的属性来指定任务设置,如校对(collation)、份数(copies)、页面布局(pageLayout)、页面范围(pageRanges)、纸张来源(paperSource)、打印颜色(printColor)、打印分辨率(printResolution)、打印质量(printQuality)和单双面(printSides)。

你可以打印场景图的任何节点,包括根节点。你也可以打印那些没添加到场景中的节点。使用printPage方法job.printPage(node)来为某node初始化一个打印任务。有关打印功能的更多信息请参考JavaFX8的API说明。

在使用JavaFX的web组件时,你通常需要打印一个加载到浏览器中的HTML页面而不是程序UI本身。这就是为什么WebEngine类中添加了print方法,此方法就是为了打印与webEngine对象关联的HTML页面而生的。

9.2 添加上下文菜单启用打印功能

通常来讲,你需要把打印指令添加到程序的菜单或者工具栏中。在WebViewSample程序中,工具栏放了太多控件了,所以需要把打印功能放到点击鼠标右键弹出的菜单中。例9-1展示了如何把拥有打印功能的弹出式菜单放到程序工具栏中的代码片段。

例9-1 创建工具栏的弹出式菜单

把上例中的代码片段加到之前的WebViewSample程序中,运行以后右键点击工具栏打印菜单即出现了,如图9-1所示。

图9-1 拥有打印功能的弹出式菜单

4_9_1 webview-print

9.3 处理打印任务

将打印的菜单添加到程序UI中以后,就可以定义打印的动作了。首先,你需要创建一个PrinterJob对象;然后,调用WebEngine.print方法,将该printJob对象作为参数传进去。请参考例9-2。

例9-2 调用WebEngine.print方法

对printerJob的非空判断很重要,因为如果系统中没有可用的打印机则createPrinterJob方法会返回null。

学习例9-3中添加了打印功能的WebViewSample的完整代码。

例9-3 启用了打印功能的WebViewSample

若想扩充WebViewSample程序的打印功能,请使用javafx.print包中的类。

在你的JavaFX程序中,你可以使用TabPane类实现浏览器标签页功能,当用户添加新的标签页时创建新的WebView对象即可。

若要进一步增强该程序,你可以应用特效、变形和动画转换。你也可以添加更多的WebView实例到程序的scene中。

参考JavaFX的API文档和JavaFX CSS规范了解更多可用特性的信息。你也可以学习JavaFX in Swing tutorial来学习如何在你已有的Swing程序中添加WebView组件。

相关API文档

● WebView

● WebEngine

● WebHistory

● Region

● Hyperlink

● Worker

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2015/07/html_print/
百度已收录