2011-06-13 2 views
6

Итак ... из того, что я могу найти в Google, я не могу найти способ использовать Javascript для настройки моих настроек печати (читайте: поля, ориентации, нижний колонтитул и т. Д.).Установите настройки печати из JS

Я собираюсь рассказать своему начальнику, что то, что он хочет сделать, невозможно. Я хотел проверить, будете ли вы хорошими людьми, чтобы это сделать. Пожалуйста, дайте мне знать.

Я нашел, что в FF вы можете использовать некоторые параметры user_pref (key, val) для настройки пользовательских настроек, но это не работает более чем для 90% моих пользователей. Я ищу что-то, что будет охватывать IE (как можно больше), FF и Chrome.

Спасибо ниндзя, который ответил.

+1

Я не веб-ниндзя любым натяжкой, и это не решение JS либо, но это не то, что печать таблицы стилей в CSS предполагается осуществить среди прочего? –

+1

Добавляя к Timo's, проверьте это на примере запроса на печать для css http://www.javascriptkit.com/dhtmltutors/cssmedia.shtml. В принципе создайте другую таблицу стилей и позвольте себе полностью изменить внешний вид печатной версии вашего стр. Например, мне пришлось обычно устанавливать цвет фона для тела на #fff, чтобы получить печатную копию, чтобы использовать меньше чернил и, лучше, выглядеть лучше. – mrk

+0

Действительно возможно установить свойства печати через JavaScript, используя это дополнение http://jsprintsetup.mozdev.org/ С уважением. –

ответ

11

Итак ... после всего дня просмотра, я думаю, что нашел ответ на свой вопрос. Короче говоря, ответ заключается в том, что JS и/или CSS не позволят вам переопределить настройку страницы по умолчанию в браузере клиента.

Вот что я пробовал. Если вы создаете простой HTML-файл с пустой головой и тело, содержащее только текст «Test», вы сможете увидеть, что я тестировал.

  1. Печатные листы для печати не могут решить вашу проблему. Установка поля на тело 0px 0px 0px 0px - это не то же самое, что нажать «Файл»> «Настройка страницы» и установить все ваши поля на 0. Несмотря на то, что тестеры стиля печати хотели бы, чтобы вы поверили, они разные. Попробуйте сами. Вот почему Print Style Sheets не решают вашу проблему.

  2. JS не может решить вашу проблему. Можете ли вы создать изображение, если каждая посещаемая вами страница изменила ваши локальные свойства JS? Чтобы позволить каждой странице иметь доступ к вашим локальным настройкам печати, это будет нарушение безопасности и не разрешено. Из-за этого JS не может решить вашу проблему.

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

6

Вы можете задать ориентацию страницы и поле с помощью CSS:

@page { 
    size: landscape; 
    margin: 10% 
} 

Вы также можете установить колонтитул в нижней части каждой страницы с помощью <tfoot> элемента.

EDIT: Как отметил Бижамин, это дом на полпути. Вы не можете изменить настройки принтера (те, которые появляются в диалоговом окне «Печать» при нажатии «Печать»). Кроме того, IE сильно не хватает поддержки для @page селектора, (посмотрел вокруг, чтобы проверить, поддерживает ли IE9 его и ничего не нашел). В качестве альтернативы вы всегда можете попробовать применить его к телу в своей таблице стилей печати.

body { 
    size: landscape; 
    margin: 10% 
} 

Несмотря на то, что я не уверен, насколько это эффективно.

+1

Jaitsu, что делает @page делать? Я не могу найти какую-либо документацию css на странице @page ... и все стили, которые я пытаюсь применить к ней, не работают. – frosty

+1

@page - элемент страницы для постраничных медиа (только для принтеров, AFAIK) - поддержка невелика - она, конечно же, не будет работать ни в одном из IE, о котором я знаю (не знаю, о 9). Он предназначен для такого рода вещей, но не позволит вам настроить настройки * принтера * - только поля/отступы страницы «box», которые отправляются на принтер (и к которым добавляются поля принтера). – Beejamin

+1

К сожалению, для включения ссылки: http://www.w3.org/TR/CSS2/page.html ее трудно найти, потому что google разбивает знак «@». – Beejamin

3

Я думаю, вам очень не повезло, пытаясь сделать это в HTML и CSS. Большая часть проблемы заключается в том, что поля принтера относятся к типу принтера: большинство принтеров имеют минимальный запас, который они могут установить (что эквивалентно пространству, которое им необходимо для захвата страницы, и движению головы влево/вправо).

Допустимые поля также будут различаться в зависимости от формата бумаги (размер поля обычно может быть меньше на меньшем листе, чем тот, который будет принят принтером). Например, если вы загружаете бумагу A5 в принтер формата A4, поля, которые вы можете установить, будут отличаться, если вы загрузите A4.

Ни одна из этих сведений не доступна на веб-странице, используя CSS, javascript или что-то еще.

Теперь, что касается решения, файлы PDF позволяют вставлять некоторые параметры принтера по умолчанию в файл - Acrobat pro позволит вам указать параметры масштабирования, номера экземпляров по умолчанию и т. Д. Я бы не прочь утверждая, что в формате файла, который Acrobat не предоставляет, есть больше потенциальных настроек.

Существует множество полнофункциональных инструментов для создания PDF-файлов для любой используемой серверной технологии. хорошие даже позволят вам предоставить URL-адрес и отображать HTML + CSS в PDF-контент - это будет в некоторой степени автоматизировать создание. Генерация PDF-кода довольно интенсивна, хотя и для пользователя это будет нецелесообразным (и для большинства браузеров потребуются плагины PDF).

Я знаю, что это не идеально, но это проспект, на который я бы посмотрел. Удачи!

1

Использование CSS поможет вам в этом.

@page { 
    margin:0cm; 
} 
Смежные вопросы