Исторически сложилось так, что в отделе стоит единственный принтер Canon LBP-1120. И все было прекрасно до тех пор, пока не установили на рабочие машины Windows 7 x64. К сожалению, драйверов для LBP-1120 под 64-битные Windows нет в природе.

В интернете есть вариант решения такого вопроса. Предлагают печатать на виртуальный PostScript-принтер, который будет перенаправлять задания на реальный. В моём случае это решение поросло огромным количеством ошибок в работе системы печати. Пришлось искать другой способ.

Схема такая:
  1. Печатать на pdf-принтер, который сохранит документ в сетевую папку.
  2. На стороне сервера печати запустить скрипт, который будет все pdf-документы из сетевой папки отправлять на принтер.


Выбрал бесплатный PDF-принтер — dopdf. Устанавливается без каких-либо сложностей. При печати открывается маленькое окно с выбором имени pdf-файла. Ставим галочку «Всегда использовать эту папку» и снимаем «Открыть PDF».
image

Для печати pdf-файлов скачиваем и устанавливаем на принт-серверной стороне бесплатный PDF-ридер Foxit Reader. С его помощью возможна печать командой

"c:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe" /p <имя pdf-файла>


Ну и наконец пишем и компилируем autoit скрипт:

Код тут
;Автоматическая печать PDF-файлов, появляющихся в определенной папке

;Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
$gWatchFolder = "o:\pdfPrint\"

;Основной цикл
While true
   Local $search = FileFindFirstFile($gWatchFolder & "*.pdf")
   If @error Or ($search = -1) Then ContinueLoop
   Local $file = FileFindNextFile($search) 
   PrintFile($gWatchFolder & $file)	  
   Sleep(1000)
WEnd

;Функция печати конкретного pdf-файла
Func PrintFile($pFileName)
   
   $pNewFileName = StringReplace( $pFileName, ".pdf", "_.pdf")
   
   ;Ищем Фоксит ридер
   If FileExists("c:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe") Then
	  $s = """c:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe"" /p """ & $pNewFileName & """"
   ElseIf FileExists("c:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe") Then
	  $s = """c:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe"" /p """ & $pNewFileName & """"
   Else
	  MsgBox(4096, "Не установлена программа Foxit Reader!", "Foxit Reader.exe does NOT exists")
	  Exit
   EndIf

   ;Попытаемся переимновать файл, чтобы определить, дозаписан ли он до конца.
   If FileMove($pFileName, $pNewFileName) Then
	  
	  ;запускаем печать pdf через Фоксит Ридер и ждём, когда процесс завершится
	  Local $PID = Run($s)
	  ProcessWaitClose($PID)
	  
	  ;удаляем файл, чтобы он повторно не печатался
	  If Not FileDelete($pNewFileName) Then
		 msgbox(1,"","Не удалось удалить файл " & $pNewFileName & " ! Зовите системного администратора!")
		 Exit
	  EndIf
	  
   EndIf
   
EndFunc


Осталось положить скомпилированный exe-файл в папочку Автозагрузка и наслаждаться печатью.

