Eu já vi essa pergunta de várias maneiras no SO e em vários outros sites, mas a maioria deles é muito específica ou desatualizada. Espero que alguém possa fornecer uma resposta definitiva aqui, sem pensar em especulações.
Existe uma maneira, com CSS ou javascript, de alterar as configurações padrão da impressora quando alguém imprime no navegador? E, é claro, com "impressões do navegador", quero dizer alguma forma de HTML, não PDF ou algum outro tipo de mímica compatível com plug-in.
Observe:
Se alguns navegadores oferecem isso e outros não (ou se você sabe apenas fazê-lo para alguns navegadores), agradeço as soluções específicas do navegador.
Da mesma forma, se você souber de um navegador convencional que tenha restrições específicas contra NUNCA, isso também será útil, mas alguma documentação bastante atualizada será apreciada. (simplesmente dizer "isso contraria a política de segurança da XYZ" não é muito convincente quando a XYZ fez alterações significativas nessa política nos últimos três anos).
Por fim, quando digo "alterar as configurações de impressão padrão", não digo para sempre, apenas para minha página, e estou me referindo especificamente a margens, cabeçalhos e rodapés de impressão.
Estou ciente de que o CSS oferece a opção de alterar a orientação da página e as margens da página. Uma das muitas lutas é com o Firefox. Se eu definir as margens da página para 1 polegada, ele adiciona isso à meia polegada já colocada.
Eu quero muito reduzir o uso de PDFs no site do meu cliente, mas a violação da apresentação (bem como a falta de confiabilidade) são sua principal preocupação.
Respostas:
O padrão CSS permite alguma formatação avançada. Existe uma
@page
diretiva no CSS que habilita alguma formatação que se aplica apenas à mídia paginada (como papel). Consulte http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html .A desvantagem é que o comportamento em diferentes navegadores não é consistente. O Safari ainda não suporta a configuração da margem da página da impressora, mas agora todos os outros principais navegadores são compatíveis.
Com a
@page
diretiva, você pode especificar a margem da impressora da página (que não é a mesma da margem CSS normal de um elemento HTML):Isso não funciona no Firefox 3.6 , IE 7 , Safari 5.1.7 ou Google Chrome 4.1 .
A definição da margem @page tem efeito no IE 8 , Opera 10 , Google Chrome 21 e Firefox 19 .
Embora as margens da página estejam definidas corretamente para o seu conteúdo nesses navegadores, o comportamento não é ideal na tentativa de resolver a ocultação do cabeçalho / rodapé.
É assim que se comporta em diferentes navegadores:
No Internet Explorer , a margem é realmente definida como 0 mm nas configurações desta impressão e, se você executar a Visualização, receberá 0 mm como padrão, mas o usuário poderá alterá-la na visualização.
Você verá que o conteúdo da página está realmente posicionado corretamente, mas o cabeçalho e o rodapé de impressão do navegador são mostrados com fundo não transparente e, assim, ocultam o conteúdo da página nessa posição.
Nas versões mais recentes do Firefox , ele está posicionado corretamente, mas o texto do cabeçalho / rodapé e o conteúdo são exibidos, portanto, parece uma mistura ruim do texto do cabeçalho do navegador e do conteúdo da página.
No Opera , o conteúdo da página oculta o cabeçalho ao usar um plano de fundo não transparente no CSS padrão e a posição do cabeçalho / rodapé entra em conflito com o conteúdo. Muito bom, mas parece estranho se a margem estiver definida como um valor pequeno que faz com que o cabeçalho fique parcialmente visível. Além disso, a margem da página não está definida corretamente.
Nas versões mais recentes do Chrome , o cabeçalho e o rodapé do navegador ficam ocultos se a margem @page for definida tão pequena que a posição do cabeçalho / rodapé entre em conflito com o conteúdo. Na minha opinião, é exatamente assim que isso deve se comportar.
Portanto, a conclusão é que o Chrome tem a melhor implementação disso em relação à ocultação do cabeçalho / rodapé.
fonte
@page
as margens ebody
margens são fundamentalmente coisas diferentes: abody
margem se aplica apenas ao corpo inteiro , ou seja, a parte superior da primeira página e na parte inferior da última página. Para todas as páginas intermediárias, a parte superior / inferior ainda terá uma margem zero.Qualquer versão recente do Chrome e Opera, bem como o Firefox 48 alpha 1 e superior
Você pode definir a margem da página para um tamanho pequeno demais para conter o texto, a fim de desativar isso (tomando emprestado a resposta de admiração ):
Para versões do Firefox até 48 alfa 1
Você pode adicionar um
mozNoMarginBoxes
atributo à<html>
tag para impedir que o URL, os números de página e outras coisas que o Firefox adiciona à margem da página sejam impressos.Está funcionando no Firefox 29 em diante. Você pode ver uma captura de tela da diferença aqui ou ver um exemplo ao vivo.
Observe que o
mozDisallowSelectionPrint
atributo no exemplo não é necessário para remover o texto das margens; consulte O que o atributo mozdisallowselectionprint no PDF.js faz? .Outros navegadores
Infelizmente, parece não haver maneira de resolver esse problema no Internet Explorer; portanto, você precisará recorrer ao PDF ou solicitar aos usuários que desabilitem os textos de margem.
O mesmo vale para o Safari; de acordo com um comentário de @Luiz Perez , as versões mais recentes do Safari (8, 9.1 e 10) ainda não suportam
@page
a supressão de textos de margem.Não consigo encontrar nada no Edge e não tenho uma instalação do Windows 10 disponível para teste.
fonte
<!DOCTYPE html> <html moznomarginboxes mozdisallowselectionprint>
está definido. Fonte:https://bug743252.bugzilla.mozilla.org/attachment.cgi?id=714383
@page{ size: auto; margin: 3mm; }
suporte ao chrome e safari fez uma solução entre navegadores para mim.Como a @Awe havia dito acima, esta é a solução, que está confirmada para funcionar no Chrome !!
Apenas verifique se está DENTRO das tags principais:
fonte
padding: 0.25in 0.5in;
aos estilos do corpo para ter as margens exatas necessárias para uma impressão agradável e limpa. Trabalhando no Chrome v25, e, felizmente, para este projeto em particular, podemos pedir aos usuários finais que escolham entre alguns navegadores modernos.Eu tenho uma solicitação semelhante de um cliente que deseja remover o cabeçalho, os números de página e o rodapé html. Nesse caso, o cliente está apresentando uma página HTML que pode funcionar como um certificado formal. O URL, a página e o cabeçalho adicionados são irrelevantes e levam a um produto final menos que agradável. De certa forma, parece barato.
Mídia = A impressão não conseguiu desativar esses padrões do navegador. A única solução alternativa é dizer ao usuário para clicar no botão "Engrenagem" e ativar / desativar esses itens. Sério, eu não tinha ideia de que poderia fazer isso por 20 anos (e achamos que o usuário típico terá uma pista para clicar no botão de alternância?).
Se o CSS suportar Media = Print, deverá suportar a capacidade de controlar toda a experiência de impressão do usuário final. Entendo que os navegadores fornecem os campos adicionados, mas por que não permitir que o CSS controle a experiência geral de impressão - se é isso que é desejado? Uma solução de 90% pode ser 100% com mais três campos! Um simples:
seria suficiente.
Novamente, não importa se o usuário final deseja ou não imprimi-lo (talvez seu cliente seja muito particular e não queira URLs impressas flutuando. Ou talvez uma equipe executiva use sites de colaboração privados?). Fico feliz em defender o usuário final, mas se alguém estiver procurando uma resposta, não responda dizendo que é direito do usuário final mostrar ou ocultar. Às vezes, é o direito do cliente pagar as contas.
fonte
@Page
diretiva para definir a margem da impressora (que não é a mesma que a margem do corpo da página html). Atualmente, isso é suportado por todos os principais navegadores, exceto o Safari, mas a forma como isso afeta o cabeçalho / rodapé varia. As melhores implementações estão no Opera e no Chrome.Experimente este código, funciona 100% para mim:
FOR Landscape:
PARA Portait:
fonte
Como você mencionou "no navegador" e no firefox, se estiver usando o Internet Explorer, é possível desativar o cabeçalho / rodapé da página definindo temporariamente o valor no registro, veja aqui um exemplo. AFAIK Não ouvi falar de uma maneira de fazer isso em outros navegadores. As respostas de Daniel e Mickel parecem colidir umas com as outras, acho que poderia haver uma configuração semelhante em algum lugar no registro do firefox para remover cabeçalhos / rodapés ou personalizá-los. você conferiu?
Espero que isso ajude e boas festas, Atenciosamente, Tom.
fonte
@page margin: 0mm agora funciona no Firefox 19.0a2 (07/12/2012).
fonte
Resolvi meu problema usando css na página da web.
fonte
Isso funcionou para mim com cerca de 1 cm de margem
fonte