Imprimir relatório web - Jasper + JSF

156 views
Skip to first unread message

Carine Monteiro

unread,
Jun 2, 2014, 12:52:00 PM6/2/14
to jasperreports-...@googlegroups.com
Boa tarde pessoal, 

Estou precisando de uma ajudinha, tenho um relatório web que deveria imprimir direto na impressora padrão do cliente, esse processo tem que ser transparente ao usuário, ele lê um código com leitora de código de barras, o sistema processa e imprime o relatório jasper.

protected void printRelatorio(String pRel, String pSubRel, Map<String, Object> pParametros, List pDataSource, List pSubDataSource) {


        
ServletContext lContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();

        
String lPath = lContext.getRealPath(pRel);
        
JasperReport lJr = (JasperReport) JRLoader.loadObject(lPath);
        
JRBeanCollectionDataSource lJrds = new JRBeanCollectionDataSource(pDataSource);

        
if (!pSubRel.isEmpty()) {

           
String lPathSub = lContext.getRealPath(pSubRel);
           pParametros
.put("SUBREPORT_DIR", lPathSub);
           pParametros
.put("SUB_DATA_SOURCE", pSubDataSource);
        
}

        
JasperPrint lPrint = JasperFillManager.fillReport(lJr, pParametros, lJrds);

        
// IMPRIME APENAS NA IMPRESSORA DO SERVIDOR
        
JasperPrintManager.printReport(lPrint, false);


        
// IMPRIME NA IMPRESSORA LOCAL DO CLIENTE, MAS SAI EM BRANCO
        
PrinterJob printerJob = PrinterJob.getPrinterJob();
        
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        
PrintService selectedService = null;

        
if (services.length != 0 || services != null) {
            
for (PrintService service : services) {
                
String existingPrinter = service.getName();
                
if (existingPrinter.equals("TLP2844")) {
                    selectedService 
= service;
                      
break;
                
}
             
}

             
if (selectedService != null) {
                 
try {
                     printerJob
.setPrintService(selectedService);
                 
} catch (PrinterException e) {
                    e
.printStackTrace();
                 
}
                 
boolean printSucceed = JasperPrintManager.printReport(lPrint, false);
             
}
      
}
}

O problema está nos comentários do código, usando apenas JasperPrintManager.printReport() não imprime no cliente e sim no servidor.
Já usando com o PrinterJob.getPrinterJob(), sai na impressora que quero (local), mas os dados não saem, é impresso em branco.

Alguém pode me ajudar?
Obrigada,

Giovanni Ardenghe

unread,
Apr 4, 2018, 9:42:14 AM4/4/18
to JasperReports / iReport Brasil
Olá Carine, bom dia!

Estou com o mesmo problema, vc resolveu?

Se sim, pode compartilhar?

Obrigado.

Denis - Gmail

unread,
Apr 4, 2018, 1:22:41 PM4/4/18
to jasperreports-...@googlegroups.com

Ola

Basta adicionar o argumento no final do JasperPrintManager como true e nao false

JasperPrintManager.printReport(lPrint, true);
--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Pedro Domingues

unread,
Jul 24, 2020, 1:27:37 AM7/24/20
to JasperReports / iReport Brasil
Oii como você resolveu isso?


Em segunda-feira, 2 de junho de 2014 13:52:00 UTC-3, Carine Monteiro escreveu:

Denis Benjamim

unread,
Jul 24, 2020, 5:06:13 AM7/24/20
to jasperreports-...@googlegroups.com
Estamos falando de aplicação web certo? Recentemente deixei a encargo do navegador essa tarefa passo na resposta do servidor que o arquivo é do tipo PDF  o próprio navegador abre o PDF e o cliente que decide se vai ou não imprimir, mas acredito que através de JS deva existir uma forma nesse link tem uma série de instruções como fazer com spring http://denisbenjamim.blogspot.com/?m=1


--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.

Denis Benjamim

unread,
Jul 24, 2020, 5:11:09 AM7/24/20
to jasperreports-...@googlegroups.com
Dando uma rápida olhada temos essa opção que teoricamente abre o diálog não testei: link - https://stackoverflow.com/questions/23482263/automatically-open-the-printer-dialog-after-providing-pdf-download

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print();");

