Автоматическая печать документа на сетевом принтере - PullRequest
4 голосов
/ 07 ноября 2011

Мы пытаемся отправить главный документ (после автоматического почтового слияния) в автоматическом режиме на один из наших сетевых принтеров, которому назначено как сетевое имя, так и внутренний IP-адрес.

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

Итак, как мы можем отправить документ (docx) на сетевой принтер вместе с с параметром учета заданий программно?

Я не уверен, насколько распространены данные учета, когдавыполнять задания на печать, так как это первая работа, которую я когда-либо видел.

Вот важные особенности:

  • PHP 5 (предпочтительно)
  • WindowsСервер (на мой взгляд, 2003)
  • Принтер Kyocera KM-4050 (со статическим IP)
  • Некоторый опыт работы с C ++ и Visual Basic

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

----- РЕШЕНИЕ -----

Моя команда решилареализовать код, который будет вызывать исполняемый файл для преобразования каждого документа в PCL, а затем взять сгенерированный PCL и добавить к нему

@PJL SET KJOBMANAGERCODE="[project code here]"

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

Спасибо всем за помощь.Каждый ответ в значительной степени вдохновлял определенную часть нашего плана реализации.

Ответы [ 4 ]

1 голос
/ 19 ноября 2011

Моя команда решила внедрить код, который будет вызывать исполняемый файл для преобразования каждого документа в PCL, а затем взять сгенерированный PCL и добавить к нему

@ PJL SET KJOBMANAGERCODE = "[код проекта здесь]"

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

Спасибо всем за помощь. Каждый ответ в значительной степени вдохновлял определенную часть нашего плана реализации.

1 голос
/ 17 ноября 2011

«Учет заданий» - это просто драйвер, который переименовывает подсказку имени пользователя / пароля.

Было бы полезно, если бы вы упомянули, какую операционную систему (ы) вы используете для хостинга PHP, и где ваши пользователи испытывают эти запросы - но я думаю, совершенно очевидно, что вы используете MSWindows для обоих.

Короткий ответ: вам нужно пропустить диалоговое окно, которое (в настоящее время) встроено в драйвер вашего принтера). Может быть возможно настроить драйвер принтера или использовать альтернативную подсистему печати, например Cups .

1 голос
/ 18 ноября 2011

Если вы хотите, чтобы он использовал PHP, передача параметров PJL (необходимых для учета) не достижима (конечно, AFAIK). Но вы можете использовать сокетное соединение для передачи любого понравившегося вам параметра вместе с документом для печати. Пример:

> @PJL INFO ID
@PJL INFO ID
"LASERJET 4000"
> @PJL INFO STATUS
@PJL INFO STATUS
CODE=10001
DISPLAY="Ready"
ONLINE=TRUE
> @PJL INFO PAGECOUNT
@PJL INFO PAGECOUNT
536225
> @PJL INFO MEMORY
@PJL INFO MEMORY
TOTAL=2526160
LARGEST=1204208

Приведенный выше пример взят из IronGeek Blog , в котором есть интересная вводная статья о кодировании вашего собственного подключения к сетевым принтерам. Тем не менее, я бы начал с анализа трафика, передаваемого между вашим компьютером и сетевым принтером на задание печати, чтобы получить представление о точных задействованных командах - это должно сделать протокол легко реализуемым через соединение через сокет через PHP.

1 голос
/ 13 ноября 2011

Что я хотел бы сделать:

  • создать скрипт C ++ / VB, который бы выполнял тяжелую работу (извините, мне не помогло)
    • заставил бы его заглянуть в каталогдля заданий / принимать параметры CLI
  • заставить сервер PHP сохранять файлы в какой-то каталог вместе с некоторой информацией
    • скажем, сохранить 1.txt (номер ваш внутреннийсчетчик и должен быть уникальным, и каждый новый должен быть больше, чем предыдущий) файл в / path / infos с чем-то вроде этого внутри: 1 c: \ temp \ filetoprint.docx
  • VB-скрипт будет смотреть в этот каталог и читать первый файл (тот, у которого наименьшее число)
    • и видеть, что он для идентификатора учета заданий = 1
    • файл для печати находится в c:\ temp \ filetoprint.docx
    • и распечатайте его:)
    • удалите файл (ы) (! важно)

Теперь всезависит от ваших навыков программирования на VB / C ++ :) Кстати: другой вариант - вместо сохранения файлов в каталог вы можете использовать exec() и параметры CLI для VBScript / C ++.Но файловое решение является более надежным, поскольку это своего рода естественная очередь, а также оно устойчиво к сбоям программы печати - задание удаляется только после его завершения.Если работа печати не удалась, она попытается сделать это в следующий раз.Аналогию с файлами можно выполнить с помощью базы данных, но я не уверен, насколько легко подключиться к БД из VB / C ++, поэтому файловая система лучше всего подходит для резервирования;)

В части PHP есть только ссылка наскрипт, который сохранит идентификатор JA и имя файла в файл в / path / infos /

Это своего рода обходное решение, но я не думаю, что стоит делать это на чистом PHP (используя расширение PHP),

...