如何在指定的打印机中打印Jasper Reports?

我想要的只是在没有用户选择打印机的情况下打印JasperReport。 我搜索了它,但没有好的解决方案可行。 这是我的代码的相关部分:

//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); 

我想要选择一台打印机而不是简单的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报告创建一个选择打印机和打印报告的方法

 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它会显示窗口

我测试了它epson TM T82它的工作原理。

这些代码已过时。 JRPrintServiceExporter.setParameter在JasperReports 5.6中被弃用。 他们引入了新的界面Exporter并对所有出口商进行了改造,使其具有ExporterInput,ReportExportConfiguration,ExporterConfiguration,ExporterOutput。 见下面的链接

http://jasperreports.sourceforge.net/api/net/sf/jasperreports/export/Exporter.html

这意味着您需要创建配置而不是setParameter:

 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 , 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!"); }} 

您也可以通过此代码打印到网络共享打印机。