java高级编程学习如何使用打印服务 API(四)

2014-11-24 02:59:55 · 作者: · 浏览: 2
法是使用一个 HashAttributeSet。与它的子类不同,它并不限制你往上加特殊角色
的属性,所以以下代码可以成功执行:

AttributeSet attrs = new HashAttributeSet();
;
attrs.add(ColorSupported.SUPPORTED);
attrs.add(OrientationRequested.LANDSCAPE);
[
[
PrintService[ t
] services = PrintServiceLookup.lookupPrintServices(null, attrs);

10.通过用户界面的打印机选择

到当前为止,我假设所需要使用的打印机,应该能够由应用程序编程选择。事实上,尽
管如此,更为普遍的过程是显示一个对话框,并允许客户在输出时,选择使用哪个打印机。
幸运的是, Java通过使用在javax.print包中定义的ServiceUI类, 中的静态方法printDialog()
来使得这些操作非常简单。
14

除了对话框显示的位置外,在调用 printDialog()时必须指定的唯一参数是这些:
一个用户可选用的 PrintService 实例的数组;
默认的 PrintService;
一个 PrintRequestAttributeSet 实例。这用来弹出显示的对话框,并在对话框消失
之前返回用户所作的任何更改。
要演示这些如何运作,可使用下列简单的代码段来显示一个简单的打印对话框:


PrintService[ ] services = PrintServiceLookup.lookupPrintServices(null, null);

l
PrintService s vc = PrintServiceLookup.lookupDefaultPrintService( );

PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet( );

PrintService selection = ServiceUI.printDialog(




null, 100, 100, services, svc, null, attrs);
运行时,代码产生如图-3 中所示的对话框
图-3 打印对话框


15
正如代码所示,从 printDialog()方法返回的值是一个 PrintService 实例,识别用户所选
的打印机,或在用户取消打印机对话时标识为空值。此外,PrintRequestAttributeSet 已更
新了,包含用户通过对话框所做出的更改,例如要打印的份数等。

通过使用 printDialog()方法,可让用户选择其输出要发往的打印机,提供用户对于专业
应用程序的所期望功能。

11.创建打印任务

这是打印中的最简单的一个步骤;因为一旦获得 PrintService 的一个引用,所有你需要
做的就是调用 createPrintJob()方法,象这样:

PrintService service;

.

.

.

DocPrintJob job = service.createPrintJob();

如代码所示,从 createPrintJob()返回的值是一个 DocPrintJob 实例,该对象可以让让您
控制并监视打印操作的状态。要初始化打印,您应该调用 DocPrintJob 对象的 print()方法,
但是,在这之前,您需要定义待打印的文档,并 PrintRequestAttributeSet。您已经 知道如
何构造并使用 AttributeSet,这些步骤不再重复;接下来,您将了解如何定义待打印的文档。

12.定义要打印的文档

打印过程中接下的一步是定义要打印的文档,就是创建一个实例,其实现了在
javax.print 包里定义的 Doc 接口。每一个 Doc 的实例有两个必须定义的属性和一个可选择
的属性:
16
一个 Object 代表要打印的内容;
DocFlavor 的一个实例描述数据类型;
一个可选的 DocAttributeSet 包含打印时所需属性。

查阅 Doc 接口的文档, 可以看出 javax.print 包里包含了一个叫 SimpleDoc 接口的实现,
它的构造函数包含了与上面三个属性对应的三个参数。要了解如何构建 SimpleDoc 的实例,
我们假设你要打印两份存在 http://www.apress.com/ApressCorporate/supplement/1/421/bcm.gif
的 gif 文件拷贝。

构建一个描述所要打印文件的 SimpleDoc 实例,我们所有要做的是,创建一个指向图片
的 URL,并获得一个合适的 DocFlavor 引用,并把这两个传给 SimpleDoc 构造函数:

URL url = new



;
DocFlavor flavor = DocFlavor.URL.GIF;

SimpleDoc doc = new SimpleDoc(url, flavor, null);

13.启动打印

打印的最后一个步骤就是调用 DocPrintJob 的 print()方法,传递给其,待打印数据的
Doc 对象,以及可选的 PrintRequestAttributeSet 实例。为简单起见,假设默认打印机支持
你所需要的 flavor 和属性,在此情况下要使用下列代码将上一个例子提及的 gif 文件打印两
份:


PrintService service = PrintServiceLookup.lookupDefaultPrintService();

DocPrintJob job = service.createPrintJob();

URL url = new
17

URL(http://www.apress.com/ApressCorporate/supplement/1/421/;
;
bcm.gif );

DocFlavor flavor = DocFlavor.URL.GIF;

Doc doc = new SimpleDoc(url, flavor, null);

PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet( );

attrs.add(new Copies(2));

, job.print(doc, attrs)

注意,某些情况下,打印是异步执行的,这可能会在实际打印完成之前,返回对 print()
的调用。