Можно ли заставить страницу HTML вести себя, например, как страница формата A4 в MS Word?
По сути, я хочу иметь возможность отображать HTML-страницу в браузере и обрисовывать содержание в размерах страницы формата A4.
Для простоты я предполагаю, что HTML-страница будет содержать только текст (без изображений и т. Д.) И, например, не будет никаких <br>
тегов.
Кроме того, при печати страницы HTML она будет отображаться как бумажные страницы формата A4.
Ответы:
Много лет назад, в ноябре 2005 года, AlistApart.com опубликовал статью о том, как они опубликовали книгу, используя только HTML и CSS. Смотрите: http://alistapart.com/article/boom
Вот выдержка из этой статьи:
Тем не мение…
Поскольку вы хотите напечатать A4, вам, конечно, понадобятся разные размеры:
В статье рассматриваются такие вещи, как установка разрывов страниц и т. Д., Поэтому вы можете прочитать это полностью.
В вашем случае, хитрость заключается в том, чтобы сначала создать CSS для печати. Большинство современных браузеров (> 2005) поддерживают масштабирование и уже смогут отображать веб-сайт на основе печатного CSS.
Теперь вы захотите, чтобы веб-дисплей выглядел немного иначе и адаптировал весь дизайн под большинство браузеров (включая старые, до 2005 года). Для этого вам нужно будет создать веб-файл CSS или переопределить некоторые части вашего CSS для печати. Создавая CSS для веб-отображения, помните, что браузер может иметь ЛЮБОЙ размер (подумайте: от «мобильного» до «телевизоров с большим экраном»). Значение: для веб-CSS ваши ширина страницы и ширина изображения лучше всего настраиваются с использованием переменной ширины (%), чтобы поддерживать как можно больше устройств отображения и клиентов для просмотра веб-страниц.
РЕДАКТИРОВАТЬ (26-02-2015)
Сегодня я наткнулся на еще одну, более свежую статью в SmashingMagazine, которая также погружается в разработку для печати с использованием HTML и CSS ... на тот случай, если вы сможете использовать еще один учебник.
РЕДАКТИРОВАТЬ (30-10-2018)
Это было доведено до моего сведения тем, что
size
это недействительный CSS3, что действительно правильно - я просто повторил код, цитируемый в статье, который (как было отмечено) был старым добрым CSS2 (что имеет смысл, когда вы смотрите на год статьи и этот ответ был впервые опубликован). В любом случае, вот вам действительный код CSS3 для удобства копирования и вставки:Если вы считаете, что вам действительно нужны пиксели ( вам следует избегать их использования ), вам нужно будет выбрать правильный DPI для печати:
Тем не менее, я бы избегал хлопот и просто использовал
cm
(сантиметры) илиmm
(миллиметры) для определения размеров, поскольку это позволяет избежать рендеринга сбоев, которые могут возникнуть в зависимости от того, какой клиент вы используете.источник
cm
et al. Я советую вам прочитать связанные статьи и / или хотя бы мой ответ. При этом вы быстро заметите, что ваш вопрос на самом деле не имеет смысла. Кроме того, вы можете опубликовать свой вопрос как новый вопрос, если что-то неясно. Это сайт вопросов и ответов, а не форум. \ o /Было бы довольно легко заставить веб-браузер отображать страницу с теми же размерами в пикселях, что и A4. Тем не менее, могут быть некоторые причуды, когда вещи оказываются.
Предполагая, что ваши мониторы отображают 72 dpi, вы можете добавить что-то вроде этого:
источник
body { height:297mm; width:210mm; margin-left:auto; margin-right:auto; }
Размер А4 210х297мм
Таким образом, вы можете настроить HTML-страницу для соответствия этим размерам с помощью CSS:
источник
Создайте раздел с каждой страницей и используйте приведенный ниже код для настройки полей, высоты и ширины.
Если вы печатаете формат А4.
Тогда пользователь
затем создайте div со всем вашим контентом.
или
источник
@page Section1
работать с Chrome 41.0.2272.77. Вы действительно уверены, что ваш ответ работает? Попробуйте, например, посетитьdata:text/html,<style>@page x{size:100pt 200pt}</style><div style="page:x">x</div>
и открыть предварительный просмотр. Я не вижу разницы между этим иdata:text/html,x
. Когда я заменяю@page x
на@page
, то это работает, но это не специфичный для страницы селектор.Я использовал HTML для генерации отчетов, которые распечатывались правильно в реальных размерах на реальной бумаге.
Если вы аккуратно используете mm в качестве своих единиц измерения в файле CSS, все должно быть в порядке, по крайней мере, для отдельных страниц. Люди могут вас облажать, изменив масштаб печати в своем браузере.
Кажется, я помню, что все, что я делал, было одной страницей, поэтому мне не нужно было беспокоиться о нумерации страниц - это может быть намного сложнее.
источник
Я нашел это решение после поиска в Google, поиска "шаблон страницы A4 CSS" (codepen.io). Он показывает область размером A4 (A3, A5, также портретная) в браузере, используя тег <page>. Внутри этого тега отображается содержимое, но абсолютная позиция по-прежнему относительно области браузера.
Это работает для меня без какой-либо другой библиотеки CSS / JS, которая будет включена. Работает для текущих браузеров (IE, FF, Chrome).
источник
box-shadow: none;
а не 0В вашей обычной
style.css
:В вашей
print.css
:источник
PPI и DPI не имеют абсолютно никакого значения для того, как документ будет распечатываться в браузере. принтер не принимает информацию о шаге экрана или разрешении изображения и т. д., если вы печатаете изображения, они будут печататься в размере, пропорциональном тому, как они отображаются на экране. процессор печати браузера увеличил бы DPI изображений с чего-то довольно низкого, например 72dpi, до любого DPI, которым является остальная часть документа. Допустим, изображение отображается шириной в половину страницы, тогда его физическая ширина составляет около 4 дюймов. Ширина изображения будет примерно 300 пикселей для правильного отображения в браузере. К тому времени, когда оно печатается с номинальным разрешением 300 точек на дюйм, процессор добавляет пиксели. и изображение вырастет до 1200 пикселей, что при разрешении 300 точек на дюйм равно 4 ".
Когда речь идет о векторных или непиксельных элементах, таких как текст, принтер выбирает свой собственный DPI из драйвера, который не связан с шагом экрана или шириной браузера и т. д. Если браузер имеет ширину 3000 пикселей, процессор печати будет обтекать текст соответствующим образом.
Вот что затрудняет создание дисплеев для печати: каждый браузер и принтер будут интерпретировать размеры текста (pt, em, px) и интервалы по-своему. в зависимости от того, какой принтер, браузер и, возможно, даже ОС вы используете, вы получите различное количество строк и символов на странице. так что даже если вы тестируете на своем компьютере с помощью браузера и принтера и обнаруживаете, что можете отображать текст в поле размером 640x900 пикселей и идеально печатать его, следующий парень, который попытается напечатать, возможно, получит печать иначе. на самом деле нет никакого способа заставить каждый принтер и браузер каждый раз идентифицировать его.
забудьте пиксели и, более того, забудьте DPI, единственное, что вы можете использовать для пикселей, - это установить ширину таблицы, которая имитирует ширину области печати на вашем принтере. в этом случае я обнаружил, что ширина 640 пикселей близка.
источник
В поисках аналогичной проблемы я нашел это - http://www.indigorose.com/forums/archive/index.php/t-13334.html
A4 - это формат документа, поскольку изображение на экране будет зависеть от разрешения изображения, например, документ A4, размер которого изменяется на:
источник
Я знаю, что эта тема довольно старая, но я хочу поделиться своим опытом по этой теме. На самом деле, я искал модуль, который может помочь мне с моими ежедневными отчетами. Я пишу некоторые документы и некоторые отчеты на HTML + CSS (вместо Word, Latex, OO, ...). Целью было бы напечатать их на бумаге формата А4, чтобы поделиться ими с друзьями ... Вместо поиска я решил провести небольшую забавную сессию кодирования для реализации простой библиотеки, которая может обрабатывать «страницы», номер страницы, сводку, заголовок , нижний колонтитул, .... Наконец, я сделал это через ~~ 2h, и я знаю, что это не самый лучший инструмент, но он почти подходит для моих целей. Вы можете посмотреть на этот проект в моем репо и не стесняйтесь делиться своими идеями. Возможно, это не то, что вы ищете на 100%, но я думаю, что этот модуль может вам помочь.
В основном я создаю страницу тела "ширина: 200 мм;" и контейнер высотой: 290 мм (меньше, чем А4). Затем я использовал разрыв страницы: всегда; поэтому опция «печать» браузера знает, когда разделять страницы.
РЕПО: https://github.com/kursion/jsprint
источник
Технически, вы могли бы, но потребовалось бы много работы, чтобы заставить все браузеры распечатать страницу точно так, как она отображается на экране. Кроме того, большинство браузеров принудительно указывают URL-адрес, дату печати и нумерацию страниц на распечатке, что не всегда желательно. Это нельзя изменить или отключить.
Вместо этого я бы посоветовал создать PDF на основе содержимого на экране и предоставить PDF для загрузки и / или печати. Хотя большинство доступных PDF-библиотек платные, есть несколько бесплатных альтернатив для создания базовых PDF-файлов.
источник
Я использовал 680px в коммерческих отчетах для печати на страницах формата A4 с 1998 года. 700px не может быть корректно в зависимости от размера полей. Современные браузеры могут сжимать страницу до размера страницы на принтере, но если вы используете 680 пикселей, вы будете печатать правильно практически в любых браузерах.
Это HTML для вас Запустите фрагмент кода и посмотрите результат:
JSFiddle:
https://jsfiddle.net/ajofmm7r/
источник
Много способов сделать:
источник
Вполне возможно, чтобы ваш макет принял пропорции страницы формата а4. Вам нужно будет только установить ширину и высоту соответственно (возможно, уточните,
window.innerHeight
иwindow.innerWidth
хотя я не уверен, что это надежно).Сложная часть с печатью А4. Например, Javascript поддерживает печать страниц только с помощью этого
window.print
метода. Как @Prutswonder предложил создать PDF с веб-страницы, вероятно, самый сложный способ сделать это (кроме предоставления документации PDF в первую очередь). Однако это не так тривиально, как можно подумать. Вот ссылка, которая содержит описание Java-класса с открытым исходным кодом для создания PDF-файлов из HTML: http://www.javaworld.com/javaworld/jw-04-2006/jw-0410-html.html .Очевидно, что после того, как вы создали PDF-файл с печатью пропорций A4, это приведет к чистому отпечатку страницы формата A4. Стоит ли тратить время - другой вопрос.
источник