Oi Rafael,
vou te falar da minha experiência com isso aqui. Não sei se aplica pro que você precisa. Veja se encaixa e se faz sentido pra você e me fala :)
Os certificados que imprimimos pras pessoas que finalizam os cursos aqui da Caelum são impressos a partir de uma página do nosso sistema interno. E nossas apostilas são praticamente impressões de páginas de um site, também.
Nos dois casos, os sistemas são bem diferentes, um em Java com VRaptor o outro em bash e Node.js.
A única coisa igual entre eles é que na parte da impressão podemos ser independentes da tecnologia porque os navegadores conseguem imprimir o que estiver na tela no momento que a pessoa apertar o botão pra imprimir.
Ou seja, basta o seus sistema ter trazido e montado o HTML quando a página foi carregada e a partir daí, se quiser customizar o visual do que vai ser impresso, basta estilizar com CSS.
No CSS para impressão, existem 2 coisas que eu acho bastante importante lembrar:
- medidas em px vão se transformar em medidas reais
- a página impressa tem um limite de altura que não existe na página no navegador
O que isso muda?
- você pode usar unidades de medida para mídia impressa para ser mais preciso: cm ou pt
- você pode/deve estilizar as margens e espaçamentos que devem ficar entre o que vai ser impresso e a margem da página/folha
Se tiver uma página que vai ser tanto usada no browser, quanto impressa, você pode querer ter alguns estilos específicos para impressoras. Pra isso você pode ter um bloco de CSS específico ora isso no seu arquivo .css:
/* aqui o css geral para o navegador e para impressão */
/* aqui mais css para o navegador e para impressão */
@media print {
/*aqui o css específico para impressão */
}
Se quiser configurar o espaçamento da página/folha de papel:
@page {
margin: 2cm
}