Как сделать страницу HTML на бумаге формата А4? - PullRequest
337 голосов
/ 27 июля 2010

Можно ли заставить страницу HTML вести себя, например, как страница формата A4 в MS Word?

По сути, я хочу иметь возможность отображать страницу HTML в браузере и наметитьсодержание в размерах страницы формата А4.

Ради простоты я предполагаю, что HTML-страница будет содержать только текст (без изображений и т. Д.), И, к примеру, тегов <br> не будет.при распечатке HTML-страницы она будет выглядеть как бумажные страницы формата A4.

Ответы [ 14 ]

273 голосов
/ 15 февраля 2014

Много лет назад, в ноябре 2005 года, AlistApart.com опубликовал статью о том, как они опубликовали книгу, используя только HTML и CSS. Смотри: http://alistapart.com/article/boom

Вот выдержка из этой статьи:

В CSS2 есть понятие постраничных носителей (листы бумаги), в отличие от непрерывных носителей (полосы прокрутки). Таблицы стилей могут устанавливать размер страниц и их поля. Шаблонам страниц могут быть заданы имена, а элементы могут указывать, на какой названной странице они хотят печататься. Кроме того, элементы в исходном документе могут вызывать разрывы страниц. Вот фрагмент из таблицы стилей, которую мы использовали:

@page {
   size: 7in 9.25in;
   margin: 27mm 16mm 27mm 16mm;
}

Имея американского издателя, нам дали размер страницы в дюймах. Мы, будучи европейцами, продолжили метрические измерения. CSS принимает оба.

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

div.chapter, div.appendix {
    page-break-after: always;
}

Кроме того, мы использовали CSS2 для объявления именованных страниц:

div.titlepage {
  page: blank;
}

То есть титульный лист должен быть напечатан на страницах с именем «blank». CSS2 описал концепцию именованных страниц, но их значение становится очевидным только тогда, когда доступны верхние и нижние колонтитулы.

В любом случае ...

Поскольку вы хотите напечатать A4, вам, конечно, понадобятся разные размеры:

@page {
    size: 21cm 29.7cm;
    margin: 30mm 45mm 30mm 45mm;
     /* change the margins as you want them to be. */
}

В статье рассматриваются такие вещи, как настройка разрывов страниц и т. Д., Поэтому вы можете прочитать это полностью.

В вашем случае главное - сначала создать CSS для печати. Большинство современных браузеров (> 2005) поддерживают масштабирование и уже могут отображать веб-сайт на основе печатного CSS.

Теперь вам нужно, чтобы веб-дисплей выглядел несколько иначе, и адаптировать весь дизайн под большинство браузеров (включая старые, до 2005 года). Для этого вам нужно будет создать веб-файл CSS или переопределить некоторые части вашего CSS для печати. Создавая CSS для веб-отображения, помните, что браузер может иметь ЛЮБОЙ размер (подумайте: от «мобильного» до «телевизоров с большим экраном»). Значение: для веб-CSS ваши ширина страницы и ширина изображения лучше всего настраиваются с использованием переменной ширины (%), чтобы поддерживать как можно больше устройств отображения и клиентов для просмотра веб-страниц.

РЕДАКТИРОВАТЬ (26-02-2015)

Сегодня я наткнулся на другую, более свежую статью в SmashingMagazine , которая также посвящена разработке для печати с использованием HTML и CSS ... на тот случай, если вы сможете использовать еще один учебник.

РЕДАКТИРОВАТЬ (30-10-2018)

Мне стало известно, что size не является допустимым CSS3, что действительно правильно - я просто повторил приведенный в статье код, который (как было отмечено) был старым добрым CSS2 (что имеет смысл, когда вы смотрите в тот год статья и этот ответ были впервые опубликованы). В любом случае, вот вам действующий код CSS3 для удобства копирования и вставки:

@media print {
    body{
        width: 21cm;
        height: 29.7cm;
        margin: 30mm 45mm 30mm 45mm; 
        /* change the margins as you want them to be. */
   } 
}

