Carregamento dinâmico (usando tag Object ou Iframe) e impressão

1 resposta
legionarioba

Bom dia,

Tenho o seguinte problema: tenho uma aplicação web, em que eu preciso imprimir um pdf que eu gero via jasperreports. O problema é o seguinte, normalmente nas telas do sistema, ao clicar no botão de gerar relatório, eu abro um popup, em que a url é a servlet que implementa a minha abstração do JAsper, onde eu devolvo um array de bytes pra tela e um pdf é apresentado. A questão é que tenho um relatório de emissão de carteiras, em que eu não posso abrir o popup, porque é um relatório com formulário pré-impresso, a única coisa que tenho no meu layout do relatório sã os dados posicionados. A execução correta da tela seria clicar no botão de imprimir, e ele já abrir a janela com as configurações de impressão, mas de forma escondida. Consegui fazer isso usando iframe, só que o print() que executo imprime apenas o conteúdo visível da página :frowning:

frames["meuIframe"].location.href=url;
frames["meuIframe].print();

Pesquisei sobre a tag object, poderia fazer algo assim, no corpo da página eu insiro:

<OBJECT id="PDF" type='application/pdf' height="0" width="0" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" data="">
		     <PARAM NAME="SRC" VALUE="CaminhoFisico/meuPdf.pdf">
</OBJECT>

Onde classid é o objeto que abre o Acrobat dentro do IE. O problema é que eu não consigo setar o valor de src via Javascript fazendo:

document.getElementById(“PDF”).src=minhaUrlDinamica;

O pior é que pelo que vi esse OBJECT seria a única alternativa, pois com a atribuição do parÂmetro src de forma estática, e chamando:

document.getElementById(“PDF”).print();

Eu consigo gerar a caixa de diálogo de impressão do próprio PDF, e ai consigo visualizar e imprimir o conteúdo mesmo que eu defina height e width na tag object como 0. Alguém tem uma luz sobre como definir dinamicamente(ou se é possível) o valor do parÂmetro src nessa tag?

Abraços,

Silvio Luiz

1 Resposta

legionarioba

Consegui!

Foi suado…foi quase inédito…hehe, mas eu consegui, achei tão escasso de exemplos que preferi que chegasse à noite pra detalhar mais a solução. Fui direto na fonte , e verifiquei que para o caso de estar dentro de uma aplicação Web, é necessário defiinir na tag param o valuetype=ref, de modo que eu possa utilizar uma URI como value.

No javascript, é preciso atenção com a url pois só conseguir setar o value do object configurando a url completa. Segue o código…

No js:

function imprime(){
  var url=" <%=request.getRequestURL()%>"+"/minhaServletQualquer";	  
  document.getElementById("PDF").src=url; 
  a = document.getElementById("PDF");
  setTimeout("a.print()",5000);
}

No jsp:

<form>
<OBJECT id="PDF" type='application/pdf' height="0" width="0" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" >
     <PARAM NAME="SRC" VALUE="" valuetype ="ref">
</OBJECT>
....

Após 5 segundos…ele abre a caixa de diálogo do pdf, realmente foi linda essa…hehe

[]'s

Silvio Luiz

Criado 2 de agosto de 2006
Ultima resposta 2 de ago. de 2006
Respostas 1
Participantes 1