Pedro Domingues

unread,
Aug 4, 2020, 2:41:16 PM8/4/20
to JasperReports / iReport Brasil
Estas soluções abrem em nova aba ou imprime no navegador, que não é o meu caso eu realmente preciso que vá direto para a impressora do cliente. 


Em sexta-feira, 24 de julho de 2020 06:11:09 UTC-3, Denis Benjamim escreveu:
Dando uma rápida olhada temos essa opção que teoricamente abre o diálog não testei: link - https://stackoverflow.com/questions/23482263/automatically-open-the-printer-dialog-after-providing-pdf-download

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print();");

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-ireport-brasil+unsub...@googlegroups.com.

Denis Benjamim

unread,
Aug 4, 2020, 9:05:31 PM8/4/20
to jasperreports-...@googlegroups.com
Infelizmente sem ideias, e não consigo me Lembrar de nem uma aplicação web q consiga esse nível de permissão, se fosse desktop usando swing aí sim seria possível imprimir diretamente na impressão padrão da máquina do cliente. 

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.

--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/jasperreports-ireport-brasil/087fce42-64af-4e83-8ed0-91d27cf6bd57o%40googlegroups.com.

Robson

unread,
Aug 13, 2020, 9:54:28 AM8/13/20
to JasperReports / iReport Brasil
Olá! então pegando carona aqui eu penso que isto ai é bem complicado, já vivemos em uma época que os applet´s não é mais utilizado então imprimir direto sem interação do usuário em sistemas web é realmente complicado, penso que com JWS, hoje temos por exemplo muitos aplicativos de bancos sendo "agentes" instalados na maquina do cliente para "conversar" com o servidor penso que é uma forma 

Eu tenho aqui por exemplo fichas de atendimento que é um lance bem rápido, o cliente senta na frente do atendente informa os exames e ao final é impresso a ficha que tem que ser um lance bem rápido para não gerar filas, ou isto ai é repensado ou tem que ter um "agente" na maquina cliente para imprimir esta ficha direto na impressora e de modo texto para ser bem rápido.

O lance de vc ter um código java no cliente é que vc precisa assinar este jar e assinar ou seja ter um certificado que não deve ser menos de uns  2.000 não é para todos, mais eu vi um vídeo em no canal do YT do Alex JDevTreinamentos  sobre Impressão Direta

Denis Benjamim

unread,
Aug 13, 2020, 10:30:43 AM8/13/20
to jasperreports-...@googlegroups.com
Sobre o certificado da para criar um não assinado com o keytool, mas tem de ir em cada máquina e colocar na exceção para executar  pois o certificado não é verificado. Sendo assim não iria precisar gastar com um certificado para assinar a aplicação mas teria de em cada máquina com esse applet inserir na jvm a liberação 

Pedro Domingues

unread,
Aug 17, 2020, 6:54:38 PM8/17/20
to jasperreports-...@googlegroups.com

Eu estou vendo algumas formas “gambiarras” de se fazer isso. Pois é realmente mais complicado então estou dando atenção a outras features do software e deixando esta para depois já que não é tão obrigatória.

Pedro Domingues .

unread,
Aug 17, 2020, 6:54:38 PM8/17/20
to jasperreports-...@googlegroups.com

 

Com todo este trampo compensa fazer uma aplicação desktop.

 

 

 

De: Denis Benjamim
Enviado:quinta-feira, 13 de agosto de 2020 11:30
Para: jasperreports-...@googlegroups.com
Assunto: Re: [JasperReports / iReport Brasil] Re: Imprimir relatório web - Jasper + JSF

 

Sobre o certificado da para criar um não assinado com o keytool, mas tem de ir em cada máquina e colocar na exceção para executar  pois o certificado não é verificado. Sendo assim não iria precisar gastar com um certificado para assinar a aplicação mas teria de em cada máquina com esse applet inserir na jvm a liberação 

Reply all
Reply to author
Forward
0 new messages