Imprimindo diretamente para Impressora iReport
04/11/2009
0
Tenho uma aplicação web que precisa imprimir um etiqueta direto para impressora, no sistema realizo a consulta normalmente e mostro na tela o resultado, mas o código que estou utilizando abaixo imprime no servidor e nao na máquina do Cliente.
Exite um código comentado na função abaixo que funciona mas eu teria que mostrar na tela com um PDF, sendo que eu preciso que imprima direto na impressora local do cliente e nao no Servidor.
Segue codigo utilizado para a chamada da impressão:
@SuppressWarnings("unchecked")
//executa o relatório através do actionListener
public void executarEtiqueta() throws IOException, java.text.ParseException, ParseException {
todosResultsPesq();
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
//pega o caminho do arquivo .jasper da aplicação
InputStream reportStream = context.getExternalContext().getResourceAsStream("/reporter/etiquetas/EtiquetaEndereco.jasper");
//envia a resposta com o MIME Type PDF
// response.setContentType("application/pdf");
/*for�a a abertura de download */
// response.setHeader("Content-disposition",
// "attachment;filename=relatorio.pdf");
try {
ServletOutputStream servletOutputStream = response.getOutputStream();
//envia o título para o relatório, usando o parâmetro criado
Map<String, String> parametros = new HashMap<String, String>();
parametros.put("fornecimento", "xxxx");
List dados = new ArrayList();
Map record = null;
//varre a consulta e separa os objetos
for (Iterator iterator = todosResultsPesq().iterator();
iterator.hasNext();) {
Object[] o = (Object[]) iterator.next();
record = new HashMap();
//coloca em um Map cada um dos campos criados
//manualmente pelo relatório
record.put("fornecimento", o[0].toString());
record.put("isrisco", Boolean.parseBoolean(o[1].toString()));
record.put("endereco_entrega", o[2].toString());
record.put("nome_cliente", o[3].toString());
record.put("endereco", o[4].toString());
record.put("bairro", o[5].toString());
record.put("cidade", o[6].toString());
record.put("cep", o[7].toString());
record.put("observacao_entrega", o[8].toString());
record.put("num_notafiscal", Integer.parseInt(o[9].toString()));
record.put("data_nf", this.convertTimestamp(o[10].toString()));
//adiciona o List dados
dados.add(record);
}
//cria uma fonte de dados para cole��es
JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(dados);
//envia para o navegador o PDF gerado
// JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parametros, fonteDados);
JasperPrint print = JasperFillManager.fillReport(reportStream, parametros, fonteDados);
JasperPrintManager.printPage(print, 0, false);
servletOutputStream.flush();
servletOutputStream.close();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//evita erro do JSF após completar
//a geração do relatório
//avisando o FacesContext que a resposta está completa
context.responseComplete();
}
}
Victor Lima
Posts
04/11/2009
Dyego Carmo
Se voce quiser imprimir diretamente vai precisar criar ou uma APPLET ou um ACTIVEX para acessar a porta diretamente do PC e mandar as informacoes !
04/11/2009
Victor Lima
Voce poderia me mostrar os caminhos das pedras.
obrigado
Victor
04/11/2009
Victor Lima
tem alguma forma de que eu possa enviar o PDF direto para impressora ?
obrigado
09/11/2009
Dyego Carmo
Voce vai enviar ao browser o PDF e ele vai abrir via acrobat plugin , tendo que o usuario apertar o botao de "IMPRIMIR"...
09/11/2009
Andrei Hirata
09/11/2009
Victor Lima
Boa Tarde.
O que preciso é que o usuario utilizando um leitora de codigo de barra onde a maquina nao tem mouse somente teclado e leitora realizasse uma leitura de um código de barra em um campo texto e ao sair do campo automaticamente enviar para impressora onde gera a etiqueta.
Tem que ser dinamico pois o usuario não faz somente 1 mas uma pancada de consulta, colocar para ele clicar vai atrasar porque ele consulta com a leitora e se parar para clicar para imprimir vai atrasar, porque sao 3 cliques. Um para o botao imprimir, outro para mandar imprimir e outro para fechar a tela do pdf.
obrigado.
Victor
09/11/2009
Andrei Hirata
Clique aqui para fazer login e interagir na Comunidade :)