我是新来的用java打印。首先,我开始打印一页数据,一切正常。现在我开始测试如何分页数据。我有一个实现可打印接口的类,并且我有一个int变量(curLine)来保留已经打印的行数和一个可变行以保留最终我想要打印的总数。在public int print(Graphics graphics,PageFormat pageFormat,int pageIndex)方法中,当我使用graphics.drawString(...);方法来绘制一行我增加了度量值(curLine ++),但在打印机中我没有得到我想要的结果。我认为打印方法为特定的indexPage调用了两次,在这两个调用中只打印了数据一个,但curline变量在两个调用中也增加,导致输出中的“丢失”行。java awt print被称为两次问题
更具体的我的测试类是
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
您可以将您的解决方案作为答案发布并接受它。所以要摆脱标题中的[解决]。 – 2011-04-13 12:49:50
为了摆脱持久状态'未解决' – 2011-04-13 13:10:49
@ alberto-zaccagni这就是我想要做的,但我没有看到任何选项发表回复我自己的问题,也许我没有任何选项。所以我决定编辑我的问题,而不是将它添加到评论中。因此,如果存在更好的方式发布我的解决方案(以帮助其他用户解决同样问题),请告诉我。谢谢。 – javment 2011-04-13 13:24:58