- Printing
- Using a print style sheet
- Using media queries to improve layout
- Detecting print requests
- Examples
- Open and automatically close a popup window when finished
- Print an external page without opening it
- See also
- Found a content problem with this page?
- Печать HTML страниц
- Подключение CSS
- Специальный CSS-файл:
- Правило @media print:
- Размер страницы
- Поля
- Удаление лишних стилей
- Размер шрифта
- Скрытие лишних элементов
- Показ элемента только при печати
- Печать фона background
- Разрывы страниц
- Отображение URL в ссылках
- Пример вставки URL:
- Вывод QR-кода при печати
- Запуск печати
- Print Page in HTML
- Hide the Contents With display:none Inside @media print to Print a Specific Content in HTML
- Pass the id to the onClick Event Listener to Print a Specific Content in HTML
Printing
There may be times in which your website or application would like to improve the user’s experience when printing content. There are a number of possible scenarios:
- You wish to adjust layout to take advantage of the size and shape of the paper.
- You wish to use different styles to enhance the appearance of your content on paper.
- You wish to use higher resolution images for a better result.
- You want to adjust the user experience of printing, such as presenting a specially-formatted version of your content before printing begins.
There may be other cases in which you want to manage the printing process, but these are some of the most common scenarios. This article provides tips and techniques for helping your web content print better.
Using a print style sheet
Add the following to your tag.
link href="/path/to/print.css" media="print" rel="stylesheet" />
Using media queries to improve layout
You can use the CSS @media at-rule to set a different appearance for your webpage when it is printed on paper and when it is displayed on the screen. The print option sets the styles that will be used when the content is printed.
Add this at the end of your stylesheet. Note that specificity and precedence rules still apply:
@media print /* All your print styles go here */ #header, #footer, #nav display: none !important; > >
Detecting print requests
Browsers send beforeprint and afterprint events to let content determine when printing may have occurred. You can use this to adjust the user interface presented during printing (such as by displaying or hiding user interface elements during the print process).
Examples
Here are some common examples.
Open and automatically close a popup window when finished
If you want to be able to automatically close a popup window (for example, the printer-friendly version of a document) after the user prints its contents, you can use code like this:
doctype html> html lang="en-US"> head> meta charset="utf-8" /> meta name="viewport" content="width=device-width" /> title>JavaScript Window Close Exampletitle> script> function popuponclick() const my_window = window.open( "", "mywindow", "status=1,width=350,height=150", ); my_window.document.write(""); my_window.document.write(''); my_window.document.write( "When you print this window, it will close afterward.
", ); my_window.document.write(""); > script> head> body> p> To try out the code>afterprintcode> event, click the link below to open the window to print. You can also try changing the code to use code>beforeprintcode> to see the difference. p> p>a href="javascript: popuponclick()">Open Popup Windowa>p> body> html>
Print an external page without opening it
If you want to be able to print an external page without opening it, you can utilize a hidden (see: HTMLIFrameElement), automatically removing it after the user prints its contents. The following is a possible example which will print a file named externalPage.html :
doctype html> html lang="en-US"> head> meta charset="utf-8" /> meta name="viewport" content="width=device-width" /> title>MDN Exampletitle> script> function closePrint() document.body.removeChild(this.__container__); > function setPrint() this.contentWindow.__container__ = this; this.contentWindow.onbeforeunload = closePrint; this.contentWindow.onafterprint = closePrint; this.contentWindow.focus(); // Required for IE this.contentWindow.print(); > function printPage(sURL) const hideFrame = document.createElement("iframe"); hideFrame.onload = setPrint; hideFrame.style.position = "fixed"; hideFrame.style.right = "0"; hideFrame.style.bottom = "0"; hideFrame.style.width = "0"; hideFrame.style.height = "0"; hideFrame.style.border = "0"; hideFrame.src = sURL; document.body.appendChild(hideFrame); > script> head> body> p> span onclick="printPage('externalPage.html');" style="cursor:pointer;text-decoration:underline;color:#0000ff;"> Print external page! span> p> body> html>
See also
Found a content problem with this page?
This page was last modified on Jul 7, 2023 by MDN contributors.
Печать HTML страниц
Очень часто разработчики забывают про печатную версию сайта, поэтому можно встретить такой результат на бумаге:
Подключение CSS
Специальный CSS-файл:
Правило @media print:
Третий метод – отдельная страница или шаблон, свёрстанные чисто под печать (без @media print ), например так сделана печать писем в Яндекс.Почте. Такой метод существенно облегчает отладку.
Размер страницы
- при dpi=75, А4 имеет 877×620 px
- при dpi=150, А4 имеет 1754×1240 px
- при dpi=300, А4 имеет 3508×2480 px
Поля
В целях экономии бумаги лучше использовать минимальные поля – 10 мм по краям и 20 мм слева для возможности брушеровки.
Поля по ГОСТ Р 6.30-2003 (оформление документов):
По ГОСТ 7.32-2017 (научные работы, рефераты):
Удаление лишних стилей
Тени и другие эффекты дизайна лучше убрать, также следует установить черный цвет шрифта.
Размер шрифта
Если на сайте размер шрифтов указан в пикселях, то при печати размер будет больше чем на экране. Поэтому нужно выставить новые значения:
Скрытие лишних элементов
Т.к. на бумаге элементы навигации, баннеры, шапка, подвал, и другие элементы не несут какой либо пользы, то лучше их скрыть или оставить в них только самое важное.
Другой вариант скрытия не нужного контента – в HTML-коде, добавить к скрываемым элементам класс noprint .
Не стоить забывать о , обычно для сайтов с фиксированным размером ему задана ширина, отступы и центрирование, поэтому при печати возможна обрезка контента с правого края, такие стили стоит обнулить.
Показ элемента только при печати
@media screen < .element < display: none; >> @media print < .element < display: block; >>
Печать фона background
По умолчанию браузеры не печатают background у элементов, но его можно пустить на печать принудительно c помощью свойства -webkit-print-color-adjust: exact; и нового color-adjust: exact; .
Уточнение: свойство не будет работать если цвет фона и шрифта слабоконтрастные.
Разрывы страниц
В CSS доступно управление переносами, соответственно для списков и таблиц нужно запретить переносы:
Если требуется принудительно сделать перенос после элемента:
Отображение URL в ссылках
Печать ссылок бесполезна т.к. будет не известно, куда они ведут. Можно добавить приписку URL рядом с анкором (исключая якорные ссылки).
Пример вставки URL:
Вывод QR-кода при печати
Будет очень удобно если на печатаной странице будет QR-код с ссылкой на сайт. Сгенерировать код можно с помощью сервиса «Google QR Codes» и вставить его с помощью JQuery.
Запуск печати
В JS, печать запускается методом window.print() . Возможны следующие варианты: Запуск печати по клику на ссылку:
Следующий вариант – пользователь переходит на следующую страницу, где сразу начинается печать, после пользователь возвращается на исходную.
И последний вариант – печать происходит в отдельной вкладке браузера, после печати она автоматически закрывается.
Print Page in HTML
- Hide the Contents With display:none Inside @media print to Print a Specific Content in HTML
- Pass the id to the onClick Event Listener to Print a Specific Content in HTML
This article will introduce a few methods to print the specific content from a page in HTML.
Hide the Contents With display:none Inside @media print to Print a Specific Content in HTML
We can use CSS to change the appearance of the web page when it’s printed on paper. We can set one CSS style on the web and another CSS style while printing the web contents.
The CSS @media print rule allows you to change the style of HTML contents while printing them.
We need JavaScript to print the HTML contents. The window.print() method allows you to print the current window.
The print() method opens the Print Dialog Box, which lets you select preferred printing options. We can call window.print() after clicking a button to print the current window.
Using @media print , we can set the display property to none for the HTML contents, which we do not want to print. This will not show the HTML contents inside the printing option despite having those contents on the web.
For example, in HTML, create two headings using the h1 tag. Name the first heading as Need to print this and the second heading as Don’t need to print this .
Give the class name for the second heading as dontPrint . Then create a button and name it Print .
Also, give this button a class name of dontPrint . Create an onClick listener for the button and call the window.print() method when the button is clicked.
In the CSS section, inside @media print , set the display property of the class named dontPrint to none .
The example below shows that the heading and button having the class name dontPrint is not shown in the print section when the button Print is clicked.
h1> Need to print this h1> h1 class="dontPrint"> Don't need to print this h1> button onclick="window.print();" class="dontPrint"> Print button>
@media print .dontPrint display:none; > >
Pass the id to the onClick Event Listener to Print a Specific Content in HTML
In this method, we can create an id of the specific content to be printed. Then, we can pass the id to a JavaScript function with the help of the onClick event listener.
The JavaScript prints the specified content with the window.print() method.
The innerHTML property sets or returns the HTML content of an element. We can use it to select the content printed in JavaScript along with the document.getElementById() method.
Similarly, we can preserve the original content of the HTML document using the innerHTML property along with the document.body property. After printing the content, we can set the original content of the HTML document in the document.body.innerHTML property.
Let’s see the instructions below to understand it more clearly.
For example, create a div and give it an id of printIt . Inside that div , create an h1 tag and write Need to print this inside it.
Outside the div , create a button and name it Print . Create an onclick listener for the button and call the printOut function with the printIt id as the parameter.
In the JavaScript section, create a function named printOut with an argument divId . Create a variable named printOutContent to store innerHTML of the divId .
Next, create another variable originalContent to store the innerHTMl of the HTML body. The demonstration is shown below.
var printOutContent = document.getElementById(divId).innerHTML; var originalContent = document.body.innerHTML;
Next, set innerHTML of the body to the printOutContent variable.
Then, call the window.print() method. After calling the method, set innerHTML of the body to originalContent variable.
document.body.innerHTML = printOutContent; window.print(); document.body.innerHTML = originalContent;
Here, when we call the window.print() method, it will only print the section of the divId id as document.body.innerHTML contains only the element to be printed. After the content gets printed, the content of the whole HTML document is set to its original state.
Thus, we printed out a specific content of an HTML document using JavaScript.
div id="printIt"> h1> Need to Print this h1> div> button onClick="printOut('printIt')"> Print button>
function printOut(divId) var printOutContent = document.getElementById(divId).innerHTML; var originalContent = document.body.innerHTML; document.body.innerHTML = printOutContent; window.print(); document.body.innerHTML = originalContent; >