Я новичок в печати с Java.Сначала я начал печатать данные одной страницы, и все было в порядке.Теперь я начинаю проверять, как разбивать свои данные на страницы.У меня есть класс, который реализует интерфейс для печати, и у меня есть переменная int (curLine), чтобы сохранить количество строк, которые я уже напечатал, и переменные строки, чтобы сохранить общее количество, которое я хочу напечатать наконец.В общедоступных методах int print (Graphics graphics, PageFormat pageFormat, int pageIndex), когда я использую graphics.drawString (...);метод рисования строки Я увеличиваю значение метрики (curLine ++), но в принтере я не получаю желаемых результатов. Я думаю, что метод print meta вызывается дважды для определенной 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;
}
}
и вы можете увидеть результат здесь https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0ByN6KrI39kzuMTRmZDA5NTMtOGJjZi00ZmRhLThlYWYtMzUwNzE0NTdkMjcz&hl=en&authkey=CLa-svAG
Вы видите, что он не начинался со строки 0