紫衣仙女
实际上我能够做到(不是最好的质量,但目前对我有用):首先转换碧玉报告一个图像,然后将图像裁剪成打印机纸张大小的碎片,然后再将它们发送到打印机。并将图像一张一张地发送到打印机JasperPrint jp = the_jasper_print_to_be_printed; // int i = 1; // Page Number to printfloat zoom = 1f;BufferedImage image = (BufferedImage) JasperPrintManager.printPageToImage(jp, i, zoom);PrinterJob printJob = PrinterJob.getPrinterJob();PageFormat pf = printJob.getPageFormat(null);int paperWidth = Functions.StringToInt(pf.getImageableWidth());int paperHeight = Functions.StringToInt(pf.getImageableHeight());int x = 0, y = 0;while (y < image.getHeight()) { x = 0; while (x < image.getWidth()) { Rectangle rect = new Rectangle(x, y, paperWidth, paperHeight); printImage(Functions.cropImage(image, rect), printJob); x += paperWidth; } y += paperHeight;}裁剪图像的功能public static BufferedImage cropImage(BufferedImage src, Rectangle rect) { int w = (rect.x + rect.width > src.getWidth()) ? src.getWidth() - rect.x : rect.width; int h = (rect.y + rect.height > src.getHeight()) ? src.getHeight()- rect.y : rect.height; BufferedImage dest = src.getSubimage(rect.x, rect.y, w, h); return dest;}将裁剪图像发送到打印机的功能private static void printImage(BufferedImage image, PrinterJob printJob) { printJob.setPrintable(new Printable() { public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex != 0) { return NO_SUCH_PAGE; } graphics.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null); return PAGE_EXISTS; } }); try { printJob.print(); } catch (PrinterException e1) { e1.printStackTrace(); }}