文档

Java™教程
隐藏目录
基本打印程序
路径: 2D 图形
课程: 打印

一个基本的打印程序

本节将介绍如何创建一个基本的打印程序,该程序显示打印对话框并将文本“Hello World”打印到所选打印机。

打印任务通常包括两个部分:

首先创建打印作业。表示打印作业的类和其他相关类位于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) {
        // 作业未能成功完成
    }
}

如果将作业成功发送到打印机,则会抛出PrinterException异常。然而,由于PrinterJob.print方法在作业发送到打印机后立即返回,用户应用程序无法检测到纸张卡住或纸张用完的问题。对于基本的打印用途,这个作业控制样板足够了。

Printable接口只有一个方法:

public int print(Graphics graphics,
           PageFormat pf, int page)
           throws PrinterException;

PageFormat类描述了页面方向(纵向或横向)、页面大小和可打印区域,单位为1/72英寸。可打印区域考虑了大多数打印机的边距限制(硬件边距)。可打印区域是这些边距内部的空间,在实践中通常进一步限制以留出头部或页脚的空间。

page参数是基于零的页码,将被渲染。

以下代码表示完整的Printable实现:

import java.awt.print.*;
import java.awt.*;

public class HelloWorldPrinter
    implements Printable {

  public int print(Graphics g, PageFormat pf, int page)
      throws PrinterException {

    // 我们只有一页,'page'是基于零的
    if (page > 0) {
         return NO_SUCH_PAGE;
    }

    // 用户(0,0)通常位于图像可打印区域之外,因此我们必须通过PageFormat中的X和Y值进行平移,以避免裁剪。
    Graphics2D g2d = (Graphics2D)g;
    g2d.translate(pf.getImageableX(), pf.getImageableY());

    // 现在我们进行渲染
    g.drawString("你好世界!", 100, 100);

    // 告诉调用者此页是打印文档的一部分
    return PAGE_EXISTS;
  }
}

这个示例的完整代码在HelloWorldPrinter.java中。

向打印机发送Graphics实例基本上与将其呈现到屏幕相同。在这两种情况下,您需要执行以下步骤:


上一页:打印
下一页:使用打印设置对话框