2017-05-23 18 views
21

Tôi đang cố gắng in tài liệu trên khay giấy thứ hai bằng IPP (Giao thức In Internet). Tôi đang sử dụng số này npm IPP-Library.Không thể in trên khay giấy khác qua IPP

Nhưng bất cứ lúc nào tôi cố in tài liệu máy in của tôi hiển thị thông báo rằng tôi cần thêm giấy vào khay giấy đầu tiên và đầu ra bàn điều khiển là Printed: successful-ok.

var ipp = require("ipp"); 
var PDFDocument = require("pdfkit"); 
var concat = require("concat-stream"); 

var doc = new PDFDocument; 
doc.text("Hello World"); 

doc.pipe(concat(function (data) { 
    var printer = ipp.Printer("MY_URL"); 

    var file = { 
     "operation-attributes-tag": { 
      "requesting-user-name": "admin", 
      'attributes-charset': 'utf-8', 
      'attributes-natural-language': 'de' 
     }, 
     "printer-attributes": { 
      "media-col": { 
       "media-source": "tray-2" 
      }, 
     }, 
     data: data 
    }; 
    printer.execute("Print-Job", file, function (err, res) { 
     console.log("Printed: " + res.statusCode); 
    }); 
})); 

doc.end(); 

Các biến thể khác tôi đã cố gắng được như sau (từ here):

var PDFDocument = require("pdfkit"); 
let fs = require('fs') 
var ipp = require('ipp'); 
var uri = "http://10.1.205.71"; 


var msg = new Buffer(
    '0200'+ //Version 
    '000201e6d5f2'+ 
    '01'+ //Operation attributes tag (your information in the Operation attributes might be different) 
    '47'+ //charset tag 
    '0012'+ //length 
    '617474726962757465732d63686172736574'+ //attributes-charset 
    '0005'+ //length 
    '7574662d38'+ //utf-8 
    '48'+ //natural language tag 
    '001b'+ //length 
    '617474726962757465732d6e61747572616c2d6c616e6775616765'+//attributes-natural-language 
    '0002'+//length 
    '656e'+ //en 
    '45'+ // URI tag 
    '000b'+ //length 
    '7072696e7465722d757269'+ //printer-uri 
    '0012'+//length 
    '687474703a2f2f31302e312e3230352e3731'+//http://10.1.205.71 
    '49'+ //mimeMediaType tag 
    '000f'+ //length 
    '646f63756d656e742d666f726d6174'+ //document format 
    '000f'+ //length 
    '6170706c69636174696f6e2f706466'+ //application/pdf 
    '02'+ //job attributes tag 
    '34'+ //begin collection 
     '0009'+ //length 
     '6d656469612d636f6c'+ //media-col 
     '0000'+ //value length 
     '4a'+ //collection entry 
     '0000'+ //name length 
     '000c'+ //value length 
     '6d656469612d736f75726365'+ //media-source 
     '44'+ // collection entry 
     '0000'+ //name length 
     '0006'+ //value length 
     '747261792d32'+ //tray-2 
    '37'+ //end of collection 
    '00000000'+ //name length and value length 
    '03', 'hex'); 

var doc = new PDFDocument; 
doc.text("Hello World"); 

var buffers = []; 
doc.on('data', buffers.push.bind(buffers)); 
doc.on('end', function(){ 
    var buf = Buffer.concat(buffers); 
    var catBuf = Buffer.concat([msg, buf]); 
    ipp.request(uri, catBuf, function(err, res){ 
    if(err){ 
     return console.log(err); 
    } 
    console.log(JSON.stringify(res,null,2)); 
    }); 
}); 
doc.end(); 

Nhưng sau đó tôi đã nhận được thông báo lỗi này:

{ 
Error 
    at new IppResponseError (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:72:17) 
    at ClientRequest.<anonymous> (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:40:8) 
    at Object.onceWrapper (events.js:293:19) 
    at emitOne (events.js:96:13) 
    at ClientRequest.emit (events.js:191:7) 
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:522:21) 
    at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23) 
    at Socket.socketOnData (_http_client.js:411:20) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:191:7) 
    name: 'IppResponseError', 
    statusCode: 400, 
    message: 'Received unexpected response status 400 from the printer', 
    stack: 'Error\n at new IppResponseError (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:72:17)\n at ClientRequest.<anonymous> (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:40:8)\n at Object.onceWrapper (events.js:293:19)\n at emitOne (events.js:96:13)\n at ClientRequest.emit (events.js:191:7)\n at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:522:21)\n at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)\n at Socket.socketOnData (_http_client.js:411:20)\n at emitOne (events.js:96:13)\n at Socket.emit (events.js:191:7)' } 
