Печать прямо на принтер с JavaScript

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

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

Какое диалоговое окно печати отображается, когда кто-то нажимает кнопка печати в их браузере или Javascript window.print () Способ запуска зависит от операционной системы и от того, какие принтеры установлены на компьютере.

Поскольку большинство людей используют Windows на своем компьютере, давайте сначала опишем, как работает настройка печати в этой операционной системе. Операционные системы * nix и Mac немного отличаются в деталях, но в целом настроены аналогично.

Диалог печати

Диалоговое окно печати в Windows состоит из двух частей. Первый из них является частью Windows API (интерфейс прикладного программирования). API представляет собой набор общих частей кода, которые содержатся в различных DLL (

instagram viewer
Библиотека динамических ссылок) файлы, которые являются частью Windows Операционная система. Любая программа Windows может (и должна) вызывать API для выполнения общих функций, таких как отображение диалогового окна «Печать», чтобы оно работают одинаково во всех программах и не имеют разных опций в разных местах, как опция печати в DOS-программе дней. API Print Dialog также предоставляет общий интерфейс, позволяющий всем программам получать доступ к одному и тому же набору драйверов принтера. чем производители принтеров, вынужденные создавать драйверы для своих принтеров для каждой отдельной программы, которую хотели использовать Это.

Драйверы принтера - это вторая половина диалога печати. Существует несколько разных языков, которые разные принтеры понимают и используют для управления печатью страницы (например, PCL5 и Postscript). Драйвер принтера инструктирует API печати о том, как перевести стандартный внутренний формат печати что операционная система понимает в пользовательском языке разметки, что конкретный принтер понимает. Он также настраивает параметры, отображаемые в диалоговом окне «Печать», для отображения параметров, предлагаемых конкретным принтером.

Работа с принтером

На отдельном компьютере могут быть не установлены принтеры, может быть один локальный принтер, может быть доступ к нескольким принтерам по сети, он даже может быть настроен для печати в PDF или предварительно отформатированной печати файл. Если определено более одного «принтера», один из них назначается принтером по умолчанию, что означает, что именно он отображает свои данные в диалоговом окне печати при его первом появлении.

Операционная система отслеживает принтер по умолчанию и идентифицирует этот принтер для различных программ на компьютере. Это позволяет программам передавать дополнительный параметр в API печати, приказывая ему печатать напрямую на принтер по умолчанию без предварительного отображения диалогового окна печати. Многие программы имеют две разные опции печати - пункт меню, отображающий диалоговое окно печати, и кнопку быстрой печати на панели инструментов, которая отправляется непосредственно на принтер по умолчанию.

Если у вас есть веб-страница в Интернете, которую ваши посетители будут печатать, у вас практически нет информации о том, какие принтеры у них есть. Большинство принтеров по всему миру настроены на печать на бумаге формата А4, но вы не можете гарантировать, что принтер настроен по умолчанию. В одной североамериканской стране используется нестандартный формат бумаги, который короче и шире, чем А4. Большинство принтеров настроены на печать в портретном режиме (где более узким направлением является ширина, но некоторые могут быть установлены в ландшафт, где более длинным измерением является ширина. Конечно, каждый принтер также имеет разные поля по умолчанию в верхней, нижней и боковых частях страницы, даже до того, как владельцы зайдут и изменят все настройки, чтобы принтер хочу.

Учитывая все эти факторы, вы не можете сказать, будет ли принтер по умолчанию с его конфигурацией по умолчанию распечатывать ваш веб на странице A3 с незначительными полями или на A5 с огромными полями (оставляя немного больше, чем область размером с почтовую марку в середине страница). Вы, вероятно, можете предположить, что у большинства будет область печати на странице приблизительно 16 см x 25 см (плюс или минус 80%).

Печать потребностей

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

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

Необходимость ответить на все эти вопросы делает необходимым, чтобы диалоговое окно печати появлялось всякий раз, когда они хотите напечатать что-то, чтобы они могли убедиться, что все настройки верны, прежде чем они попадают в печать кнопка. Большинство браузеров также предоставляют возможность добавить кнопку «быстрой печати» на одну из панелей инструментов браузера, чтобы страница для печати на принтере по умолчанию с использованием настроек браузера по умолчанию относительно того, что должно быть напечатано, и как.

Javascript

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

Базовая безопасность говорит, что если что-то вроде Javascript не нужно знать об операционной системе и конфигурация браузера, чтобы манипулировать веб-страницей, тогда она не должна быть обеспечена этим Информация. Это не значит, что Javascript должен иметь возможность изменить настройки принтера на соответствующие значения для печать текущей страницы, потому что это не то, для чего нужен Javascript - это работа печати Диалог. Поэтому браузеры делают доступными для Javascript только те вещи, которые Javascript должен знать, такие как размер экрана, доступное пространство в окне браузера отображать страницу и тому подобные вещи, которые помогают Javascript понять, как устроена страница. Текущая веб-страница - единственная проблема Javascript.

Intranets

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

Поэтому Internet Explorer, заменяющий Javascript (называемый JScript), содержит немного больше информации о браузере и операционной системе, чем сам Javascript. Отдельные компьютеры в сети, на которых работает интрасеть, могут быть настроены для поддержки JScript window.print () Команда записи напрямую на принтер без отображения диалогового окна печати. Эта конфигурация должна быть настроена индивидуально на каждом клиентском компьютере и выходит за рамки статьи о Javascript.

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

instagram story viewer