Если вы считаете, что вам действительно нужны пиксели (, вам следует избегать использования пикселей ), вам придется позаботиться о выборе правильного DPI для печати:

  • 72 точек на дюйм (сеть) = 595 X 842 пикселей
  • 300 точек на дюйм (печать) = 2480 X 3508 пикселей
  • 600 точек на дюйм (высококачественная печать) = 4960 X 7016 пикселей

Тем не менее, я бы избежал хлопот и просто использовал cm (сантиметры) или mm (миллиметры) для определения размеров, так как это позволяет избежать рендеринга сбоев, которые могут возникнуть в зависимости от того, какого клиента вы используете.

63 голосов
/ 27 июля 2010

Было бы довольно легко заставить веб-браузер отображать страницу с теми же размерами в пикселях, что и A4.Однако при рендеринге могут быть некоторые причуды.

Если ваши мониторы отображают 72 dpi, вы можете добавить что-то вроде этого:

<!DOCTYPE html>
<html>
  <head>
    <style>
    body {
        height: 842px;
        width: 595px;
        /* to centre page on screen*/
        margin-left: auto;
        margin-right: auto;
    }
    </style>
  </head>
  <body>
  </body>
</html>
32 голосов
/ 01 марта 2014

А4 размер 210x297 мм

Таким образом, вы можете установить HTML-страницу для соответствия этим размерам с помощью CSS:

html,body{
    height:297mm;
    width:210mm;
}
21 голосов
/ 31 января 2013

Создайте раздел с каждой страницей и используйте приведенный ниже код для настройки полей, высоты и ширины.

Если вы печатаете формат А4.

Затем пользователь

Size : 8.27in and 11.69 inches

@page Section1 {
    size: 8.27in 11.69in; 
    margin: .5in .5in .5in .5in; 
    mso-header-margin: .5in; 
    mso-footer-margin: .5in; 
    mso-paper-source: 0;
}

div.Section1 {
    page: Section1;
} 

, затем создайте div со всем вашим контентом.

<div class="Section1"> 
    type your content here... 
</div>

или

@media print {
    .page-break { 
        height: 0; 
        page-break-before: always; 
        margin: 0; 
        border-top: none; 
    }
}

body, p, a,
span, td { 
    font-size: 9pt;
    font-family: Arial, Helvetica, sans-serif;
}

body {
    margin-left: 2em; 
    margin-right: 2em;
}

.page {
    height: 947px;
    padding-top: 5px;
    page-break-after: always;   
    font-family: Arial, Helvetica, sans-serif;
    position: relative;
    border-bottom: 1px solid #000;
}
16 голосов
/ 27 июля 2010

Я использовал HTML для генерации отчетов, которые правильно распечатываются в реальных размерах на реальной бумаге.

Если вы аккуратно используете mm в качестве своих единиц измерения в файле CSS, у вас должно быть все в порядке, по крайней мере, для отдельных страниц. Люди могут вас облажать, изменив масштаб печати в своем браузере.

Кажется, я помню, что все, что я делал, было одной страницей, поэтому мне не нужно было беспокоиться о нумерации страниц - это может быть намного сложнее.

12 голосов
/ 16 июня 2011
<link rel="stylesheet" href="/css/style.css" type="text/css">
<link rel="stylesheet" href="/css/print.css" type="text/css" media="print">

В вашем обычном style.css:

table.tableclassname {
  width: 400px;
}

В вашем print.css:

table.tableclassname {
  width: 16 cm;
}
10 голосов
/ 04 февраля 2012

В поисках похожей проблемы я нашел это - http://www.indigorose.com/forums/archive/index.php/t-13334.html

A4 - это формат документа, так как изображение на экране будет зависеть от разрешения изображения, например, документ A4, размер которого:

  • 72 точек на дюйм (сеть) = 595 X 842 пикселей
  • 300 точек на дюйм (печать) = 2480 X 3508 пикселей (Это «А4», насколько я знаю, то есть «210 мм x 297 мм при 300 dpi»)
  • 600 т / д (печать) = 4960 х 7016 пикселей
10 голосов
/ 04 июня 2011

