这个部分讲解了怎样创建一个显示打印对话框和打印文字“Hello Word”到所选择的打印机的基本的打印程序。
打印工作一般包含两个部分:
1.工作管理—创建一个打印工作,并使它连接到打印机,指定打印的张数,和提供用户选择打印信息的对话框
2.页面呈象——将组件添加到页面中,并且实现跨页面的管理(页码)。
首先创建一个打印工作,这个类代表打印工作,大部分与打印相关的类都位于java.awt.print包中
import java.awt.print.*;
PrinterJob job = PrinterJob.getPrinterJob();
然后提供一个通过实现Printable 接口 使得内容到页面的代码。
class HelloWorldPrinter
implements Printable { ... }
...
job.setPrintable(new HelloWorldPrinter());
一个基本的应用一般会向用户展示一个可供用户选择各种选项的对话框,比如,页面的数量、页面方向、或者指定一个打印机
boolean doPrint = job.printDialog();
这个对话框一直显示知道用户确认选择或者取消打印。如果用户发送了一个打印的指令并且打印成功,则doPrint为true。如果用户取消了打印,则doPrint为false。因为显示的对话框是可选择的,所以返回的值是完全的信息化。
当doPrint为true时,应用程序会通过调用PrinterJob.print来实现打印
if (doPrint) {
try {
job.print();
} catch (PrinterException e) {
// The job did not successfully
// complete
}
}
如果打印的过程出现问题,会抛出PrinterException。然而,因为当作业被发送到打印机的时候PrinterJob.print方法会立刻返回一个值,所以应用程序没法发现卡纸或者缺纸等问题。这种打印的流程控制足以满足基本的打印需求。
接口Printable只有一个方法:
public int print(Graphics graphics,
PageFormat pf, int page)
throws PrinterException
类PageFormat描述了页面的方向(portrait竖直或者垂直landscape)以及页面的大小和以1/72nd每英寸为单位的成像区域。成像区域占了打印机的极限的大部分。成像区域指的是边框的内部区域,超出部分则加到下一页。
页的数字是从零开始计算的。
下面的代码能够完整的表现Printable的实现。
import java.awt.print.*;
import java.awt.*;
public class HelloWorldPrinter
implements Printable {
public int print(Graphics g, PageFormat pf, int page)
throws PrinterException {
// We have only one page, and 'page'
// is zero-based
if (page > 0) {
return NO_SUCH_PAGE;
}
// User (0,0) is typically outside the
// imageable area, so we must translate
// by the X and Y values in the PageFormat
// to avoid clipping.
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
// Now we perform our rendering
g.drawString("Hello world!", 100, 100);
// tell the caller that this page is part
// of the printed document
return PAGE_EXISTS;
}
}
这个例子的完整的代码在HelloWorldPrinter.java中。
发送一个Graphics到打印机和发送到屏幕上在本质上是一样的。两者都需要实现以下步骤。
添加一个本文就跟添加一个其他的信息到Graphics2D中一样简单
Printer制图工具有一个相对大多数代码都是透明的分辨率。
Printable.print()方法由打印系统自动调用,就跟Component.paint()方法在显示的时候调用一样。在地0,1,2 等页系统会一直持续调用Printable.print()方法直到该方法返回NO_SUCH_PAGE。
打印工作一般包含两个部分:
1.工作管理—创建一个打印工作,并使它连接到打印机,指定打印的张数,和提供用户选择打印信息的对话框
2.页面呈象——将组件添加到页面中,并且实现跨页面的管理(页码)。
首先创建一个打印工作,这个类代表打印工作,大部分与打印相关的类都位于java.awt.print包中
import java.awt.print.*;
PrinterJob job = PrinterJob.getPrinterJob();
然后提供一个通过实现Printable 接口 使得内容到页面的代码。
class HelloWorldPrinter
implements Printable { ... }
...
job.setPrintable(new HelloWorldPrinter());
一个基本的应用一般会向用户展示一个可供用户选择各种选项的对话框,比如,页面的数量、页面方向、或者指定一个打印机
boolean doPrint = job.printDialog();
这个对话框一直显示知道用户确认选择或者取消打印。如果用户发送了一个打印的指令并且打印成功,则doPrint为true。如果用户取消了打印,则doPrint为false。因为显示的对话框是可选择的,所以返回的值是完全的信息化。
当doPrint为true时,应用程序会通过调用PrinterJob.print来实现打印
if (doPrint) {
try {
job.print();
} catch (PrinterException e) {
// The job did not successfully
// complete
}
}
如果打印的过程出现问题,会抛出PrinterException。然而,因为当作业被发送到打印机的时候PrinterJob.print方法会立刻返回一个值,所以应用程序没法发现卡纸或者缺纸等问题。这种打印的流程控制足以满足基本的打印需求。
接口Printable只有一个方法:
public int print(Graphics graphics,
PageFormat pf, int page)
throws PrinterException
类PageFormat描述了页面的方向(portrait竖直或者垂直landscape)以及页面的大小和以1/72nd每英寸为单位的成像区域。成像区域占了打印机的极限的大部分。成像区域指的是边框的内部区域,超出部分则加到下一页。
页的数字是从零开始计算的。
下面的代码能够完整的表现Printable的实现。
import java.awt.print.*;
import java.awt.*;
public class HelloWorldPrinter
implements Printable {
public int print(Graphics g, PageFormat pf, int page)
throws PrinterException {
// We have only one page, and 'page'
// is zero-based
if (page > 0) {
return NO_SUCH_PAGE;
}
// User (0,0) is typically outside the
// imageable area, so we must translate
// by the X and Y values in the PageFormat
// to avoid clipping.
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
// Now we perform our rendering
g.drawString("Hello world!", 100, 100);
// tell the caller that this page is part
// of the printed document
return PAGE_EXISTS;
}
}
这个例子的完整的代码在HelloWorldPrinter.java中。
发送一个Graphics到打印机和发送到屏幕上在本质上是一样的。两者都需要实现以下步骤。
添加一个本文就跟添加一个其他的信息到Graphics2D中一样简单
Printer制图工具有一个相对大多数代码都是透明的分辨率。
Printable.print()方法由打印系统自动调用,就跟Component.paint()方法在显示的时候调用一样。在地0,1,2 等页系统会一直持续调用Printable.print()方法直到该方法返回NO_SUCH_PAGE。