Imprimir uma pagina e depois fechar ela

895 views
Skip to first unread message

Diogo Roldão

unread,
Sep 1, 2008, 9:42:21 AM9/1/08
to jQuery (Brasil)
Bom dia amigos, como vao?

Estou tentando emitir uma N.F. pela aplicação e para os que ja fizeram
algo do tipo, sabem que a visualização de uma N.F. é mto feia, ja que
o formato dela está na folha a ser impressa e nao na página.

Sendo assim, eu gostaria que ao abrir a página que contem a N.F. fosse
chamado automaticamente um evendo de impressão e em seguida um evento
de fechar. Tentei o seguinte código mas sem sucesso. Pesquisando na
internet vi que jQuery nao tem mta coisa com relação a impressão nao
é?

$(document).ready(function(){
$("table").addClass("azul11");

window.close();

$("body").unload(function(){
window.print();
});

});


minha ideia ali foi que ao dar o window.close() o evento unload do
body fosse executado, assim chamando a impressão e em seguida a janela
seria fechada automaticamente, mas o evento nao está sendo
executado...


gostaria de sugestões.

obrigado!
Diogo Roldão

Paulo Diovani

unread,
Sep 1, 2008, 10:37:20 AM9/1/08
to jque...@googlegroups.com
Você não especificou qual evento não está sendo executado.

Você não pode utilizar window.close() em uma janela que não tenha sido
aberta por um script.
Você deve utilizar, preferencialmente, $(window).unload() ao invés de $('body').

Segue o código funcional para a impressão e fechamento da página. Note
que este script deve ser executado da página "pai", que vai abrir a
janela a ser impressa:

$(function(){
//evnto que deve carregar a janela a ser impressa
$('#print').click(function() {
//abre a janela para impressão e retém referência a esta em
um objeto.
newWindow = window.open('teste.html');

//imprime e fecha a nova janela quando estiver carregada
$(newWindow).ready(function() {
newWindow.print();
newWindow.close();
});
});
});



2008/9/1 Diogo Roldão <diogo...@gmail.com>:
--
Paulo Diovani
pa...@diovani.com
+55 51 8146 5413
___________________
http://www.diovani.com

Diogo Roldão

unread,
Sep 1, 2008, 11:14:32 AM9/1/08
to jque...@googlegroups.com
Paulo, funcionou perfeitamente bem! muito obrigado pela aula! :D
 
o código ficou assim:
 
 $(document).ready(function(){
  $("#imgNF").css("cursor","pointer");
  $("#imgNF").attr("alt","Confirmar Venda");
  $("#imgNF").click(function(){
   var nw = newWindow("vendas.php?int=view&vid="+this.value+"&sq=1","popView",100,100,"yes","yes",true);
   $(nw).ready(function() {
    nw.print();
    nw.close();
   });  
  });
 });

