javascript - tamaño - No se puede imprimir en otra bandeja de papel a través de IPP
imprimir valor en consola javascript (3)
Ha pasado un tiempo desde que pedí ayuda. Gracias a todos por su contribución =)
Intenté todas las soluciones sugeridas desde aquí y Github, pero ninguna de ellas funcionó, pero encontré una solución para resolver mi problema.
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();
Intenté esto, porque here (4.2.11) se describen los media
con:
Los valores para "medios" incluyen nombres medios, tamaños medianos, bandejas de entrada y formularios electrónicos, de modo que un atributo especifica los medios.
Estoy intentando imprimir un documento en la segunda bandeja de papel con IPP (Protocolo de impresión de Internet). Estoy usando esta npm IPP-Library .
Pero en cualquier momento que trato de imprimir un documento, mi impresora muestra el mensaje de que necesito agregar papel a la primera bandeja de papel y la salida de la consola dice 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();
La otra variante que probé es la siguiente (desde 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();
Pero entonces recibí este mensaje de error:
{
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''
Mi impresora no es compatible con IPP, pero la compartí en mi Macbook, que proporciona un servicio de IPP para todas las impresoras compartidas. Si estoy usando la primera bandeja de papel y tengo papel ahí, todo está bien, pero para mi proyecto también es necesario imprimir en otras bandejas.
La lista de atributos devuelta de Get-Printer-Attributes
enumera entre otras bandejas el segundo papel como media-source
compatible, pero solo la primera bandeja de papel funciona.
¿Alguien tiene una idea de cómo imprimir con éxito en otra bandeja de papel?
Actualización: También probé con otra impresora, pero recibí el mismo error.
Actualización 22.06.17: Todavía está confundido y no tiene ni idea de cómo solucionarlo.
La respuesta a la solicitud que está enviando es con el código de estado de 400 a la solicitud que se envió a la impresora.
Esto se puede ver aquí en la línea 30 .
Esto puede ser causado por una configuración de firewall o una configuración de red incorrecta.
Debe especificar correctamente la URL de la impresora como en este ejemplo y verificar si esta URL es válida y si la impresora responde:
var printer = ipp.Printer("http://NPI977E4E.local.:631/ipp/printer");
Parece que esta solicitud de extracción podría ser capaz de resolver el problema que está teniendo. Hasta que el autor de ipp
fusione la solicitud de extracción, puede actualizar su paquete npm para que apunte a ese parche ejecutando lo siguiente en el directorio de su proyecto:
npm i --save ipp@github:jaymcaliley/ipp