我是Java打印的新手。我开始打印一页数据,一切正常。现在我开始测试如何分页我的数据。我有一个实现Printable接口的类,并且我有一个int变量(curLine)来保持我已经打印的行数,还有一个变量lines来保持我最终要打印的总数。在public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)方法中,当我使用graphics.drawString(...);方法绘制一行时,我增加度量值(curLine++),但在打印机上,我没有得到想要的结果。我认为print方法针对特定的indexPage被调用了两次,在这两次调用中,数据只打印了一次,但curLine变量在这两次调用中也增加了,导致输出“丢失”的行。
更具体地说,我的测试类是
public class PrintTest implements Printable {
private final int marginTop = 20;
private final int marginLeft = 10;
private Font mainFont = new Font("Verdana", Font.PLAIN, 10);
private Font bigFont = new Font("Verdana", Font.PLAIN, 14);
private int lines;
private int curLine;
private boolean finish = false;
public PrintTest() {
curLine = 0;
lines = 160;
}
public static void main(String[] args) {
PrinterJob job = PrinterJob.getPrinterJob(); // Use default printer
job.printDialog();
PrintTest t = new PrintTest();
job.setPrintable(t);
try {
job.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
//if printed all rows then return no_such_page
if (finish) {
return NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) graphics;
double pageH = pageFormat.getImageableHeight();
g2.setFont(mainFont);
int t = g2.getFontMetrics().charWidth('T');
int lineH = g2.getFontMetrics().getHeight();
double curY;
g2.translate(pageFormat.getImageableX() + marginLeft,
curY = pageFormat.getImageableY() + marginTop);
while ((curY < (pageH - lineH)) && (curLine < lines)) {
g2.translate(0, lineH);
g2.drawString("Print row number #" + curLine, 0, 0);
curY += lineH;
curLine++;
}
if (curLine >= lines) {
finish = true;
}
return PAGE_EXISTS;
}
您可以看到它并没有从第0行开始。