如何在不显示打印对话框的情况下使用 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 更改边距?的主要内容,如果未能解决你的问题,请参考以下文章