PPI и DPI не имеют абсолютно никакого значения для печати документа из браузера. принтер не принимает информацию о шаге экрана или разрешении изображения и т. д., если вы печатаете изображения, они будут печататься в размере, пропорциональном тому, как они отображаются на экране. процессор печати браузера увеличил бы DPI изображений с чего-то довольно низкого, например 72dpi, до любого DPI, которым является остальная часть документа. Допустим, изображение отображается шириной в половину страницы, тогда его физическая ширина составляет около 4 дюймов. Ширина изображения будет примерно 300 пикселей для правильного отображения в браузере. К тому времени, когда оно печатается с номинальным разрешением 300 точек на дюйм, процессор добавляет пиксели. и изображение вырастет до 1200 пикселей, что при разрешении 300 точек на дюйм равно 4 ".

когда дело касается векторных или непиксельных элементов, таких как текст, принтер выбирает собственный драйвер из драйвера, который не связан с шагом экрана или шириной браузера и т. Д. Если браузер имеет ширину 3000 пикселей, процессор печати будет переносить текст при необходимости.

Вот что затрудняет создание дисплеев для печати: каждый браузер и принтер будут интерпретировать размеры текста (pt, em, px) и интервалы по-своему. в зависимости от того, какой принтер, браузер и, возможно, даже ОС вы используете, вы получите различное количество строк и символов на странице. так что даже если вы тестируете на своем компьютере, используя браузер и принтер, и обнаруживаете, что можете отображать текст в поле размером 640x900 пикселей и идеально печатать его, следующий парень, который попытается напечатать, возможно, получит печать по-другому. на самом деле нет никакого способа заставить каждый принтер и браузер каждый раз идентифицировать его.

забудьте о пикселях и, более того, забудьте о DPI. Единственное, для чего вы можете использовать пиксели, это установить ширину таблицы, которая имитирует ширину области печати на вашем принтере. в этом случае я обнаружил, что ширина 640 пикселей близка.

8 голосов
/ 26 марта 2017

Я увидел это решение после поиска в Google, поиска "шаблон страницы A4 CSS" (codepen.io). В браузере отображается область размером A4 (A3, A5, также портретная) с использованием тега . Внутри этого тега отображается содержимое, но абсолютная позиция по-прежнему относительно области браузера.

body {
  background: rgb(204,204,204); 
}
page {
  background: white;
  display: block;
  margin: 0 auto;
  margin-bottom: 0.5cm;
  box-shadow: 0 0 0.5cm rgba(0,0,0,0.5);
}
page[size="A4"] {  
  width: 21cm;
  height: 29.7cm; 
}
page[size="A4"][layout="portrait"] {
  width: 29.7cm;
  height: 21cm;  
}
@media print {
  body, page {
    margin: 0;
    box-shadow: 0;
  }
}
<page size="A4">A4</page>
<page size="A4" layout="portrait">A4 portrait</page>

Это работает для меня без какой-либо другой библиотеки css / js, которая будет включена. Работает для текущих браузеров (IE, FF, Chrome).

8 голосов
/ 24 сентября 2013

Я знаю, что эта тема довольно старая, но я хочу поделиться своим опытом по этой теме. На самом деле, я искал модуль, который может помочь мне с моими ежедневными отчетами. Я пишу некоторые документы и некоторые отчеты на HTML + CSS (вместо Word, Latex, OO, ...). Целью было бы напечатать их на бумаге формата А4, чтобы поделиться ими с друзьями ... Вместо поиска я решил провести небольшую забавную сессию кодирования для реализации простой библиотеки, которая может обрабатывать «страницы», номер страницы, сводку, заголовок , нижний колонтитул, .... Наконец, я сделал это через ~~ 2h, и я знаю, что это не самый лучший инструмент, но он почти подходит для моих целей. Вы можете посмотреть на этот проект в моем репо и не стесняйтесь делиться своими идеями. Возможно, это не то, что вы ищете на 100%, но я думаю, что этот модуль может вам помочь.

В основном я создаю страницу тела "ширина: 200 мм;" и контейнер высотой: 290 мм (меньше, чем А4). Затем я использовал разрыв страницы: всегда; поэтому опция «печати» браузера знает, когда нужно разбивать страницы.

репо: https://github.com/kursion/jsprint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...