Java 打印
1.Java 2 Printing Api
对一个GUI程序来说,打印和打印预览是现在大多数程序都要实现的功能。
在Java2之前,显然设计者们做的不太好。
但Java2 之后大为改观。先介绍一下Java2提供的与打印有关的API.
1.1 PrintJob
class java.awt.print.PrinterJob
这个类是Java2中控制打印的最主要的一个类。
一个典型的打印过程如下:
PrinterJob prnJob=PrinterJob.getPrinterJob();
//返回一个PrintJob实例
prnJob.setPrintable(myPrintable);
//设置PrintJob的可打印对象
if(!prnJob.printDialog()) //显示一个与平台有关的打印dialog.
// 比如在windows里就是大家熟悉的一个
// PrintDialog有OK,Cancel的button,还有设置打印范围的
//文本框等。如果按了Cancel,则返回false.不打印
return;
prnJob.print();//否则,调用print方法,进行打印。
其中的可打印对象是一个实现了Printable 接口的对象。
凡是希望打印的对象都要实现此接口。
1.2 Printable 接口.
abstract interface java.awt.print.Printable
该接口只定义了一个方法:print,
有三个参数:
Graphics graphics:类似于VC中的CDC,即设备环境,graphics context
注意:这个graphics 可以在 print方法中转换为Graphics2D对象。
就可以利用最新的2D功能
PageFormat pageFormat: 关于页格式的一个对象。由此对象可以得到或设置
页的可打印范围,打印方向等等。
int pageIndex:将要打印的页的编号,由零开始。
print 方法的返回值有两个: PAGE_EXISTS 当本页成功打印
NO_SUCH_PAGE 当index太大或不存在本页。
我们自己不用去调用一个Printable对象的Print方法。而是由PrintJob的print
方法调用它。另外,在打印的时候,如果指定是从第三页到第五页,Java也会先将
第一,二页render一遍只是不打出来。
而且,在render之前(即print方法被调用之前),打印系统和java之间没有方法
进行通讯以确切知道总共会有多少页被打印。这就是为什么经常在Java做的打印
程序里看到打印对话框Range中from 1 to 99999的原因。如果用Printable接口来
实现的话,这个问题是避免不了的。包括sun的Forte for java 2.0的打印都是
如此哦。要想避免此问题只有实现Pagealbe 接口。