How to print Jasper reports in the specified printer?

All I want to do is print JasperReport without a user selecting a printer. I searched for it, but there is no good solution that works. This is the actual part of my code:

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

Instead of just printReport, I want to choose a printer. is there any way to do this?

+7
java printing jasper-reports reporting-services
source share
4 answers

Here's how it should be:

 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(); } 
+8
source share

Here is a simple solution to print a jasper report on a specific printer. Create one method to select a printer and print the report.

 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(); } 

then call this method e.g.

 /* 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 
+3
source share

Just use this .no need more code to handle jasper

 JasperPrintManager.printReport(jasperPrint, false); 

u use true, it will show a window

I tested it with epson TM T82. It worked.

+2
source share

These codes are out of date. JRPrintServiceExporter.setParameter became deprecated in JasperReports 5.6. They introduced the new Exporter interface and updated all exporters to have ExporterInput, ReportExportConfiguration, ExporterConfiguration, ExporterOutput. See link below

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

This means that instead of setParameter, you need to create a configuration:

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

You can also print this code on a network shared printer.

0
source share

All Articles