import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; public class PringMultipleImage implements Printable { @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { // 要列印的圖片 BufferedImage[] images = this.getPrintImages(); if (images.length == 0) return Printable.NO_SUCH_PAGE; // 固定寬度(以符合掃描器大小) double stickerWidth = 220; double maxStickerHeight = 0; // 最大高度 for (int i = 0; i < images.length; i++) { maxStickerHeight = Math.max(maxStickerHeight, stickerWidth / images[i].getWidth() * images[i].getHeight()); } // 計算頁面可列印張數, 每頁張數 : c*r int c = (int) (pageFormat.getImageableWidth() / stickerWidth); int r = (int) (pageFormat.getImageableHeight() / maxStickerHeight); int p = (int) Math.ceil(1.0 * images.length / c / r); // 頁數 if (pageIndex < p) { // 計算cell大小 double cellWidth = pageFormat.getImageableWidth() / c; double cellHeight = pageFormat.getImageableHeight() / r; // 計算位置 double translateX = (cellWidth - stickerWidth) / 2; // int cellx = 0; int celly = 0; for (int i = 0 + pageIndex * c * r; i < images.length; i++) { double stickerHeight = stickerWidth / images[i].getWidth() * images[i].getHeight(); double translateY = (cellHeight - stickerHeight) / 2; graphics.drawImage(images[i], // (int) (translateX + cellx * cellWidth), // (int) (translateY + celly * cellHeight), // (int) stickerWidth, // (int) stickerHeight, // null); // 下一個cell if (cellx + 1 == c) { cellx = 0; celly++; } else { cellx++; } } return Printable.PAGE_EXISTS; } else { return Printable.NO_SUCH_PAGE; } } private BufferedImage[] getPrintImages() { // Generate image here return null; } public static void main(String[] args) { PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(new PringMultipleImage()); if (job.printDialog()) { try { job.print(); } catch (PrinterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }reference:
Lesson: Printing (The Java™ Tutorials > 2D Graphics)
Java Print Service API User Guide