Обработчик печати на что влияет
Общие сведения о обработчиках печати
* начиная с Windows 2000, Localmon.dll и Winprint.dll включены в Localspl.dll.
Дополнительные сведения о типах данных см. в следующих разделах:
можно создать пользовательский обработчик печати для поддержки типа данных, не поддерживаемого Windows 2000 или более поздних версий операционной системы. Можно также предоставить настроенный обработчик печати, поддерживающий один или несколько поддерживаемых типов данных, что позволяет изменять возможности предоставляемых обработчиков печати.
Обработчики печати связаны с драйверами принтера во время установки драйвера, поэтому разные процессоры печати, поддерживающие один и тот же тип данных, могут сосуществовать. Дополнительные сведения см. в разделе Установка обработчика печати.
Обработчики печати — это библиотеки DLL пользовательского режима, которые отвечают за преобразование буферизованных данных задания печати в формат, который может быть отправлен монитору печати. Они также отвечают за обработку запросов приложений для приостановки, возобновления и отмены заданий печати.
Помещенные в очередь данные задания печати содержатся в файле очереди. Обработчик печати считывает файл, выполняет операции преобразования в потоке данных и записывает преобразованные данные в Диспетчер очереди печати. После этого диспетчер очереди сообщений отправляет поток данных в соответствующий монитор печати.
Microsoft Windows 2000 и более поздних версий включает обработчики печати, перечисленные в следующей таблице.
Теоретические основы печати в системе Windows
Чтобы понять роль принт-серверов в процессе «овеществления байтов», классифицировать продукты этой области и обрисовать возможные проблемы, необходимо изучить процесс печати в наиболее популярной операционной системе, под которую заточены многие модели принтеров — Microsoft Windows. Принципиальная схема взаимодействия компонентов представлена на рис. 1.
Рис. 1. Технология печати в ОС Windows
С точки зрения обычных программ, все графические устройства, что мониторы, что принтеры, представляются виртуальными холстами, на которых программа может рисовать любые документы с помощью универсальных команд. Приложения напрямую с драйверами не контактируют, их задача ограничивается диалогом выбора принтера и вызовом диалога настроек печати.
Получив от приложения последовательность графических команд, подсистема GDI (Graphics Device Interface, «программный интерфейс для работы с графическими устройствами») пропускает их через драйвер, чтобы получить другую последовательность команд — уже специфичных для выбранного принтера. Чаще всего, на этом этапе драйвер выдаёт полностью готовый для печати поток данных, но в общем случае достаточно получить промежуточный метафайл — тогда, если принтер требует растрирования на компьютере, это растрирование может быть выполнено не на компьютере клиента, а на том, к которому подключён принтер, то есть на сервере печати.
GDI: небольшое лирическое отступление
Разумеется, транслировать команды рисования в поток данных для печати можно не только через GDI. Например, при печати на PostScript-принтер система GDI не используется, приложение самостоятельно формирует код на языке PostScript согласно файлу описания возможностей конкретного принтера (PPD, PostScript Printer Description). Однако для PS-принтеров существуют и GDI-драйверы, чтобы можно было печатать из обычных приложений, работающих только с GDI-объектами. Аналогично и с другими «профессиональными» языками печати, такими как Prescribe. А вот более «народный» язык PCL, как правило, реализуется только в виде GDI-драйвера, то есть формально все такие принтеры — GDI-принтеры.
Но обычно под «GDI-принтером» или «Windows-принтером» понимают host-based печать, когда принтер являет собой упрощённый аппарат, не обладающий собственными способностями по разметке страниц, цветоделению и растрированию, и требует готовые данные с компьютера: «здесь поставь точку, а здесь не надо». Бывают и гибридные устройства, как PCL3GUI, где макетирование осуществляется на компьютере, а растрирование выполняет уже сам принтер. Грубо говоря, провести черту между host-based принтерами и всеми остальными GDI-принтерами, можно по признаку, умеет ли данное устройство принимать шрифты в векторной форме или требует растр.
В последнее время, примерно с 2003 г., получил большое распространение в бюджетном ценовом диапазоне ещё один класс устройств, условно называемых Win-принтерами. Этот обиходный термин восходит к «Win-модемам», которые занимаются только модуляцией сигнала, оставляя все прочие задачи на долю центрального процессора, то есть почти целиком реализуются в программных драйверах, а драйверы такие, как правило, выпускаются только под Windows. То же самое с Win-принтерами. Мало того, что они живут на всём готовом, принимая от компьютера законченный растр страницы, так они даже и на это не способны, пока не скачают с компьютера полную версию управляющей программы, потому что в постоянной памяти хранят лишь базовый загрузчик. Соответственно, если подключить такой принтер не к компьютеру, а к обычному принт-серверу, который знать не знает, что принтеру сначала необходим сеанс «гипноза», получится просто груда беспомощного металлолома.
Далее задание попадает в очередь печати, соответствующую выбранному принтеру. Диспетчер очередей (спулер) сохраняет временную копию задания на диск, чтобы освободить оперативную память и уменьшить зависимость от сбоев. Трансформированное слово spool в русском языке пишется как «шпулька»: спулер и в самом деле напоминает эту катушку в швейной машине — сначала наматываем на него нитку (сохраняем задание), а потом она разматывается при шитье (данные уходят на печать).
В зависимости от того, подключён принтер к локальному порту или является сетевым, задание поступает либо к провайдеру местной печати, либо отправляется на сервер сетевой печати, у которого своя система очередей, свой провайдер печати и т. д. Здесь надо сделать важную оговорку относительно того, что такое сервер печати на самом деле. Настоящий сервер печати — это компьютер, к которому подключены принтеры и который обеспечивает общий доступ по сети к этим принтерам: позволяет печатать на них, загружать их драйверы для различных операционных систем, администрировать их. У сервера печати свои вычислительные ресурсы, своя память для хранения заданий. Стандартной для Windows является система сетевой печати на базе универсального протокола SMB (Server Message Block, «блочный обмен информацией»), используемого также для общего доступа к файлам; подробнее об этом и других протоколах см. «Протоколы сетевой печати». Управлять общим доступом к принтеру можно на вкладке Доступ в его свойствах.
Провайдер местной печати преобразует задание на промежуточном языке (метафайл) в понятный принтеру код с помощью подходящего обработчика (процессора) печати. Если нужный код уже был получен на этапе работы GDI и драйвера, преобразование тут не требуется, и задание проходит данную стадию нетронутым (raw). А вообще, это как раз та точка маршрута, где происходит растрирование страниц для т. н. «GDI-принтеров»: если принтер подключён к серверу, то и растрирование выполняется на сервере, избавляя компьютер клиента от лишних нагрузок. Используемый обработчик печати можно определить, нажав соответствующую кнопку на вкладке Дополнительно в свойствах принтера. Windows оснащена стандартным процессором WinPrint, поддерживающим основные виды промежуточных форматов. Популярными среди многих производителей оборудования являются разработки компании Zenographics: например, IMFPrint. Существуют также процессоры, позволяющие эмулировать язык профессиональной печати PostScript на принтерах, не реализующих его аппаратно.
Готовое задание на родном языке принтера можно уже и печатать. Для отправки задания на принтер используются мониторы печати. Термин «монитор печати» не имеет ничего общего с мониторами состояния — фирменными утилитами некоторых производителей, отображающими на экране ход работы. Монитор печати — это своеобразный драйвер протокола печати, который позволяет отправить задание на принтер по тому или иному интерфейсу (но не драйвер этого интерфейса). Мониторы печати подразделяются на языковые мониторы и мониторы портов. Языковые мониторы осуществляют двусторонний диалог с принтером, применяя, например, подмножество команд языка PJL, отвечающее за получение информации о текущем состоянии устройства: готовность, замятие бумаги, уровень чернил и т. п. Вместо PJL, который реализован в стандартной библиотеке функций, могут применяться и другие языки. Мониторы портов просто регулируют передачу информации через порт принтера, посылая порции данных по сигналу готовности к их приёму. Назначение портов осуществляется на одноимённой вкладке в свойствах принтера. Если имеется несколько одинаковых печатающих устройств, их можно объединить в группу (пул, от англ. pool — «объединение»), которая будет действовать как единый объект, распределяя задания между принтерами. Принтеры одной группы должны находиться в одном помещении, потому что заранее нельзя предсказать, какому именно достанется ваш документ.
Как и сами принтеры, порты тоже бывают местными (локальными) и сетевыми (точнее, удалёнными — remote). К местным портам относятся только параллельный LPT и последовательный COM, которые обслуживаются стандартным монитором локальных портов. Сетевые порты представляют собой обёртки для специализированных протоколов сетевой печати, таких как LPD. Собственно, вот здесь и вступают в действие те устройства, которые сейчас стало принятым называть серверами печати (print-server appliance), но они суть обыкновенные сетевые адаптеры принтеров. Некоторые из них более функциональны, другие иначе как конвертерами «USB-Ethernet» назвать трудно. Они тоже являются компьютерами в миниатюре и позволяют печатать по сети — просто реализуют не все функции настоящего сервера печати. Более того, при наличии должных знаний, можно самостоятельно сконструировать такой принт-сервер из старого компьютера и операционной системы типа Linux.
Начинающим пользователям может показаться странным, что принтер, подключённый к сетевому порту, всё равно считается локальным, в то время как принтер, подключённый к локальному порту другого компьютера, считается сетевым. Ещё более странным может выглядеть то, что интерфейс USB не входит в категорию локальных портов — он считается удалённым (remote port), и каждый разработчик применяет собственные методы взаимодействия, усложняя или вовсе пресекая на корню попытки подключения к принт-серверам даже собственной марки.
Помимо отправки готового задания на принтер, его можно сохранить в файл. Такой файл потом распечатывается без повторной обработки, и главное, для этого не требуется наличие на компьютере ни приложения, создавшего файл, ни использованных шрифтов, ни самого исходного документа. Перенаправление в файл выполняется либо при установке соответствующей галочки в диалоге печати, либо после назначения принтеру специального порта FILE. Другим видом перенаправления является создание виртуального порта, монитор которого прогоняет все получаемые данные через назначенную программу и записывает результат её работы в другой порт — более логично использовать для этих нужд специализированный обработчик печати, но зато таким образом, например, удаётся приспособить перенаправитель портов RedMon и интерпретатор GhostScript для эмуляции языка PostScript, не затратив ни копейки на это бесплатно распространяемое ПО.
Выбор модели взаимодействия
Как уже говорилось, используя вместо настоящего компьютерного сервера печати компактное устройство без жёсткого диска и с небольшим объёмом памяти, нельзя рассчитывать на буферизацию больших заданий или растрирование на стороне сервера. Если нужны такие функции, следует отказаться от однорангового режима (peer-to-peer, p2p), при котором клиенты напрямую обращаются к принт-серверу, считая его сетевым портом для своего локального принтера (рис. 2а).
Рис. 2. Одноранговое взаимодействие и архитектура «клиент-сервер»
Необходимо перейти к модели клиент-сервер, где принтер с точки зрения рабочих станций является удалённым, и лишь для самого сервера — локальным (рис. 2б). Здесь выделенный компьютер выступает в роли сервера печати для клиентов и является единственным, кто напрямую обращается к внешнему серверу печати соответствующего принтера. При этом тот сервер печати выступает в роли простого сетевого адаптера, позволяющего вместо интерфейсов USB или LPT передавать информацию по локальной сети со всей её развитой инфраструктурой. Поэтому от такого сетевого адаптера не требуется каких-то особых «наворотов» — лишь бы был совместимым с компьютерным сервером, потому что уровень обслуживания конечных клиентов зависит уже от компьютерного сервера.
Родовое проклятье Win-принтеров
Так всё-таки, почему же многие бюджетные модели принтеров, выпускаемых сейчас на рынок, не работают с традиционными принт-серверами? Ведь они прекрасно функционируют при непосредственном подключении к вашему компьютеру или при подключении к другому компьютеру и разделению как общий ресурс. Проблема именно в том, что принт-сервер не загружает в принтер нужную ему управляющую программу. Чтобы научить некоторые принт-серверы выполнять подобные трюки, есть определённые способы, однако они не для рядового пользователя.
Но почему же зависает драйвер при попытке печати на такой принтер, если тот подключен через принт-сервер? И почему он не зависает при печати на этот же принтер, если его подключать к другому компьютеру? А потому что драйвер не совсем глупый: он пытается загрузить прошивку только в локальный принтер. То есть когда идёт печать на локальный принтер, в том числе сидящий на удалённом (сетевом) порту, драйверу необходимо сначала загрузить в принтер прошивку, прежде чем тот сможет принимать данные для печати. Когда принтер сетевой, драйвер на вашем компьютере оставляет эту задачу драйверу на компьютере-сервере, для которого этот принтер является локальным.
Устранение ошибки «Не удалось установить принтер» из-за проблем с обработчиком печати
«Не удалось установить принтер — не существует обработчик печати» – критичная ошибка, появляющаяся при подключении к компьютеру принтера или в момент запуска мастера установки в Windows 7, 10 x64/x32, неспособного найти в системе подходящие DLL-библиотеки и необходимые компоненты.
Когда возникает
Проблема часто появляется в масштабах Windows 7 или 10, когда операционная система сталкивается с неизвестным оборудованием и запускает процессы печати или функцию «Мастер установки принтеров». В редких случаях ошибка выводится уже в момент вывода информации – при подготовке документов, фотографий, сторонних графических или текстовых данных.
Причины неисправности
Техническая поддержка Microsoft связывает неполадки с не найденным или поврежденным компонентами и библиотеками, хранящимися в категории spool, расположенной в C:\Windows\System32\. Из-за неработающих файлов не запускаются важные службы и процессы.
Обработчик печати: что это
Обработчик печати – компонент операционной системы, по умолчанию хранящийся на жестком диске под названием winprint.dll. С функциональной точки зрения необходим в Windows в качестве оператора, запускающего службы и процессы, связанные с работой принтеров, сканеров и МФУ. Если же компонент не найден, то с запуском оборудования возникнут проблемы, которые приведут к появлению уже знакомой ошибки.
Раздел «spool» в директории ОС
Каталог spool, находящийся на локальном диске C по пути «Windows\System32\», состоит по меньшей мере из 5–6 отдельных папок, содержащих важные системные библиотеки, документы и файлы.
Устраняем ошибку
Способов избавиться от ошибки несколько – скопировать недостающие библиотеки из рабочего ПК с такой же ОС и добавить в системные каталоги или вручную перенести содержимое папки spool в корзину, перезагрузить компьютер, а после подождать, пока Windows автоматически загрузит недостающие файлы из сети.
Останавливаем службу печати
Копируем «winprint.dll» или всю папку «spool»
Если потерявшийся компонент не загружается автоматически после переноса в корзину и не восстанавливается силами Windows. А потому проще найти «рабочий экземпляр», а затем перенести в «С:\Windows\System32\spool\prtprocs».
Зависимость от версии ОС и разрядности системы
Куда именно придется копировать – зависит от типа Windows. Для 32-бит появится каталог W32X86, для 64 – x64. Частично отличаются и файлы, а поэтому важно ничего не перепутать.
Дополнительные действия для возобновления печати
Альтернативный способ с удалением разделов «printers» и «drivers»
Если предыдущие действия не привели к результатам, то остается вариант с очисткой содержимого некоторых каталогов из директории C:\Windows\System32\spool. Речь о файлах из папки Drivers (переносить в корзину Color – не нужно), Printers и даже Servers. Перед очисткой желательно подготовить точку восстановления для отката системы, если ситуация выйдет из-под контроля.
Устраняем проблемы с целостностью системных библиотек
Восстановить целостность библиотек поможет командная строка, запущенная от имени администратора (упростит задачу меню «Пуск» и поиск). После отображения интерфейса инструмента необходимо ввести команду «sfc /scannow» для сканирования доступных библиотек и исправления ошибок. Процедура занимает от 2 до 10 минут. При неработающем обработчике понадобится следующая команда «regsvr32 /i winprint.dll», запускающая процесс повторного добавления недостающих компонентов.
Защититься от неполадок, связанных с исчезновением некоторых DLL-файлов, помогут инструменты, способные в полуавтоматическом режиме загрузить недостающие компоненты из сети, а заодно – драйверы и прочие документы, возвращающие Windows 7 или 10 к жизни.
Базовое понимание внедрения механизма печати в любом документе конфигурации на БСП
Введение
Для кого-то этот материал не новшество, но отмечу, что данная статья будет полезна специалистам, желающим использовать последние возможности библиотеки стандартных подсистем в методах вывода на печать. Хорошо известно, что подсистема БСП постоянно меняется и усовершенствуется, и я могу сказать определенно, что старые методы и алгоритмы вывода на печать макетов печатных форм документов и справочников уже будут вряд ли применимы в современных конфигурациях на последних БСП.
Подготовка и настройка собственного документа конфигурации для использования в подсистеме печати в системе БСП.
Начнем с простого создания документа ТестоваяПечатьДокументов в конфигурации на БСП. В качестве конфигурации я беру чистую библиотеку стандартных подсистем версии 3.1.4.148. Разработка ведется на Платформе 1с 8.3.18.1208.
выглядит это вот так:
выглядит она вот так:
Далее, для «формы списка» добавляем внутренние БСП подключаемые процедуры:
А для «формы документа» добавляем вот такие внутренние БСП подключаемые процедуры:
Далее, заполним модуль менеджера нашего документа. Напишем в нем такой код:
Тут нет ничего сложного, но особое внимание хочу обратить на вот эту процедуру добавления команд
Заключение и выводы
В данной статье мы рассмотрели основной алгоритм БСП для размещения команд печати на любых документах конфигурации, в основе которой лежит современная библиотека стандартных подсистем. Напомню, что разработка примера велась на «чистой» библиотеке стандартных подсистем версии 3.1.4.148 и Платформе 1с 8.3.18.1208.
Другие мои материалы по БСП
Так же прошу ознакомиться с другими моими статьями по функционалу библиотеки стандартных подсистем и типовым конфигурациям:
Обработчик печати на что влияет
Добрый день уважаемые читатели, продолжаем с вами изучение операционной системы Windows 10 Redstone, наверняка каждый из вас уже попробовал поставить данную ОС и имеет какое-то о ней мнение, кому-то она понравилась, а кто-то возненавидел ее лютой ненавистью, я отношусь к ней альтернативно, так как любые ее глюки я обращаю в заработок и опыт, в том или ином виде. Если посмотреть статистику обновлений и глюков принесших с собой, то можно уже писать отдельную книгу по трабшутингу десятки, и сегодня еще одна статья в эту книгу, и звучит она так, что не удалось установить принтер в Windows 10. Смотрим, как это решается.
Не удалось установить принтер. Не существует обработчик печати
В предыдущих статьях я вам рассказывал уже почему не работает принтер в Windows 10, и там мы рассмотрели самые основные причины, сегодня же я увидел новое для себя сообщение об ошибке с формулировкой: не существует обработчик печати. Я до этого, такую ошибку не встречал, но забегая вперед, скажу, что успешно ее победил, иначе не было бы и статьи.
Итак, описываю ситуацию, есть у меня принтер HP LaserJet 400 MFP M425dn и попытался я его установить на Windows 10 Redstone, на этапе инсталлятора я получил ошибку: Не удалось установить принтер. Не существует обработчик печати, после чего мастер установки закрывался. Меня это немного поставило в ступор, так как на десятку я уже ставил этот принтер.
Устраняем ошибку: Не существует обработчик печати
Есть несколько методов решения данной проблемы, самый просто это скопировать с рабочего компьютера, на котором установлены драйвера данного принтера, папку spool, а точнее
Но есть некоторое условие, нужно скопировать именно с идентичной операционной системы, если например у вас Windows 10 PRO 64x, а вы подложите содержимое папки из Windows 8.1, то вы проблему не решите. Такой метод, кстати мы уже проделывали в заметке, когда вылетал диспетчер печати. Открываем папку spool на рабочем компьютере, для начала давайте изучим ее содержимое.
Теперь, чтобы вам скопировать эти папки, вам потребуется остановить службу печати, делается это просто, нажимаете WIN+R и вводите services.msc
Далее находите службу печати и через правый клик ее выключаете.
Копируем содержимое папки C:\Windows\System32\spool\. Далее переходим на компьютер на котором была ошибка: не удалось установить принтер. Не существует обработчик печати в Windows 10 и так же останавливаем там диспетчер печати, после чего копируем скопированную папку spool с заменой.
Второй метод, это просто попробовать с рабочего компьютера скачать файл обработчика winprint.dll из папки C:\Windows\System32\spool\prtprocs. Перед заменой его на целевом компьютере, выключите так же Диспетчер печати. Может кстати потребоваться перезапуск spooler службы.
Вот так вот просто решается ошибка установки принтера:
Ошибки 0х000006be и 0х000006d9
Еще данный метод с подменой попки spool может помочь в решении проблем: не удалось установить принтер невозможно завершить операцию ошибка 0х000006be и 0х000006d9.
Причины у данных ошибок вот какие: