这一篇博文是使用的PrintJob。实际上还可以使用PrinterJob。具体代码是:

package taishan;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashAttributeSet;
import javax.print.attribute.standard.PrinterName;


public final class PrinterFrame extends TFrame implements Printable
{
private final static AffineTransform CLOCKWISE_TX = AffineTransform.getRotateInstance( Math.PI / 2);
private final static String FONT_NAME_SONGTI = "宋体";
private final static int FONT_SIZE = 30;

private final static String TAISHAN = "泰山Office";

private final static int COUNTER_X = 3;
private final static int COUNTER_Y = 1;

private final static int START_X = 100;
private final static int START_Y = 100;

private final static int STEP = 50;

public PrinterFrame()
{
this.getContentPane().setBackground(Color.WHITE);

Font font = new Font(FONT_NAME_SONGTI, 0, FONT_SIZE);
font = font.deriveFont(CLOCKWISE_TX);
this.setFont(font);
}

private void drawTest(Graphics g)
{
int startX = START_X + COUNTER_X * STEP;
int startY = START_Y + COUNTER_Y * STEP;;
SimpleDateFormat dft = new SimpleDateFormat("HH:mm:ss");
String text = dft.format(new Date());
g.drawLine(startX, startY, startX+100, startY);
g.drawString(text, startX, startY);

startX += STEP;
startY += STEP;
g.drawLine(startX, startY, startX, startY+200);
g.drawString(TAISHAN, startX, startY);
}

@Override
public void paint(Graphics g)
{
super.paint(g);
drawTest(g);
}

@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException
{
System.out.println(" print "+pageIndex);
if (pageIndex > 0)
{
return Printable.NO_SUCH_PAGE;
}

Graphics2D g2d = (Graphics2D)graphics;
drawTest(g2d);

g2d.setPaint(Color.BLACK);

g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

Font font = new Font("宋体", Font.BOLD, 12);
g2d.setFont(font);
g2d.drawString("泰山信息科技", 100, 100);

font = new Font("黑体", Font.ITALIC, 18);
g2d.setFont(font);
g2d.drawString("泰山信息科技", 100, 400);

return Printable.PAGE_EXISTS;
}

private static void startPrint()
{
HashAttributeSet hs = new HashAttributeSet();

String printName = PrintServiceLookup.lookupDefaultPrintService().getName();
hs.add(new PrinterName(printName, null));

PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, hs);
if (printServices.length == 0)
{
return;
}

PrinterJob printerJob = PrinterJob.getPrinterJob();
Book book = new Book();
book.append(new PrinterFrame(), printerJob.defaultPage());
printerJob.setPageable(book);

try
{
printerJob.setPrintService(printServices[0]);
printerJob.print();
}
catch (Exception e)
{
e.printStackTrace();
}

}

public static void main(String[] args)
{
PrintFrame frame = new PrintFrame();
frame.setSize(1000, 600);
frame.setVisible(true);

startPrint();
}
}