背景
使用Java代码实现JasperReport指定某个打印机实现打印,及动态设置打印份数设置,Maven项目,在网上的资料很少,有各种坑,本文中使用的TIBCO Jaspersoft Studio-6.8.0软件编译的.jasper文件,如何使用此软件请自行百度
步骤
1、直接上代码,在pox.xml文件中引入所需依赖包
<!-- jasperreports start-->
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.3.1</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-anim</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-awt-util</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-css</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-dom</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-gvt</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-svg-dom</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-svggen</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-util</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>xmlgraphics-commons</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- jasperreports end-->
2、加载JasperReport模板
HashMap<String, Object> map = new HashMap<>();
map.put("TEST","TEST");
//加载模板,第一个字符串是jasper文件的地址
JasperPrint jasperPrint= JasperFillManager.fillReport("C:\Users\dhy\Desktop\test.jasper", map,new JREmptyDataSource());
3、设置指定打印机和打印份数,实现打印
//设置指定打印机地址,printer是自己设置的参数,表示打印机地址
PrintService[] pss = PrinterJob.lookupPrintServices();
PrintService ps = null;
for (int i = 0; i < pss.length; i++) {
if (pss[i].getName().equalsIgnoreCase(printer)) {
ps = pss[i];
}
}
JRAbstractExporter je = new JRPrintServiceExporter();
je.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
je.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, ps);
je.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, false);
je.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, false);
//打印,copy是自己设置的参数,表示打印份数
for(int i=1;i<=copy;i++) {
je.exportReport();
}