mas infelizmente pela lógica de minha aplicação, eu nao poderei aplicar o print na exata hora de abertura do pop-up, e sim na segunda tela dele, esqueci de mencionar isso, me desculpe ... :(
Esta primeira tela abre os dados da venda para confirmação, alteração de valores, etc ... e nela, após confirmar, daí sim é exibida a N.F.
 
vc tem alguma ideia de como forçar a impressão a partir da segunda tela?
 
fiquei impressionado em ver como funcionou exatamente como eu queria, o print e o close() ... :D
 
obrigado mesmo Paulo!
 
grande abraço!
Diogo Roldão
 
 
2008/9/1 Paulo Diovani <diov...@gmail.com>

Paulo Diovani

unread,
Sep 1, 2008, 1:01:45 PM9/1/08
to jque...@googlegroups.com
Considerando que esta segunda tela, que realmente imprime a nota, seja
aberta na mesma nova janela (nw), basta vc colocar
<script>
window.print();
window.close();
</script>
no final da página.
Acho interessante você colocar no final (pode ser até depois de
</html>) para garantir que as funções só serão executadas depois de
carregar todo o html.
Como esta janela foi aberta por um script também, em não
explicitamente pelo usuário, acho que o window.close() deve funcionar
sem problemas (não testei).

2008/9/1 Diogo Roldão <diogo...@gmail.com>:

Diogo Roldão

unread,
Sep 1, 2008, 1:30:56 PM9/1/08
to jque...@googlegroups.com
e se colocar $(document).ready(function(){ window.print(); window.close(); }); na segunda pagina? nao teria o mesmo efeito que colocar <script> depois do </html> ? ... :D
 
obrigado!!


 
2008/9/1 Paulo Diovani <diov...@gmail.com>

Paulo Diovani

unread,
Sep 1, 2008, 1:33:50 PM9/1/08
to jque...@googlegroups.com
Porque não testa antes de perguntar?

só acho que se vc só vai precisar dos dois métodos Js Core (print() e
close()) é um desperdício de recursos carregar o jQuery de novo nesta
página.

2008/9/1 Diogo Roldão <diogo...@gmail.com>:

Diogo Roldão

unread,
Sep 1, 2008, 1:36:33 PM9/1/08
to jque...@googlegroups.com
nossa fio, calma ... foi uma pergunta técnica sobre o funcionamento de um recurso, nao se ele vai funcionar efetivamente ou nao,
queria saber o que vc explicou mesmo, "usar um canhão pra matar uma formiga" ... só nao precisava do comentario.
 
obrigado de qqr forma.
 
[ ]'s...

 
2008/9/1 Paulo Diovani <diov...@gmail.com>

Paulo Diovani

unread,
Sep 1, 2008, 1:38:36 PM9/1/08
to jque...@googlegroups.com
hehe.
tudo bem...

2008/9/1 Diogo Roldão <diogo...@gmail.com>:

Diogo Roldão

unread,
Sep 3, 2008, 10:07:18 AM9/3/08
to jQuery (Brasil)
Paulo, coloquei na ultima tela assim e funcionou:

window.print();
setTimeout("window.close()",2000);


se eu colocar o window.close() diretamente na sequencia do print(),
parece que ele é anulado, ou algo do genero, se eu dou esse timeout
ai, assim que eu clico em imprimir a pagina é fechada ... :D

valeu pelos toques,

grande abraço.
Diogo Roldão


On 1 set, 14:38, "Paulo Diovani" <diovan...@gmail.com> wrote:
> hehe.
> tudo bem...
>
> 2008/9/1 Diogo Roldão <diogorol...@gmail.com>:
>
>
>
>
>
> > nossa fio, calma ... foi uma pergunta técnica sobre o funcionamento de um
> > recurso, nao se ele vai funcionar efetivamente ou nao,
> > queria saber o que vc explicou mesmo, "usar um canhão pra matar uma formiga"
> > ... só nao precisava do comentario.
>
> > obrigado de qqr forma.
>
> > [ ]'s...
>
> > 2008/9/1 Paulo Diovani <diovan...@gmail.com>
>
> >> Porque não testa antes de perguntar?
>
> >> só acho que se vc só vai precisar dos dois métodos Js Core (print() e
> >> close()) é um desperdício de recursos carregar o jQuery de novo nesta
> >> página.
>
> >> 2008/9/1 Diogo Roldão <diogorol...@gmail.com>:
> >> > e se colocar $(document).ready(function(){ window.print();
> >> > window.close();
> >> > }); na segunda pagina? nao teria o mesmo efeito que colocar <script>
> >> > depois
> >> > do </html> ? ... :D
>
> >> > obrigado!!
>
> >> > 2008/9/1 Paulo Diovani <diovan...@gmail.com>
>
> >> >> Considerando que esta segunda tela, que realmente imprime a nota, seja
> >> >> aberta na mesma nova janela (nw), basta vc colocar
> >> >> <script>
> >> >>     window.print();
> >> >>     window.close();
> >> >> </script>
> >> >> no final da página.
> >> >> Acho interessante você colocar no final (pode ser até depois de
> >> >> </html>) para garantir que as funções só serão executadas depois de
> >> >> carregar todo o html.
> >> >> Como esta janela foi aberta por um script também, em não
> >> >> explicitamente pelo usuário, acho que o window.close() deve funcionar
> >> >> sem problemas (não testei).
>
> >> >> 2008/9/1 Diogo Roldão <diogorol...@gmail.com>:
> >> >> > 2008/9/1 Paulo Diovani <diovan...@gmail.com>
> >> >> >> 2008/9/1 Diogo Roldão <diogorol...@gmail.com>:
> ___________________http://www.diovani.com- Ocultar texto entre aspas -
>
> - Mostrar texto entre aspas -

Jean

unread,
Sep 3, 2008, 3:25:16 PM9/3/08
to jque...@googlegroups.com
pelo manual a sintaxe eh essa mesma com "" na chamada fa funcao, agora
axo q qndo eh funcao anonima naum precisa. Se alguem souber da uma
esclarecida aqui para a coisa não ficar errada =D

2008/9/3 Diogo Roldão <diogo...@gmail.com>:
--

[]´s Jean
www.suissa.info

Ethereal Agency
www.etherealagency.com
Reply all
Reply to author
Forward
0 new messages