Como enviar arquivo p uma impressora remota via HTTP?

Tenho uma aplicação WEB usando JSF. Os usuários remotos terão impressoras conectadas a seu PC, e eu preciso enviar relatórios gerados pelo sistema para impressão nestas impressoras dos usuários.

Implementei a classe a classe Printable, mas não estou sabendo como pegar essa impressora do usuário para completar tal objetivo, alguém já fez algo parecido!!!

Agradeço qualquer sugestão…

O sistema é web?

Se for web, você simplesmente não vai conseguir. Supondo que é web (dado que você colocou servidor web na imagem):

Na melhor das hipóteses você deveria ter um applet que talvez possa acessar a impressora. Ou então, manda um

window.print();

junto com a página do relatório para abrir a janela de escolha da impressora (e aí fica a critério do usuário pedir a impressão, ou não).

Pense na questão de segurança, se todo site que você entrasse resolvesse fazer automagicamente a impressão da tela! Não é legal, né?

[quote=otaviofcs]O sistema é web?

Se for web, você simplesmente não vai conseguir. Supondo que é web (dado que você colocou servidor web na imagem):

Na melhor das hipóteses você deveria ter um applet que talvez possa acessar a impressora. Ou então, manda um

window.print();

junto com a página do relatório para abrir a janela de escolha da impressora (e aí fica a critério do usuário pedir a impressão, ou não).

Pense na questão de segurança, se todo site que você entrasse resolvesse fazer automagicamente a impressão da tela! Não é legal, né?[/quote]

nao eh uma tela, e sim um arquivo pdf. Nao tem problema aparecer a caixa d dialogo p o usuario contanto q eu posso passar o arquivo como parametro.

vai printar a tela… e eu n terei o relatorio em tela…

bom… e o uso d Applet seria inviavel, pois o usuario pod ou n tr java instalado… normalmente n teraaa…

bom para q fique mais claro, estou usando JSF…

Se o servidor tiver acesso à fila da impressora do cliente, e se de alguma forma o nome dessa fila for informado e configurado, talvez isso seja possível.
Por exemplo, se o cliente disser que a impressora dele é “\abcde\printerX” e o driver dessa impressora estiver corretamente configurado no servidor.
O problema é que o servidor teria de poder acessar remotamente a fila, o que nem sempre é possível, porque mesmo em intranets o servidor não costuma poder acessar recursos dos clientes devido a regras de firewall ou outras coisas parecidas.

Em sistemas que normalmente fazemos, solicitamos ao cliente que receba o PDF (um servlet é que gera o tal PDF) e ele é que tem de iniciar (manualmente) a impressão.
Como o PDF é visualizado em uma janela do browser com os botões de impressão que o próprio Adobe Reader disponibiliza, então não é tão traumático assim.

entao thingol, essa eh a minha duvida, e o meu principal objetivo agora, eu preciso da fila de impressora do cliente, ou apanes a impressora padrao, para dai tentar mandar o arquivo p a impressora, mas o problema eh como???

[quote]Em sistemas que normalmente fazemos, solicitamos ao cliente que receba o PDF (um servlet é que gera o tal PDF) e ele é que tem de iniciar (manualmente) a impressão.
Como o PDF é visualizado em uma janela do browser com os botões de impressão que o próprio Adobe Reader disponibiliza, então não é tão traumático assim.[/quote]

a ideia eh q o usuario n abrisse o arquivo, e sim apenas imprimisse-o…
e nisso poderia sair apenas 1 ou varias copias, isso tudu determinado pelo server…

[quote=thingol]Em sistemas que normalmente fazemos, solicitamos ao cliente que receba o PDF (um servlet é que gera o tal PDF) e ele é que tem de iniciar (manualmente) a impressão.
Como o PDF é visualizado em uma janela do browser com os botões de impressão que o próprio Adobe Reader disponibiliza, então não é tão traumático assim. [/quote]

Concordo totalmente. Mesmo com uma intranet, o custo de gerenciamento dessas filas seria algo absurdo. Você precisa realmente garantir que o usuário imprima? E só pode imprimir uma vez, é isso? Se for esse o caso, e se acaba o cartucho?

Acho que você deveria limitar a sua responsabilidade em relação a sua impressão. Ou então, só com applet (pelo menos que eu saiba).

abraços,

otávio

[quote=otaviofcs][quote=thingol]Em sistemas que normalmente fazemos, solicitamos ao cliente que receba o PDF (um servlet é que gera o tal PDF) e ele é que tem de iniciar (manualmente) a impressão.
Como o PDF é visualizado em uma janela do browser com os botões de impressão que o próprio Adobe Reader disponibiliza, então não é tão traumático assim. [/quote]

Concordo totalmente. Mesmo com uma intranet, o custo de gerenciamento dessas filas seria algo absurdo. Você precisa realmente garantir que o usuário imprima? E só pode imprimir uma vez, é isso? Se for esse o caso, e se acaba o cartucho?

Acho que você deveria limitar a sua responsabilidade em relação a sua impressão. Ou então, só com applet (pelo menos que eu saiba).

abraços,

otávio[/quote]

eu n precisso tr a garantia q ele imprimiu… mas de q ele receba, se ele n imprimir vai ser um problema dele… dai ele vai tr q relatar pq n imprimiu tais documentos…
o server vai setar qtos documentos ele vai imprimir dependendo do tipo d usuario q o Usuario for…

abraco…

Ora, se o PDF for visualizado no browser, ele recebeu o tal arquivo, não?

Se ele imprimiu ou não é mais complicado. (Salve as árvores, não imprima documentos em papel, conserve-os em formato PDF :stuck_out_tongue: ).

Só completando, em nossos sistemas o PDF é visualizado diretamente no browser em um frame; não é enviado como um arquivo “Salvar como”. Então para o usuário basta clicar no botão “Imprimir” do Adobe Reader que é visualizado no browser.

[quote=thingol]Ora, se o PDF for visualizado no browser, ele recebeu o tal arquivo, não?

Se ele imprimiu ou não é mais complicado. (Salve as árvores, não imprima documentos em papel, conserve-os em formato PDF :stuck_out_tongue: ).

Só completando, em nossos sistemas o PDF é visualizado diretamente no browser em um frame; não é enviado como um arquivo “Salvar como”. Então para o usuário basta clicar no botão “Imprimir” do Adobe Reader que é visualizado no browser. [/quote]

comcodo plenamente coom vc… (Salve as árvores, não imprima documentos em papel, conserve-os em formato PDF :stuck_out_tongue: ).

mas o problema, eh q o sistema n gerencia apenas arquivos pdf, pode haver doc, xls, cdr, tiff, jpg , …

se todas as extensões pode-sem ser abertas dentro do browser fikaria mais facil… mas sao N tipos d arquivos…

abraço…

faça um tratamento para que cada tipo de arquivo gere o cabeçalho correto de contenttype e aí o browser saberá a melhor maneira de abrir/dar download

hum… interessante…

mas poderia m passar alguma referencia para gerar um cabeçalho content-type???

abraco e t++++