Qual solução adotar para visualizar e imprimir PDF ou TXT lado Cliente numa aplicação Web?
2 respostas
javamobile
V
viniciusfip
Pessoal, apesar de pesquisar não consegui fazer funcionar a opção de gerar um PDF na minha página Web e exibir para o cliente para poder visualizar e imprimir.
O relatório é gerado usando JasperReport e minha dúvida é se teria algo como:
Basicamente é só você escrever o arquivo no response da sua requisição.
O browser do cliente é que vai se encarregar de fazer download ou abrir um visualizador de PDF de acordo com as configurações dele.
Todos esses dias na luta e ainda não consegui resolver! Caso alguém possa ajudar fico grato! O que consegui ate agora foi: Ao clicar no botão Finalizar o PDF é exibido substituindo a tela.
o botão:
<p:commandButtonvalue="Finalizar"action="#{controller.finalizarJogo()}"ajax="false"></p:commandButton>publicStringfinalizarJogo()throwsJRException,IOException{// faço a logica de salvar os números selecionados e chamo pra imprimir o jogoimprimirJogo();}publicvoidimprimirJogo()throwsJRException,IOException{FacesContextcontext=FacesContext.getCurrentInstance();ServletContextservletContext=(ServletContext)context.getExternalContext().getContext();StringcaminhoRelatorio=servletContext.getRealPath("/relatorios/jogo/jogo.jasper");HttpServletResponseresponse=(HttpServletResponse)context.getExternalContext().getResponse();HashMap<String,Object>mapFicha=newHashMap<String,Object>();mapFicha.put("numeros",numerosSelecionados);Listjogo=Collections.singletonList(meuObjeto);JRBeanCollectionDataSourcedataSource=newJRBeanCollectionDataSource(jogo,false);JasperPrintimpressao=JasperFillManager.fillReport(caminhoRelatorio,null,dataSource);finalJRPdfExporterexporter=newJRPdfExporter();SimplePdfExporterConfigurationconfiguration=newSimplePdfExporterConfiguration();configuration.setPdfJavaScript(PdfExporterConfiguration.PROPERTY_PDF_JAVASCRIPT);// algumas postagens falava que isso deveria funcionar, mas nao foi...// configuration.setPdfJavaScript("this.print()");exporter.setConfiguration(configuration);exporter.setExporterInput(newSimpleExporterInput(impressao));exporter.setExporterOutput(newSimpleOutputStreamExporterOutput(response.getOutputStream()));response.setContentType("application/pdf");response.setHeader("Pragma","public");response.setHeader("Cache-control","must-revalidate");response.setHeader("Content-disposition","inline; filename=jogo.pdf");JasperExportManager.exportReportToPdfStream(impressao,response.getOutputStream());FacesContext.getCurrentInstance().renderResponse();exporter.exportReport();PrimeFaces.current().executeScript("PF('finalizadoSucesso').show();");FacesContext.getCurrentInstance().responseComplete();}
ao chamar imprimirJogo() exibe o PDF(tentei com txt, mas fez o download vazio) na própria URL ex:localhost:8080/jogo/home.xhtml. quando clico em finalizar exibe o PDF sem alterar a URL
O ideal seria exibir o arquivo em um dialog e poder selecionar a impressora ou fechar a janela.
o setDisplayPrintDialog só funciona no lado servidor. Talvez em Txt fosse até melhor pois nao precisaria instalar leitor pdf caso a maquina não tivesse, mas também nao consegui…