gpt4 book ai didi

java - 如何将 jasper 报告水平拆分为 2 页

转载 作者:行者123 更新时间:2023-12-02 10:49:22 26 4
gpt4 key购买 nike

我想在 A4 尺寸打印机上打印一份关于 jasper 的 A2 尺寸报告。我想以四份横向打印,因此第 1 页和第 2 页作为 A2 的顶部,第 3 页和第 4 页作为 A2 的底部。

.______________________________。
| | |
| 1             | 2             |
| | |
|------------..------------+--.-------------------- |
| | |
| 3             | 4             |
|.______________|______________.|

通常打印仅打印第1页和第3页的左侧部分。如何打印该页面的所有四个部分,每个部分在其自己的页面上

最佳答案

实际上我能够做到这一点(不是最好的质量,但目前对我有用):

  • 首先将 jasper 报告转换为图像,
  • 然后将图像裁剪成打印机纸张大小的片段,然后将其发送到打印机。
  • 并将图像一张一张发送到打印机

JasperPrint jp = the_jasper_print_to_be_printed; // 
int i = 1; // Page Number to print
float 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();
}
}

关于java - 如何将 jasper 报告水平拆分为 2 页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52288608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com