Специальный CSS-файл:
<link media="print" rel="stylesheet" href="/css/print.css">Правило @media print:
@media print {
...
}Лист в формате А4 имеет размер 210x297 мм, его можно указать:
@media print {
html, body {
height: 297mm;
width: 210mm;
}
}В пикселях размеры лучше не указывать т.к. их количество зависит от заданного параметра DPI:
В целях экономии бумаги лучше использовать минимальные поля – 10 мм по краям и 20 мм слева для возможности брушеровки.
@page {
margin: 10mm 10mm 10mm 20mm;
}Поля по ГОСТ Р 6.30-2003 (оформление документов):
@page {
margin: 20mm 10mm 20mm 20mm;
}По ГОСТ 7.32-2017 (научные работы, рефераты):
@page {
margin: 20mm 15mm 20mm 30mm;
}Тени и другие эффекты дизайна лучше убрать, также следует установить черный цвет шрифта.
@media print {
*, *:before, *:after {
color: #000;
box-shadow: none;
text-shadow: none;
}
}Если на сайте размер шрифтов указан в пикселях, то при печати размер будет больше чем на экране. Поэтому нужно выставить новые значения:
@media print {
html, body {
font-size: 14px;
}
h1 {
font-size: 24px;
}
h2 {
font-size: 20px;
}
h3 {
font-size: 18px;
}
}По умолчанию браузеры не печатают background у элементов, но его можно пустить на печать принудительно c помощью свойства -webkit-print-color-adjust: exact; и нового color-adjust: exact;.
@media print{
* {
-webkit-print-color-adjust: exact !important;
color-adjust: exact !important;
}
}В CSS доступно управление переносами, соответственно для списков и таблиц нужно запретить переносы:
@media print{
ul, ol, table {
page-break-inside: avoid;
}
}Если требуется принудительно сделать перенос после элемента:
@media print{
article {
page-break-inside: always;
}
}В JS, печать запускается методом window.print(). Возможны следующие варианты:
Запуск печати по клику на ссылку:
window.print();
return false;Следующий вариант – пользователь переходит на следующую страницу, где сразу начинается печать, после пользователь возвращается на исходную.
window.onafterprint = window.history.back();
window.print();И последний вариант – печать происходит в отдельной вкладке браузера, после печати она автоматически закрывается.
window.onafterprint = window.close;
window.print();