如何在不显示打印对话框的情况下使用 JRPrintServiceExporter 更改边距?

Posted

技术标签:

【中文标题】如何在不显示打印对话框的情况下使用 JRPrintServiceExporter 更改边距?【英文标题】:How to change margins with JRPrintServiceExporter without showing the printing dialog? 【发布时间】:2019-12-30 16:36:50 【问题描述】:

我正在将 Jasper 报告打印到 Zebra 标签打印机。标签上有一个二维码和一个数字。如果我将报告导出到 PDF 文件并打印出来,它会打印得很好,但如果我直接从 Java 应用程序打印它,则不会显示数字。经过进一步测试,如果我直接打印它但如果我显示打印对话框并且如果我擦除边距,那么它也可以正确打印。我注意到该对话框为报告添加了非常重要的边距:右(mm):191,21 和底部(mm)229,66。

报告本身没有任何边距,并且确实按预期打印为 pdf 文件:

leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"

但似乎在使用 JRPrintServiceExporter 打印时添加了以下代码:

JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, rpt);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, true); // won't work if false
exporter.exportReport();

如何以编程方式删除边距以便绕过打印对话框?

【问题讨论】:

你试过用 OffsetX/OffsetY 玩吗? 你可以看看:Changing the report margins using the API&Margins in 'Page Setup'&How to set printer margin in java&Making margins smaller - Java Printing&Java printing: creating a PageFormat with minimum acceptable margin 第一个链接中的偏移量问题实际上来自我,从 11 年前开始。哇...无论如何,我在您提供的第三个链接上找到了解决方案。谢谢! 【参考方案1】:

感谢 Alex K 提供的其中一个链接,在 cmets 中,我能够通过添加具有我需要的确切尺寸的新 MediaPrintableArea 来使其工作:

PrintRequestAttributeSet printReqAttr = new HashPrintRequestAttributeSet();
printReqAttr.add(new MediaPrintableArea(0f, 0f, 50f, 25f, MediaPrintableArea.MM));
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printReqAttr);

【讨论】:

以上是关于如何在不显示打印对话框的情况下使用 JRPrintServiceExporter 更改边距?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用对话框的情况下在操作栏上方显示视图?

如何在不覆盖的情况下连续打开对话框

如何在不将焦点转移到另一个窗口的情况下显示 MFC 对话框

如何在不强制“另存为”对话框的情况下设置响应文件名

如何在不使用对话框的情况下为 C# 项目中的 MySQL 数据库设置连接字符串?

如何在不使用 cat -b 或 cat -n 选项的情况下打印文件内容以及行号[关闭]