如何在指定的打印机上打印Jasper Reports?
How to print Jasper Reports in a specified printer?
我只想打印 JasperReport,而无需用户 select 使用打印机。我搜索了它,但没有有效的解决方案。这是我的代码的相关部分:
//compile to .jasper
String report = JasperCompileManager.compileReportToFile(sourceFileName);
//fill the report
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameter, dataSource);
//print the report
JasperPrintManager.printReport(jasperPrint, true);
我想要 select 打印机而不是简单的 printReport。有什么办法吗?
应该是这样的:
try {
String report = JasperCompileManager.compileReportToFile(sourceFileName);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, para, ds);
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();
printerJob.defaultPage(pageFormat);
int selectedService = 0;
AttributeSet attributeSet = new HashPrintServiceAttributeSet(new PrinterName(printerNameShort, null));
PrintService[] printService = PrintServiceLookup.lookupPrintServices(null, attributeSet);
try {
printerJob.setPrintService(printService[selectedService]);
} catch (Exception e) {
System.out.println(e);
}
JRPrintServiceExporter exporter;
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.NA_LETTER);
printRequestAttributeSet.add(new Copies(1));
// these are deprecated
exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, printService[selectedService]);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printService[selectedService].getAttributes());
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
这是在特定打印机上打印 jasper 报告的简单解决方案
为 Select 打印机和打印报告创建一种方法
private void PrintReportToPrinter(JasperPrint jp) throws JRException {
// TODO Auto-generated method stub
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
// printRequestAttributeSet.add(MediaSizeName.ISO_A4); //setting page size
printRequestAttributeSet.add(new Copies(1));
PrinterName printerName = new PrinterName("Microsoft XPS Document Writer", null); //gets printer
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(printerName);
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printServiceAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);
exporter.exportReport();
}
然后像这样调用这个方法
/* your code*/
Map parameters = new HashMap();
parameters.put("ckotid", kid);
try {
JasperDesign jsd = JRXmlLoader.load("report\bill\check_kot.jrxml");
JasperReport jr = JasperCompileManager.compileReport(jsd);
JasperPrint jp = JasperFillManager.fillReport(jr, parameters, con);
//JasperPrintManager.printPage(jp, 0, false);
//JasperPrint jp =reportEngine.fillReport() ;//it returns stream
PrintReportToPrinter(jp);//call method
只需使用它即可。无需编写更多代码来处理 jasper
JasperPrintManager.printReport(jasperPrint, false);
你使用 true 它将显示 window
我测试过epson TM T82
成功了。
这些代码已过时。
JRPrintServiceExporter.setParameter 在 JasperReports 5.6 中被弃用。他们引入了新的接口 Exporter 并改造了所有的 exporters 以具有 ExporterInput、ReportExportConfiguration、ExporterConfiguration、ExporterOutput。见下文link
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/export/Exporter.html
这意味着您需要创建配置而不是设置参数:
private void PrintReportToPrinter(JasperPrint jasperPrint) throws JRException {
//Get the printers names
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
//Lets set the printer name based on the registered printers driver name (you can see the printer names in the services variable at debugging)
String selectedPrinter = "Microsoft XPS Document Writer";
// String selectedPrinter = "\\S-BPPRINT\HP Color LaserJet 4700"; // examlpe to network shared printer
System.out.println("Number of print services: " + services.length);
PrintService selectedService = null;
//Set the printing settings
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A4);
printRequestAttributeSet.add(new Copies(1));
if (jasperPrint.getOrientationValue() == net.sf.jasperreports.engine.type.OrientationEnum.LANDSCAPE) {
printRequestAttributeSet.add(OrientationRequested.LANDSCAPE);
} else {
printRequestAttributeSet.add(OrientationRequested.PORTRAIT);
}
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(selectedPrinter, null));
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
configuration.setPrintRequestAttributeSet(printRequestAttributeSet);
configuration.setPrintServiceAttributeSet(printServiceAttributeSet);
configuration.setDisplayPageDialog(false);
configuration.setDisplayPrintDialog(false);
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setConfiguration(configuration);
//Iterate through available printer, and once matched with our <selectedPrinter>, go ahead and print!
if(services != null && services.length != 0){
for(PrintService service : services){
String existingPrinter = service.getName();
if(existingPrinter.equals(selectedPrinter))
{
selectedService = service;
break;
}
}
}
if(selectedService != null)
{
try{
//Lets the printer do its magic!
exporter.exportReport();
}catch(Exception e){
System.out.println("JasperReport Error: "+e.getMessage());
}
}else{
System.out.println("JasperReport Error: Printer not found!");
}}
您也可以通过此代码打印到网络共享打印机。
我只想打印 JasperReport,而无需用户 select 使用打印机。我搜索了它,但没有有效的解决方案。这是我的代码的相关部分:
//compile to .jasper
String report = JasperCompileManager.compileReportToFile(sourceFileName);
//fill the report
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameter, dataSource);
//print the report
JasperPrintManager.printReport(jasperPrint, true);
我想要 select 打印机而不是简单的 printReport。有什么办法吗?
应该是这样的:
try {
String report = JasperCompileManager.compileReportToFile(sourceFileName);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, para, ds);
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();
printerJob.defaultPage(pageFormat);
int selectedService = 0;
AttributeSet attributeSet = new HashPrintServiceAttributeSet(new PrinterName(printerNameShort, null));
PrintService[] printService = PrintServiceLookup.lookupPrintServices(null, attributeSet);
try {
printerJob.setPrintService(printService[selectedService]);
} catch (Exception e) {
System.out.println(e);
}
JRPrintServiceExporter exporter;
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.NA_LETTER);
printRequestAttributeSet.add(new Copies(1));
// these are deprecated
exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, printService[selectedService]);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printService[selectedService].getAttributes());
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
这是在特定打印机上打印 jasper 报告的简单解决方案 为 Select 打印机和打印报告创建一种方法
private void PrintReportToPrinter(JasperPrint jp) throws JRException {
// TODO Auto-generated method stub
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
// printRequestAttributeSet.add(MediaSizeName.ISO_A4); //setting page size
printRequestAttributeSet.add(new Copies(1));
PrinterName printerName = new PrinterName("Microsoft XPS Document Writer", null); //gets printer
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(printerName);
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printServiceAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);
exporter.exportReport();
}
然后像这样调用这个方法
/* your code*/
Map parameters = new HashMap();
parameters.put("ckotid", kid);
try {
JasperDesign jsd = JRXmlLoader.load("report\bill\check_kot.jrxml");
JasperReport jr = JasperCompileManager.compileReport(jsd);
JasperPrint jp = JasperFillManager.fillReport(jr, parameters, con);
//JasperPrintManager.printPage(jp, 0, false);
//JasperPrint jp =reportEngine.fillReport() ;//it returns stream
PrintReportToPrinter(jp);//call method
只需使用它即可。无需编写更多代码来处理 jasper
JasperPrintManager.printReport(jasperPrint, false);
你使用 true 它将显示 window
我测试过epson TM T82 成功了。
这些代码已过时。 JRPrintServiceExporter.setParameter 在 JasperReports 5.6 中被弃用。他们引入了新的接口 Exporter 并改造了所有的 exporters 以具有 ExporterInput、ReportExportConfiguration、ExporterConfiguration、ExporterOutput。见下文link
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/export/Exporter.html
这意味着您需要创建配置而不是设置参数:
private void PrintReportToPrinter(JasperPrint jasperPrint) throws JRException {
//Get the printers names
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
//Lets set the printer name based on the registered printers driver name (you can see the printer names in the services variable at debugging)
String selectedPrinter = "Microsoft XPS Document Writer";
// String selectedPrinter = "\\S-BPPRINT\HP Color LaserJet 4700"; // examlpe to network shared printer
System.out.println("Number of print services: " + services.length);
PrintService selectedService = null;
//Set the printing settings
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A4);
printRequestAttributeSet.add(new Copies(1));
if (jasperPrint.getOrientationValue() == net.sf.jasperreports.engine.type.OrientationEnum.LANDSCAPE) {
printRequestAttributeSet.add(OrientationRequested.LANDSCAPE);
} else {
printRequestAttributeSet.add(OrientationRequested.PORTRAIT);
}
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(selectedPrinter, null));
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
configuration.setPrintRequestAttributeSet(printRequestAttributeSet);
configuration.setPrintServiceAttributeSet(printServiceAttributeSet);
configuration.setDisplayPageDialog(false);
configuration.setDisplayPrintDialog(false);
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setConfiguration(configuration);
//Iterate through available printer, and once matched with our <selectedPrinter>, go ahead and print!
if(services != null && services.length != 0){
for(PrintService service : services){
String existingPrinter = service.getName();
if(existingPrinter.equals(selectedPrinter))
{
selectedService = service;
break;
}
}
}
if(selectedService != null)
{
try{
//Lets the printer do its magic!
exporter.exportReport();
}catch(Exception e){
System.out.println("JasperReport Error: "+e.getMessage());
}
}else{
System.out.println("JasperReport Error: Printer not found!");
}}
您也可以通过此代码打印到网络共享打印机。