Imprimindo diretamente para Impressora iReport
Bom dia,
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();
}
}
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
Curtidas 0
Respostas
Dyego Carmo
04/11/2009
É impossivel imprimir diretamente em um browser , voce terá que gerar um PDF e enviar para o usuario imprimir...
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 !
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 !
GOSTEI 0
Victor Lima
04/11/2009
Boa Tarde.
Voce poderia me mostrar os caminhos das pedras.
obrigado
Victor
Voce poderia me mostrar os caminhos das pedras.
obrigado
Victor
GOSTEI 0
Victor Lima
04/11/2009
Boa Tarde,
tem alguma forma de que eu possa enviar o PDF direto para impressora ?
obrigado
tem alguma forma de que eu possa enviar o PDF direto para impressora ?
obrigado
GOSTEI 0
Dyego Carmo
04/11/2009
Via web isso nao eh possivel...
Voce vai enviar ao browser o PDF e ele vai abrir via acrobat plugin , tendo que o usuario apertar o botao de "IMPRIMIR"...
Voce vai enviar ao browser o PDF e ele vai abrir via acrobat plugin , tendo que o usuario apertar o botao de "IMPRIMIR"...
GOSTEI 0
Andrei Hirata
04/11/2009
Olá Victor.Quanto tempo hein...
Acho que tenho uma solução para vc
1.Criar uma impressora virtual PDF.. assim seu sistema ao imprimir ele vai gerar o pdf para vc SEM NENHUM CODIGO Extra.
ouuuuuuuuuuuuuuuuu
2.Isto aqui que me ajudou muito
http://itextdocs.lowagie.com/tutorial/general/webapp/index.php#silentprint
GOSTEI 0
Victor Lima
04/11/2009
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
GOSTEI 0
Andrei Hirata
04/11/2009
Bom.Eu já cheguei a fazer assim
-Pega os valores da venda e armazena no banco e ao mesmo tempo grave em um arquivo.pdf em uma pasta
-Depois abro o arquivo pdf e dou o comando print.
-Depois fecho o arquivo
-depois deleto ou movo para outra pasta
TUDO isto é feito automaticamente.tenho 1 sistema que detecta a entrada do arquivo pdf na pasta, le o arquivo e faz tudo isto..é isto que vc quer?
GOSTEI 0