2017-02-13 1 views
0

Я разрабатываю веб-приложение с помощью jsf, и я создал файл отчета jasper с помощью iReport.Можно ли печатать jasper-файл с сервера java-сервера на стороне клиента?

Я пытаюсь распечатать этот файл автоматически (при нажатии кнопки метод отправляет файл непосредственно на принтер по умолчанию, выбранный в системе).

Моя проблема заключается в том, что печать на стороне сервера (это означает, что, если я лоток для печати от другого пользователя, подключенного к серверу, файл печатается на принтере сервера.

Мой вопрос : есть ли способ печати этих файлов в принтере клиента

это мой код для печати на стороне сервера, но это не работает на стороне клиента, означает, что это напечатано на принтере сервера

import java.awt.print.PrinterJob; 
import javax.print.PrintService; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.HashPrintServiceAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 
import javax.print.attribute.PrintServiceAttributeSet; 
import javax.print.attribute.standard.Copies; 
import javax.print.attribute.standard.PrinterName; 
import net.sf.jasperreports.engine.JRDataSource; 
import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JRExporterParameter; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
import net.sf.jasperreports.engine.export.JRPrintServiceExporter; 
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter; 



    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)); 
     System.out.println("01-*********************"); 
     PrintService[] services = PrinterJob.lookupPrintServices(); 
     for (PrintService prnt : services) { 
      System.out.println(prnt.getName()); 
     } 
     System.out.println("02-*********************"); 
     PrinterName printerName = new PrinterName(services[0].getName(), null); //gets printer 
     System.out.println("03-*********************"); 
     PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet(); 
     printServiceAttributeSet.add(printerName); 
     System.out.println("04-*********************"); 
     JRPrintServiceExporter exporter = new JRPrintServiceExporter(); 
     System.out.println("05-*********************"); 
     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(); 
    } 

    public String creerRapportUniqueProjet() { 

     try { 

      Map<String, Object> param = new HashMap<>(); 
      param.put("rapportNom", "Projet"); 
      param.put("PAR_IMAGE_BACKGROUND", "/reporting/sources/BackgroundElit.png"); 
      param.put("PAR_IMAGE_HEADER", "/reporting/sources/headerElit.png"); 

      System.out.println("1-*********************"); 
      JRDataSource dataSource = new JRBeanCollectionDataSource(reportingProjetViewFacade.findById(projet)); 
      System.out.println("2-*********************"); 
      JasperPrint print = JasperFillManager.fillReport(getClass().getResourceAsStream("/reporting/sources/projectAllDetail.jasper"), param, dataSource); 
      System.out.println("3-*********************"); 
      //JasperPrintManager.printPage(jp, 0, false); 
      //JasperPrint jp =reportEngine.fillReport() ;//it returns stream 
      PrintReportToPrinter(print);//call method 
      System.out.println("4-*********************"); 
     } catch (JRException e) { 
      e.printStackTrace(); 
      System.out.println("Exception = " + e); 
     } 

     return ""; 
    } 
+1

также это релевантно http://stackoverflow.com/questions/8733276/how-to-open-print-dialog-after-pdf-генерированные –

+0

u ошибочны, это не дублируется, я нашел решение после более недели, его просто добавить один СВОЙСТВА в файл jrxml, это СВОЙСТВА являются: /* название недвижимости */ net.sf.jasperreports.export.pdf.javascript /* значение свойства */ this.print ({bUI: true, bSilent: true, bShrinkToFit: false}); –

+0

Это то, что говорит дубликат, не так ли ?, сначала тот, который вы должны использовать pdf, во-вторых, что вы должны использовать javascript в pdf, чтобы открыть диалог ?. Кроме того, я видел, что вы ответили на дубликат этим решением, поэтому, если такие же ответы применяются, это не такая же проблема? –

ответ

-2
?

Я столкнулся с той же проблемой и решил ее с помощью таблицу в моем sgbd с параметрами ip клиента, типом документа (например, a4 doc или ярлыком со штрих-кодом) и именем используемого принтера.

У меня есть сервлет, предназначенный для печати, отображения или сохранения вывода моих отчетов; , вы должны установить все свои принтеры на свой сервер.

Я знаю, что это не может работать через Интернет, но для офисного приложения это хорошо работает.

+2

Вопрос в том, чтобы решить его на стороне клиента, решение заключается в том, что вы не можете печатать напрямую, но вы может включать javascript в pdf, чтобы открыть диалоговое окно печати, см. дубликат и мой дополнительный комментарий –

Смежные вопросы