400 'response' 

Máy in của tôi không hỗ trợ IPP, nhưng tôi đã chia sẻ nó trên Macbook của tôi, cung cấp dịch vụ IPP cho tất cả các máy in dùng chung. Nếu tôi đang sử dụng khay giấy đầu tiên và có giấy trong đó mọi thứ đều ổn, nhưng đối với dự án của tôi, cũng cần phải in trên các khay khác. danh sách

Các thuộc tính trở về từ Get-Printer-Attributes danh sách các khay khác giấy thứ hai là hỗ trợ media-source, nhưng chỉ là người đầu tiên tác phẩm khay giấy.

Có ai có ý tưởng cách in thành công trên khay giấy khác không?

Cập nhật: Tôi cũng đã thử một máy in khác nhưng tôi gặp lỗi tương tự.

Cập nhật 22.06.17: Vẫn còn nhầm lẫn và không có bất kỳ đầu mối nào để khắc phục sự cố này.

+1

Để tham khảo: https://github.com/williamkapke/ipp/issues/43 – Sam

+0

Cảm ơn bạn đã tham chiếu vấn đề mã của tôi dựa trên =) Tôi hoàn toàn quên thêm tham chiếu – Batajus

Trả lời

0

Nó được một lúc kể từ khi tôi hỏi để được giúp đỡ. Cám ơn tất cả những đóng góp của họ =)

Tôi đã thử tất cả các giải pháp được đề xuất từ ​​đây và Github, nhưng không có giải pháp nào hiệu quả, nhưng tôi đã tìm ra giải pháp để giải quyết vấn đề của mình.

var ipp = require("ipp"); 
var PDFDocument = require("pdfkit"); 
var concat = require("concat-stream"); 

var doc = new PDFDocument; 
doc.text("Hello World"); 

doc.pipe(concat(function (data) { 
    var printer = ipp.Printer("MY_URL"); 

    var file = { 
     "operation-attributes-tag": { 
      "requesting-user-name": "admin", 
      'attributes-charset': 'utf-8', 
      'attributes-natural-language': 'de' 
     }, 
     "printer-attributes": { 
      // OLD WAY WHICH DOES NOT WORK 
      //"media-col": { 
      // "media-source": "tray-2" 
      //}, 
     }, 
     // SOLUTION 
     "job-attributes-tag":{ 
      "media": ["tray-2"] 
     }, 
     data: data 
    }; 

    printer.execute("Print-Job", file, function (err, res) { 
     console.log("Printed: " + res.statusCode); 
    }); 

})); 

doc.end(); 

Tôi đã thử điều này, vì here (4.2.11) là media mô tả với:

Các giá trị cho "phương tiện truyền thông" bao gồm trung tên, vừa kích cỡ, Input- khay và các hình thức điện tử để xác định một thuộc tính giới truyền thông.

4

Dường như this pull request có thể giải quyết được sự cố bạn đang gặp phải. Cho đến khi tác giả của ipp kết hợp các yêu cầu kéo, bạn có thể cập nhật gói NPM của bạn để trỏ đến bản vá đó bằng cách chạy sau trong thư mục dự án của bạn:

npm i --save [email protected]:jaymcaliley/ipp 
0

Việc đối phó với yêu cầu mà bạn đang gửi với tình trạng mã 400 cho yêu cầu đã được cấp cho máy in.

Điều này có thể xem tại đây on line 30.

Điều này có thể do cấu hình tường lửa hoặc cài đặt mạng sai.

Bạn cần phải xác định một cách chính xác URL cho máy in như trong ví dụ này và để kiểm tra xem URL này là hợp lệ và máy in đáp ứng với nó:

var printer = ipp.Printer("http://NPI977E4E.local.:631/ipp/printer"); 
Các vấn đề liên quan