Я видел, как этот вопрос задавался несколькими способами на SO и нескольких других сайтах, но большинство из них либо слишком специфичны, либо устарели. Я надеюсь, что кто-то может дать здесь окончательный ответ, не потворствуя спекуляциям.
Есть ли способ, с помощью CSS или javascript, изменить настройки принтера по умолчанию, когда кто-то печатает в своем браузере? И, конечно же, под «печатью из браузера» я имею в виду некоторую форму HTML, а не PDF или какой-либо другой подключаемый модуль, зависящий от MIME-типа.
Пожалуйста, обратите внимание:
Если некоторые браузеры предлагают это, а другие нет (или если вы знаете, как это сделать только для некоторых браузеров), я приветствую решения для конкретных браузеров.
Точно так же, если вы знаете, что основной браузер имеет определенные ограничения, запрещающие НИКОГДА делать это, это также полезно, но некоторые весьма актуальные документы будут приветствоваться. (просто сказать «что идет вразрез с политикой безопасности XYZ» не очень убедительно, когда XYZ внесла значительные изменения в эту политику за последние три года).
Наконец, когда я говорю «изменить настройки печати по умолчанию», я не имею в виду вечность, просто для своей страницы, и я имею в виду конкретно поля печати, верхние и нижние колонтитулы.
Мне очень хорошо известно, что CSS предлагает возможность изменения ориентации страницы, а также полей страницы. Одна из многих проблем - с Firefox. Если я установлю поля страницы на 1 дюйм, он ДОБАВЛЯЕТ это к половине дюйма, которую он уже установил на место.
Я очень хочу сократить использование PDF-файлов на сайте моего клиента, но основной причиной для беспокойства является нарушение представления (а также отсутствие достоверности).
Ответы:
Стандарт CSS допускает некоторое расширенное форматирование. В
@page
CSS есть директива, которая разрешает некоторое форматирование, которое применяется только к постраничным носителям (таким как бумага). См. Http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html .Недостатком является то, что поведение в разных браузерах не согласовано. Safari по-прежнему не поддерживает настройку полей страницы принтера, но все другие основные браузеры теперь поддерживают его.
С помощью
@page
директивы вы можете указать поле принтера на странице (которое отличается от обычного поля CSS элемента HTML):Это не работает в Firefox 3.6 , IE 7 , Safari 5.1.7 или Google Chrome 4.1 .
Установка поля @page действует в IE 8 , Opera 10 , Google Chrome 21 и Firefox 19 .
Хотя в этих браузерах поля страницы установлены правильно для вашего контента, поведение не является идеальным при попытке скрыть верхний / нижний колонтитулы.
Вот как он ведет себя в разных браузерах:
В Internet Explorer в настройках этой печати поле фактически установлено равным 0 мм, и если вы сделаете предварительный просмотр, вы получите 0 мм по умолчанию, но пользователь может изменить его в предварительном просмотре.
Вы увидите , что содержимое страницы на самом деле расположены правильно, но заголовок браузера печати и сноска отображается непрозрачной фон, и так эффективно скрывает содержимое страницы в этой позиции.
В Firefox более новые версии, она расположена правильно, но отображается как заголовок / текст колонтитул и содержание текста, так это выглядит как плохая смесь текста заголовка браузера и содержание страницы.
В Opera содержимое страницы скрывает верхний колонтитул при использовании непрозрачного фона в стандартном CSS, а позиция верхнего / нижнего колонтитула конфликтует с контентом. Неплохо, но выглядит странно, если для поля установлено небольшое значение, которое делает заголовок частично видимым. Также поле страницы не установлено должным образом.
В более новых версиях Chrome верхний и нижний колонтитулы браузера скрыты, если поле @page установлено настолько маленьким, что позиция верхнего / нижнего колонтитула конфликтует с контентом. На мой взгляд, именно так и должно себя вести.
Таким образом, вывод заключается в том, что Chrome имеет лучшую реализацию для скрытия верхнего / нижнего колонтитула.
источник
@page
поля иbody
поля - это принципиально разные вещи:body
поле применяется только ко всему телу , то есть к верхней части первой страницы и нижней части последней страницы. Для всех промежуточных страниц верх / низ будут по-прежнему иметь нулевое поле.Любая последняя версия Chrome и Opera, а также Firefox 48 alpha 1 и выше
Вы можете установить поле страницы слишком маленьким, чтобы вместить текст, чтобы отключить это (заимствование из ответа awe ):
Для версий Firefox до 48 альфа 1
Вы можете добавить
mozNoMarginBoxes
атрибут к<html>
тегу, чтобы предотвратить печать URL-адресов, номеров страниц и других вещей, которые Firefox добавляет к полям страницы.Это работает в Firefox 29 и далее. Вы можете увидеть скриншот разницы здесь , или посмотреть здесь для живого примера.
Обратите внимание, что
mozDisallowSelectionPrint
атрибут в примере не требуется для удаления текста с полей; Посмотрите, что делает атрибут mozdisallowselectionprint в PDF.js? ,Другие браузеры
К сожалению, кажется, что нет способа решить эту проблему в Internet Explorer, поэтому вам придется прибегнуть к PDF или попросить пользователей отключить тексты полей.
То же самое касается Сафари; согласно комментарию @Luiz Perez , самые последние версии Safari (8, 9.1 и 10) все еще не поддерживают
@page
подавление текстов полей.Я ничего не могу найти в Edge, и у меня нет установки Windows 10 для тестирования.
источник
<!DOCTYPE html> <html moznomarginboxes mozdisallowselectionprint>
установлено. Источник:https://bug743252.bugzilla.mozilla.org/attachment.cgi?id=714383
@page{ size: auto; margin: 3mm; }
поддержкой Chrome и Safari сделали кросс-браузерное решение для меня.Как уже говорилось @Awe, это решение, которое работает в Chrome!
Просто убедитесь, что это ВНУТРИ тегов головы:
источник
padding: 0.25in 0.5in;
в стили тела так, чтобы у меня были точные поля, которые мне нужны для красивой, чистой печати. Работая в Chrome v25, и к счастью для этого конкретного проекта, мы можем попросить конечных пользователей выбрать из пары современных браузеров.У меня есть аналогичный запрос от клиента, который хочет удалить заголовок, номера страниц и нижний колонтитул HTML. В этом случае клиент представляет HTML-страницу, которая может дублироваться как официальный сертификат. Добавленный URL, страница и заголовок не имеют значения и приводят к не очень приятному конечному продукту. В некотором смысле это выглядит просто дешево.
Media = Print не удалось отключить эти настройки браузера по умолчанию. Единственный обходной путь - попросить пользователя нажать кнопку «Шестерня» и включить / выключить эти элементы. Серьезно, я понятия не имел, что смогу сделать это в течение 20 лет (и мы думаем, что обычный пользователь будет иметь подсказку, чтобы нажать кнопку переключения?).
Если CSS поддерживает Media = Print, он должен поддерживать возможность контролировать весь процесс печати конечного пользователя. Я ценю, что браузеры предоставляют добавленные поля, но почему бы не позволить CSS контролировать общее впечатление от печати - если это то, что нужно. 90% решение может быть 100% с еще тремя полями! Простой:
было бы достаточно.
Опять же, не имеет значения, хочет ли конечный пользователь распечатать его или нет (возможно, ваш клиент очень частный и не хочет, чтобы распечатанные URL-адреса распространялись. Или, возможно, исполнительная группа использует частные сайты для совместной работы?). Рад защищать конечного пользователя, но если кто-то ищет ответ, не отвечайте, говоря, что это право конечного пользователя - показывать или скрывать. Иногда это право клиента оплачивать счета.
источник
@Page
директиву для установки поля принтера (которое не совпадает с полем основной страницы html). В настоящее время это поддерживается всеми основными браузерами, кроме Safari, но как это влияет на верхний и нижний колонтитулы, меняется. Лучшие реализации в Opera и Chrome.Попробуйте этот код работает 100% для меня:
для ландшафта:
ДЛЯ Portait:
источник
Поскольку вы упомянули «в своем браузере» и firefox, если вы используете Internet Explorer, вы можете отключить верхний / нижний колонтитул страницы, временно установив значение в реестре, см. Здесь пример. AFAIK Я не слышал о способе сделать это в других браузерах. Ответы Даниэля и Миккеля, кажется, сталкиваются друг с другом, я думаю, что где-то в реестре может быть похожая настройка для удаления заголовков / нижних колонтитулов или их настройки. Вы проверили это?
Надеюсь, что это помогает и счастливых праздников, С наилучшими пожеланиями, Том.
источник
@page margin: 0mm теперь работает в Firefox 19.0a2 (2012-12-07).
источник
Я решил свою проблему, используя некоторые CSS на веб-странице.
источник
Это сработало для меня с запасом около 1 см
источник