🖨📄 Quais são as melhores práticas para estilizar uma página web para impressão/salvar como PDF?
Nunca tive a oportunidade de me aprofundar mais nesse quesito de estilização.
Atualmente me surgiu essa demanda em que o cliente quer salvar como PDF uma página web e estou bastante perdido em como fazer.
As cores dessa página são essenciais que sejam exibidas como estão na web.
Nela existem alguns gráficos de barra e do tipo radar também. Eles devem ser mantidos.
Creio que alguns elementos como Header, Footer, etc, possam ser ocultados.
Estou usando Sass e Nuxt como framework.
Um tempo atrás fiz um apanhado de várias coisas úteis para preparar páginas para impressão: Preparando páginas para impressão com CSS, Paged.js ou outras ferramentas. Recomendo ler a publicação. Talvez o básico com CSS já te sirva. Além de usar size
, margin
, @page
e @media print
, tem essas dicas mais específicas:
h1,h2,h3,h4,h5,h6 {break-after: avoid-page;}
: Evita imprimir cabeçalhos de seção na parte inferior de uma página, deixando o conteúdo da seção sem cabeçalho na parte superior da página seguinte.img, svg, table, canvas {break-inside: avoid;}
: Dá preferência à imprimir gráficos e figuras em páginas inteiras em vez de dividi-las em páginas.a::after {content: " (" attr(href) ")";}
: Imprime a URL de cada link em vez de ter links apenas como texto sublinhado.footer {page-break-inside: avoid;}
: Não quebrar o footer em páginas separadas.summary {page-break-after: avoid;}
: Não quebrar após o elementosummary
(para o elementodetails
). Se os elementos dedetails
nunca forem maiores que a página,details {break-inside: prevent;}
pode ser útil.body {min-width: 992px;}
: Evita renderizar a versão mobile de uma página.
a melhor prática é utilizar @media print em CSS. Esta media query permite definir estilos específicos que serão aplicados apenas quando a página for impressa ou salva como PDF.
Boas práticas essenciais:
@media print: Encapsule todos os estilos específicos para impressão dentro de um bloco @media print { ... }. Isso separa os estilos de impressão dos estilos de tela, garantindo que as alterações não afetem a visualização web normal. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries/Printing
Paged Media: Utilize propriedades CSS como page-break-before, page-break-after, e page-break-inside para controlar quebras de página e otimizar o layout para o formato de página impressa. Consulte a documentação MDN sobre Paged Media para detalhes: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_paged_media
@zehguilherme preciso fazer um video sobre uma ferramenta que fiz, era pra atender varios clientes em situações distintas, as vezes o mesmo clinte imprimia em formatos diferentes, criei algo bem simples, daria pra portar pra uma extensão. Teria que saber qual é sua situação quais sites entra etc. No meu caso é uso internto, basta eu selecionar o texto e alterar a fonte por exemplo, ele pega a tag do texto selecionado, a largura tbm dava pra mexer etc. Agora se vc estiver em varios sites diferentes pode contruir uma extensão que so deixe o que vc quer!