Интернет-протокол печати (IPP) для nodejs

Я пытаюсь распечатать PDF-файл в моем локальном с помощью принтера. Это код, который пытался напечатать.

fs.readFile('documents/AccountStatement.pdf', function(err, data) { 
    if (err)
        throw err;
    var printer = ipp.Printer("http://hostname:631/ipp/printer");
    var msg = {
    "operation-attributes-tag": {
      "requesting-user-name": "KUMA1936",
      "job-name": "My Test Job",
      "document-format": "application/pdf"
    },
    data: data
    };
    printer.execute("Print-Job", msg, function(err, res){
        console.log(res);
        console.log(err);
    });
});

В приведенном выше коде, что делает метод printer.execute() и параметр "Print-Job". И что здесь 631. Когда я печатаю Res, его шоу

{версия: '1.1', statusCode: 'сервер-ошибка-операция-не поддерживается', id: 442076, 'операция-атрибут-тег': { 'attribute-charset': 'utf-8', 'attribute-natural-language': 'en-us' } } ошибка равна нулю.

3 ответа

Вы можете проверить API документы. Первый параметр (строка) является операцией, определенной IPP. Описание о Print-Job операция дается здесь

3.2.1 Print-Job Operation

   This REQUIRED operation allows a client to submit a print job with
   only one document and supply the document data (rather than just a
   reference to the data).  See Section 15 for the suggested steps for
   processing create operations and their Operation and Job Template
   attributes.

Вы можете увидеть другие поддерживаемые IPP операции здесь. 631 - это принятый порт, используемый для IPP, который использует TCP.

Вы можете проверить больше об ошибке здесь, которая показывает:

13.1.5.2 server-error-operation-not-supported (0x0501)

   The IPP object does not support the functionality required to fulfill
   the request. This is the appropriate response when the IPP object
   does not recognize an operation or is not capable of supporting it.
   See sections 3.1.6.1 and 3.1.7.

Это означает, что в вашем коде нет ошибок. Скорее всего, ваш принтер не настроен или не поддерживает IPP. Последнее, но не менее важное, IPP.Printer должен быть указан IP принтера. Поэтому убедитесь, что IP-адрес, который вы даете, действителен (ваш код показывает, что вы дали имя хоста). Со страницы проекта дается:

To find out if your printer supports IPP:

 - Google your printer's specs
 - Try: telnet YOUR_PRINTER 631. If it connects, that's a good sign.
 - Use the '/examples/findPrinters.js' script.

В моем случае я просто делюсь принтером: (как и другим)

Так что URL будет (вы найдете findPrinters.js)

http://My-Computer-Name.local.:631/printers/my_printer_name

Это должно помочь, если ваш принтер не подключен (например, USB) к компьютеру. Но подключайтесь через локальную сеть.

  • Похоже, вы получаете ответ IPP-Version-1.1-Response при отправке IPP-2.0.
  • Попробуйте понизить до 1.1 с помощью опции версии
Другие вопросы по тегам