2015-06-24 9 views
7

Alles was ich will, ist einen JasperReport zu drucken, ohne dass der Benutzer einen Drucker auswählt. Ich habe danach gesucht, aber es gibt keine gute Lösung, die funktioniert. Dies ist der relevante Teil meines Codes:Wie drucke ich Jasper Reports auf einem bestimmten Drucker?

Anstelle von simple printReport möchte ich einen Drucker auswählen. Gibt es einen Weg, dies zu tun?

+1

Ich kann nicht der einzige sein, der mit diesem Problem kämpft ... –

Antwort

8

Dies ist, wie es sein soll ist:

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

Hier ist eine einfache Lösung Jaspis Bericht zu bestimmten Drucker erstellen Ein Verfahren zum Drucker auswählen & Bericht drucken

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

zum Drucken Rufen Sie dann diese Methode wie

/* 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 
+0

Ich möchte auf freigegebenen Drucker drucken, Wie Drucker Name für freigegebene Drucker erkennen. Ich verwende den Druckernamen "POS", es wird als "POS auf dem Server" im freigegebenen Druckernamen angezeigt. – WARRW

+0

müssen Sie den Druckernamen aus den Druckereinstellungen suchen und diesen im Code verwenden. wie ich "Microsoft XPS Document Writer" verwendet habe. Um eine redundante Code-Kompilierung zu vermeiden, können Sie den Druckernamen in db speichern und den Namen des Druckers ändern, wenn sich der Name des Druckers ändert. – CyberAbhay

+0

Ja, das Problem funktioniert nicht bei freigegebenen Netzwerkdruckern. Ich benutze Name auf Druckereinstellung, aber es funktioniert nicht für mich. – WARRW

2

Nur verwenden .NO zu mehr Code benötigen sie Jaspis

JasperPrintManager.printReport(jasperPrint, false); 

Griff u wahr es verwenden Fenster zeigen

Getestet habe ich es epson TM T82 Es funktionierte.

+0

POS wird in Geschäften usw. verwendet, so wie sie Drucker jedes Mal im Fenster – CyberAbhay

+0

wählen keine Notwendigkeit, Drucker zu wählen, während Anwendung läuft.Sie ​​haben auf Epson Drucker als Standarddrucker in Computer – Zcon

+0

gesetzt Wenn sie zwei Drucker installiert haben eine für ihre persönliche Nutzen und dann für Kunden (POS)? Wenn sie ein Hotelabrechnungssystem haben: einen Drucker an der Rezeption und einen in der Küche. Denken Sie nur an Box Mann, wenn sie zwei Drucker haben, was dann. Ihre täglichen Drucke werden an POS gesendet werden, wenn Sie es als Standard festlegen – CyberAbhay

0

Diese Codes sind veraltet. JRPrintServiceExporter.setParameter wurde in JasperReports 5.6 nicht mehr unterstützt. Sie führten eine neue Schnittstelle Exporter ein und rüsteten alle Exporteure nach ExporterInput, ReportExportConfiguration, ExporterConfiguration, ExporterOutput um. Siehe Link unten

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

Dies bedeutet, dass statt setParameter, müssen Sie Konfiguration erstellen:

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

Sie können auch durch diesen Code zu einem freigegebenen Netzwerkdrucker drucken.

Verwandte Themen