显示文档
DocumentRenderer能够用来打印几类包含在JEditorPane中的文档。我们用三种类型的文档(JEditorPane能够缺省识别的)测试了这个printer类:HTMLDocuments、PlainDocuments和Rich Text Format文档。只需要做一些很小的改动,这个类就应该可以将包含在JEditorPane中的其他类型文档打印出来了。
DocumentRenderer类将一个文档的打印形式从其视频显示中区分出来了。这就使你能够针对特定的打印结果进行文本格式化,而会不影响其屏幕显示。DocumentRenderer采用所有打印页面的实际大小来显示文本并计算出行间距(line break)。当文档的宽度不足以显示在打印页面上时,该类会允许使用缩放(scaling)。
DocumentRenderer相当智能。分页符不会将一行单一语句分放到两个页面上。字符也不会被切成两半,不会象浏览器在处理一般打印时会在这一页末尾显示一句话的上半部分而在下一页的顶部显示这句话的下半部分。这个类能够处理大量字体、颜色和小图标。分栏文本的显示也没有问题。对于每一个JEditorPane能够显示的文本特性,通常DocumentRenderer都可以将这种性能呈现到纸上。
你只需使用两行代码便可以将DocumentRenderer结合到你的程序中去了。用一个不带参数的构造器创建这个类的实例,再调用一个合适的打印方法来处理其他事情。比如,以下代码将打印这个htmlDocument,它是HTMLDocument类的一个有效实例:
DocumentRenderer DocumentRenderer = new DocumentRenderer(); DocumentRenderer.print(htmlDocument); |
它给用户显示一个打印对话框,允许用户选择打印机、打印数量等,同时还有一个取消打印的选项。
PlainDocuments使用了print(PlainDocument)方法,采用和HTMLDocuments相同的方式执行打印。由于在Java中不能直接访问Rich Text Format文档,所以你必须将这种类型的文档发送到DocumentRenderer中(通过将它封装到一个JEditorPane里),就象这样:DocumentRenderer.print(jeditorPane);
这里的jeditorPane是JEditorPane的一个有效实例,其中包含一个Rich Text Format文档。
为了给用户提供方便,你可以调用DocumentRenderer的pageDialog方法来显示一个打印对话框以便用户可以调整页面大小、页边设置和纸的打印方向(orientation)。DocumentRenderer还提供了一种方法使开发人员可以选择是否对那些无法在打印宽度内完全显示的文档进行按比例缩放。我们认为能够进行缩放通常是比较好的选择,因为它能够防止文本在正确的页边处被分开,但它似乎比较适合让用户去选择。这种名为setScaleWidthToFit(boolean)的方法提供了按比例缩放的选项。你必须确定在调用打印方法之前调用这个scaling和pageDialog方法。