Комментарии (32)


  1. ky0
    25.10.2023 07:04
    +2

    "Печать на сетевой принтер без драйвер". Идите уж до конца.


  1. iig
    25.10.2023 07:04
    +3

    Автор несмог в канонический redmon+ghostscript?


    1. Javian
      25.10.2023 07:04
      +2

      У меня это работало крайне нестабильно. Получилось надежно через PDFCreator.



  1. Keremet_2030
    25.10.2023 07:04

    cmd> print //public_printers/printer X:\path\to\file.docx(txt,pdf,any)


  1. alexyr
    25.10.2023 07:04

    Для принтеров поддерживающих "raw print" можно просто питоном послать файл через socket. Я себе такой скрипт на сервере делал, чтобы печатать закинутые в дропбокс документы


  1. atshaman
    25.10.2023 07:04

    Какой-то некрофилии псто. Windows 7, принтер, который не поддерживает windows 7... зачем оно?!


    1. Javian
      25.10.2023 07:04
      +4

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


      1. atshaman
        25.10.2023 07:04

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


        1. vis_inet
          25.10.2023 07:04
          +2

          Если люди до сих используют его, значит в этом есть какой-то смысл.


          1. atshaman
            25.10.2023 07:04

            Не поспоришь. Но "какой именно" - от меня ускользает.


            1. Radish
              25.10.2023 07:04
              +3

              Элементарный. Вот железяка, и она работает без проблем. С какой стати кто-то решил, что я должен её поменять на какую-то другую?


              1. atshaman
                25.10.2023 07:04

                Ну, я предполагаю, что обеспечение этой "без проблем" уже обошлось и еще обходится сильно дороже замены устройства и\или установки принт-сервера с CUPS'ом. Нет, если время сотрудников ничего не стоит, а от наличия\отсутствия печати ничего не зависит - то оно и норм, но тогда стартовый вопрос - "Зачем оно?"


                1. Palesandr
                  25.10.2023 07:04
                  +1

                  я работал в одной конторе, где был струйный принтер из периода динозавров. на нём печатали данные для ПТС. это как один из примеров.


                  1. atshaman
                    25.10.2023 07:04
                    -1

                    Ну да. А я застал времена и видел места, где-и-когда бланки заполняли от руки. Еще и, если мне память не изменяет - чернилами. И вот предполагаю я, что те перья и те чернильницы нихрена еще не выработали свой ресурс...

                    Хотя нет. Шарик на пере - вполне себе стирается о бумагу. Надо посмотреть на хабре статью, вдруг нашелся умелец, который подробно описал процедуру замены платиново-иридиевого (Или из чего оно там?) шарика в домашних условиях?


        1. Javian
          25.10.2023 07:04

          Мне его бывший пользователь недавно сказал, что ему нравилось, что "принтер голосом говорил", что бумага закончилась или замялась и он знал, что надо исправить. А с сетевыми МФУ он не знает почему не печатает.


          1. atshaman
            25.10.2023 07:04
            +1

            Угу. А меня он как-то всерьёз шуганул, когда терминальник с виндой при попытке печати человечьим голосом заговорил. Из гарантированно пустой и запертой серверной типа "кладовка". Были времена, да :)

            Но давно.


    1. iig
      25.10.2023 07:04
      +1

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


      1. atshaman
        25.10.2023 07:04
        +1

        Оттож! И в ряде случаев использование этого железа вместе с тем софтом, с которым оно шло - более, чем оправдано. У меня на проектах в АСУТП все еще XP всплывает, в лабораториях с ЛИМСом тоже немало ВСЯКОГО - по старые MAC'и включительно. Менять это все - дорого, высокорискованно и местами малоосмысленно, нивапрос.

        Но блин, даже не "офисный" а "домашний" принтер к этому явно не относится.


        1. Javian
          25.10.2023 07:04

          Это офисный принтер времен миллениума. Домой такое позволить себе не могли.


          1. atshaman
            25.10.2023 07:04

            Охтыж божечки-кошечки... Не знаю, кто, что, когда и где "мог", а кто, что, когда и где "не мог" себе позволить, а canon делал модель для домашнего использования путем отламывания от hp 11ой серии (С этим, кстати, связана длинная жизнь модели - офисные HP'шки получились очень удачными и шли очень большим тиражом, так что долгое время проблем с запчастями\расходкой не было) большей части управляющей электроники с переносом всего на сторону ОС\драйвера - с чем, а вовсе не с мифическим "заговором производителя" связано отсутствие драйвера - он вышел достаточно сложным и переносить его на новые ОС\архитектуру процессора оказалось дорого и с т.з. производителя бессмысленно.


            1. Javian
              25.10.2023 07:04

              Логичное решение убрать странный сканер в HP LaserJet 1100A. Им можно было пользоваться от безысходности. А то что осталось - офисный принтер с огромным запасом порошка в картридже.


              1. atshaman
                25.10.2023 07:04

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


        1. iig
          25.10.2023 07:04
          +1

          Домашний принтер, на котором печатается 10 листов в месяц. Он еще лет 20 прослужит. Если, конечно, потратить час на несложную манипуляцию (виртуалка с ХП и вот это вот из статьи).


          1. atshaman
            25.10.2023 07:04

            Теоретически оно "час", а практически думаю с неделю работы выползло. За час я, блин, образ ХРюши не найду - а там еще куча подтанцовок с установой pdf-принтеров, настройкой этой вот анлоговнеты на автотулзах, отладкой когда "ой, чтойта? Да, pdf кривой сформировался" или там кто-то принтеры по-перепутал и ждет, бедолага - и время этих "ждунов", которым надо печатать, а не получается - так-то тоже учитывать стоит. А если к этому ни дай б-же еще и человек хотя бы с полста пустить...

            Серьёзно - дешевле нормальный принтер купить. Ну или см. выше - при условии бесплатности рабочего времени всех сотрудников и того, что на печать никакие бизнес-процессы кроме "печати реферата сыну-школьнику" не завязаны - оно и норм.


            1. iig
              25.10.2023 07:04

              с неделю работы выползло

              Хобби, сэр. Некоторые до сих пор со Спектрумами возятся ;) А тут шанс поковырять систему печати в Windows.

              а там еще куча подтанцовок с установой pdf-принтеров

              Все эти подтанцовки сделаны энтузиастами 15 лет назад. Загуглить инструкцию и воспроизвести ;)

              Прямо аж интересно, почему этот вопрос возник аж в 2023 году ;)


              1. atshaman
                25.10.2023 07:04

                Эм. В стартовом посте: "Исторически сложилось так, что в отделе стоит единственный принтер Canon LBP-1120." - т.е. автор это предлагает как решение _для работы_ - оттуда и все мое недоумение. К хобби-проекту у меня бы претензий не было ровным счетом никаких - т.е. я бы делал по другому, но и так прикольно ).


                1. iig
                  25.10.2023 07:04
                  +1

                  Ну, может эта статья 15 лет назад написана ;)

                  И все было прекрасно до тех пор, пока не установили на рабочие машины Windows 7 x64

                  Для 2023 года это как-то слишком ретро. А так все правильно: появилась проблема и мы ее решили ;)


  1. Stillgray
    25.10.2023 07:04

    А можно ещё использовать триггеры FSRM и не крутить электросчётчик вечным циклом :)


    1. iig
      25.10.2023 07:04

      А в Win XP их завезли?

      Я когда-то мониторил папку spooler'а, чтобы ловить момент печати, и оно даже работало ;)

      А было бы интересно, если бы это запустили через cups на православном linux. У меня не вышло. Нашел несколько заметок на заброшенных форумах, какие-то пакеты для древних убунтов, но там даже непонятно, работало ли оно у авторов.


      1. atshaman
        25.10.2023 07:04
        +1

        У меня работало - но не сказать, чтобы хорошо. Примерно как со всеми win-принтерами лотерея была - "переткни 1018 четыре раза по USB для загрузки прошивки и не выключай до страшного суда" - а с каким-нибудь 1020, который вроде те же яйца, вид в профиль - почти без проблем.


  1. MaxStirlits
    25.10.2023 07:04

    Драйвера принтеров обратно совместимы. Можно просто древний драйвер какой нибудь скормить и не париться.