Como é que se imprime no Mozilla/Firefox a página (ou o frame) corrente, sem abrir o diálogo de impressão? window.print() sempre abre o tal diálogo, e eu preciso fazer um esquema de imprimir várias páginas, sem intervenção do usuário. (Ok, talvez precise disso na primeira página, mas as outras devem ficar automáticas).
No Internet Explorer tem aquele esquema de ExecWB(6) que é meio porco mas funciona (mais ou menos, dependendo das configurações de segurança do IE), e um outro de usar uma ActiveX paga que também faz isso (incluindo a remoção de margens, títulos e outras coisas padrão do browser).
E no Mozilla?
Espero que não dê. Imagine você entrar em um site e a sua impressora começar a imprimir.
Para imprimir várias páginas com intervenção do usuário só na primeira, use a propriedade page-break-after do CSS. Ela quebra a página no elemento em que for incluída e funciona no IE/Mozilla. No diálogo de impressão já aparece a contagem de páginas a serem impressas e no preview da impressão aparece corretamente o resultado.
é possível que você consiga fazer isso com alguma extensão definindo uma função nova diferente do print()
e ate onde eu saiba as propriedades de impressao do CSS como o page-break-after não funcionam no Gecko ainda
EDITADO: erro meu… eu tava desatualizado sobre o Gecko… o FX 1.0 já tem pelo menos a page-break-after e a page-break-before (mas eh só tbm… as outras propriedades de impressao ainda nao… soh o opera tem tudo funcionando)
Agora é que vocês estão chegando ao ponto a que eu queria chegar.
Existiria alguma função ou componente XPCOM do Mozilla que eu pudesse acessar (digamos via Javascript assinado) e que me desse algum controle sobre a impressão?
Como é um Javascript assinado (ou um XPCOM, ou alguma outra coisa) , o usuário teria algum controle sobre o que está ocorrendo.
bom, nao sou expert em firefox, mas acho q dá pra dar umas dicas…
abra o diretorio de instalacao do firefox e vá na pasta chrome. descompacte o arquivo toolkit.jar com o unzip mesmo.
agora entre na pasta content/global/
há alguna arquivos interessantes para se analisar.
o printdialog.xul eh o desenho da tela de opcoes de impressao do firefox. la vc ve q ele linka pro arquivo printdialog.js.
analisando o js desse arquivo, temos algumas funcoes interessantes.
as funcoes onLoad() loadDialog() possui algo sobre o q imagino ser a criacao dos objetos responsaveis pela impressao…
ha outros arquivos de impressao nessa pasta como printUtils.js q eh chamado diretamente pelo browser.xul qdo vc clica em File -> Print
bom, o q imagino eh q, se vc entender direito esses arquivos e como funciona isso, eh soh criar uma extensao que adicione um botao sem chamar a printdialog.xul
de noticias se conseguir algo concreto!
dei uma brincada com as coisas acima… mas nao tenho boas noticias… acho q nao eh possivel via xpcom nao… (pelo menos nao com os componentes existentes; vc teria q escrever um)
analisando os arquivos que falei antes, cheguei na funcao PrintUtils.print() do arquivo printUtils.js.
lá ele basicamente pega uma “nsIWebBrowserPrint”, seta as preferencias salvas e chama o metodo “print” em cima dessa interface.
o negocio eh q esse metodo print de nsIWebBrowserPrint eh implementado direto no codigo fonte. e ele eh o responsavel por abrir a janela e imprimir. ou seja, nao eh o xul+js q abre a janela e depois magicamente imprime.
veja a doc do metodo print de nsIWebBrowserPrint aqui:
http://unstable.elemental.com/mozilla/build/latest/mozilla//embedding/dox/interfacensIWebBrowserPrint.html#a0
enfim, to achando q nao rola fazer o q vc quer.
soh implementando um xpcom em c++ e colocando no browser; mas nao sei se rola fazer isso via extensao (provavelmente nao)
TEM JEITO SIM MAN!!! É MUITO FÁCIL NO FIREFOX!
PARA FAZER O FIREFOX PARAR DE EMITIR A JANELA DE IMPRESSÃO E IMPRIMIR DIRETAMENTE BASTA FAZER O SEGUINTE:
-
na barra de endereços digite about:config e pressione enter
-
Dê um clique direito sobre a tela branca e clique em New > Boolean
-
Crie uma nova string chamada print.always_print_silent e a defina como True .
Pronto!!.. Só isso!! resolvido.
1 curtida