我正在尝试创建一个在列中打印数据的应用程序。我的问题是job.setPrintable多次运行..。这意味着文件完全错了..。
有人对此有什么想法吗?
也许你对我如何使这段代码更好(?).
谢谢你的进阶
例如,我的ArrayList中有10个索引.当我运行应用程序时,它将在我的文档中创建20列.其中10个完全是空的,只占了空间.
private final int PAGE_WIDTH = Math.round(MediaSize.ISO.A4.getX(MediaSize.MM));
private final int PAGE_HEIGHT = Math.round(MediaSize.ISO.A4.getY(MediaSize.MM) / 8);
private PrinterJob job = PrinterJob.getPrinterJob();
private Graphics2D column;
private Font font = new Font("Serif", Font.BOLD, 9);
private int writeOnRow = 0;
private int pageRow = 0;
private int columnSpace = 4;
private int itemsInRow = 3;
private int itemCurrentRow = 0;
public Printer(final ArrayList<Customers> resultAsList) {
resultAsList.remove(0);
job.setPrintable(new Printable() {
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
column = (Graphics2D)g;
column.translate(pf.getImageableX(), pf.getImageableY());
column.setFont(font);
for (Customers c : resultAsList) {
String line =
c.getName() + "\n" +
c.getAddress() + "\n" +
c.getPostcode() + " " + c.getCity();
//DATA, COLUMN, ROW
column.drawString(c.getName(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2);
column.drawString(c.getAddress(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2);
column.drawString(c.getPostcode() + " " + c.getCity(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2);
if (itemCurrentRow == itemsInRow) {
pageRow += PAGE_HEIGHT;
itemCurrentRow = 0;
columnSpace = 4;
itemCurrentRow++;
} else {
writeOnRow = pageRow;
columnSpace += PAGE_WIDTH;
itemCurrentRow++;
}
writeOnRow += pageRow;
laps++;
}
return PAGE_EXISTS;
}
});
boolean doPrint = job.printDialog();
if (doPrint) {
try {
job.print();
} catch (PrinterException ex) {
System.out.println(ex);
}
}
}发布于 2016-08-09 13:23:37
您的代码看起来不干净。它迟早会很难维持--实际上它已经存在了。
private static final字段,则会更好。columnSpace = 4;这样的神奇数字。这是什么4?考虑把它变成康斯特场。throws。看来您的循环可能是无效的。为了使您的代码更漂亮,我建议您阅读清洁代码。这会让事情变得更清楚。
https://stackoverflow.com/questions/38851442
复制相似问题