HTML + CSS Нумерация страниц

Выполняя очередную рабочую ситуацию, сталкиваешься с проблемой, когда разрабатываешь или дорабатываешь CRM. На этот раз задача стояла в проставлении номера страницы.

Вариант нашелся сразу на стаке, но его отказывался понимать хром и все браузеры работающие на его движке. Даже ради такого обновил Яндекс браузер и Google Chrome, они просто проставляли на всех страницах единицы. Т.е. счет не велся. Но этот же пример работал в мозилле и в ишаке.

Пример, взятый из сети:

CSS:

#content {
    display: table;
}

#pageFooter {
    display: table-footer-group;
}

#pageFooter:after {
    counter-increment: page;
    content: counter(page);
}

HTML:

<div id="content">
  <div id="pageFooter">Page </div>
  multi-page content here...
</div>

Также не работала такая конструкция:

@page {
    counter-increment: page;
    counter-reset: page 1;
    @top-right {
        content: "Page " counter(page) " of " counter(pages);
    }
}

Т.е. варианты выше подразумевают автоматическую подстановку при увелечении числа страниц на печать.

Если хром это не понимает и нужно вывести номера страниц, приходится вручную проставлять эти номера. А точнее вставлять div'ы для номеров, это дело можно сделать автоматически, но в моем случае этого не требовалось документы от силы страниц 10 были.

В итоге я создал стиль для одной страницы и в последующем его применял просто к новой, удобство заключается в том что на экране видишь, то и будет распечатано (отступы, межстрочный, номера страниц).

Раньше когда пользовался лисой на этом как-то не заморачивался. Но так как печать будет не с лисы и скорее всего без всякого обновления за последний год, то остановился на этом варианте. В целом он выглядит так:

Добавил форматы страниц А3, А5

@page {
    margin:0.5cm;
}
body {
    height: 100%;
    margin: 0px;
    background: rgb(204,204,204); 
    counter-reset: pagenumber;
}
.page {
    margin: 0 auto;
    padding: 0px;
    background: white;
    display: block;
    position: relative;
    overflow: hidden;
    margin-bottom: 0.5cm;
    box-shadow: 0 0 0.5cm rgba(0,0,0,0.5);
    page-break-after: always;
}
.page .content {
    margin-top: 2cm;
    margin-left: 2cm;
    margin-right: 2cm;
    position: relative;
    height: 100%;
    text-indent: 1.25cm;
    font-size: 14px;
    line-height: 1.5;
    font-family:times new roman,times,serif;
    text-align: justify;
    overflow: hidden;
   
}
.page .content p {
    margin: 0em;
}
.page .page-footer {
    position: absolute;
    bottom: 0.5cm;
    left: 50%;
    right: 50%;
    
}
.page .page-footer:after {
    counter-increment: pagenumber;
    content: counter(pagenumber);
}
@media print {
  body, .page {
    margin: 0;
    box-shadow: 0;
  }
  
}
.page[size="A4"] {  
  width: 21cm;
  height: 29.7cm; 
}
.page[size="A4"][layout="portrait"] {
  width: 29.7cm;
  height: 21cm;  
}
.page[size="A3"] {
  width: 29.7cm;
  height: 42cm;
}
.page[size="A3"][layout="portrait"] {
  width: 42cm;
  height: 29.7cm;  
}
.page[size="A5"] {
  width: 14.8cm;
  height: 21cm;
}
.page[size="A5"][layout="portrait"] {
  width: 21cm;
  height: 14.8cm;  
}

Как пользоваться: допустим нужны 2 страницы А4 в книжной ориентации:

<div class="page" size="A4">
    <div class="content">
        <p>Содержимое 1 страницы</p>
    </div>
    <div class="page-footer"></div>
</div>
<div class="page" size="A4">
    <div class="content">
        <p>Содержимое 2 страницы</p>
    </div>
    <div class="page-footer"></div>
</div>

На этом все. А нет, так как делал для CRM: Клиентская база, то пожалуй расскажу как это туда засунуть для тех кто испытывает трудности:

Первое, заходим в нужную таблицу далее жмем Шаблоны печати - Добавить шаблон. Вписываете имя шаблона, формат шаблона - html, в заголовок шаблона вставляете следующий код:

<!DOCTYPE html>
<html>
<head>
<title>Страница на печать</title>
<meta charset="utf8">
<style type="text/css">
@page {
    margin:0.5cm;
}
body {
    height: 100%;
    margin: 0px;
    background: rgb(204,204,204); 
    counter-reset: pagenumber;
}
.page {
    margin: 0 auto;
    padding: 0px;
    background: white;
    display: block;
    position: relative;
    overflow: hidden;
    margin-bottom: 0.5cm;
    box-shadow: 0 0 0.5cm rgba(0,0,0,0.5);
    page-break-after: always;
}
.page .content {
    margin-top: 2cm;
    margin-left: 2cm;
    margin-right: 2cm;
    position: relative;
    height: 100%;
    text-indent: 1.25cm;
    font-size: 14px;
    line-height: 1.5;
    font-family:times new roman,times,serif;
    text-align: justify;
    overflow: hidden;
}
.page .content p {
    margin: 0em;
}
.page .page-footer {
    position: absolute;
    bottom: 0.5cm;
    left: 50%;
    right: 50%;
}
.page .page-footer:after {
    counter-increment: pagenumber;
    content: counter(pagenumber);
}
@media print {
  body, .page {
    margin: 0;
    box-shadow: 0;
  }
  
}
.page[size="A4"] {  
  width: 21cm;
  height: 29.7cm; 
}
.page[size="A4"][layout="portrait"] {
  width: 29.7cm;
  height: 21cm;  
}
.page[size="A3"] {
  width: 29.7cm;
  height: 42cm;
}
.page[size="A3"][layout="portrait"] {
  width: 42cm;
  height: 29.7cm;  
}
.page[size="A5"] {
  width: 14.8cm;
  height: 21cm;
}
.page[size="A5"][layout="portrait"] {
  width: 21cm;
  height: 14.8cm;  
}
.content table{
text-indent: 0cm;
}
</style>
</head>
<body>

В тело шаблона вписываете ваш текст, например мой:

<div class="page" size="A4">
    <div class="content">
        <p>Содержимое 1 страницы</p>
    </div>
    <div class="page-footer"></div>
</div>
<div class="page" size="A4">
    <div class="content">
        <p>Содержимое 2 страницы</p>
    </div>
    <div class="page-footer"></div>
</div>

В Подвал шаблона вставляем логическое завершение всей конструкции :)

<script src="/assets/components/tickets/js/web/editor/jquery.markitup.js"></script>
<script src="/assets/components/tickets/js/web/default.js"></script>
</body>
</html>

Кстати, не забываем про Права доступа, ибо если вы разграничили и сделали группы, без наследования, то Вам в ручную нужно их вновь проставлять. Ибо забудете, что в 90% случаях.

Комментарии (0)

Написать комментарий