Nuestros desarrolladores estrellas han agotado sus depósitos de café, por su búsqueda día y noche por la resolución, hasta que Ana halló el arreglo en Gogs por lo tanto ahora la comparte aquí.
Solución:
los key la frase en esa pregunta es ‘aplicación web’.
En una aplicación web normal que usa solo HTML+Javascript sobre HTTP, usted hipocresía simplemente envíe un documento directamente a una impresora. Esa es una de las razones por las que existen los navegadores web, y sin esa funcionalidad, la impresora de todos recolectaría el mismo tipo de basura que una máquina de fax pública.
Así que necesitas algún tipo de solución alternativa. Una opción es crear un complemento común, como flash, silverlight, applet de Java o incluso algo como Greasemonkey. Otro es un complemento personalizado, como un control de winforms alojado o una extensión de navegador personalizada.
Es muy afortunado, ya que parece que tiene el control completo (o el conocimiento) del entorno de implementación, y que este entorno es bastante homogéneo. Esto significa que tiene una opción adicional que otros han comenzado a explorar. Si puede instalar todas las impresoras en su entorno en el servidor web, entonces es bastante fácil usar las clases de impresora .Net integradas (en el System.Drawing.Printing
espacio de nombres) para enumerar esas impresoras, muéstrelas al usuario para que pueda elegir o mantener algún tipo de tabla de asignación de IP a impresora, y luego imprima directamente en esa impresora desde su aplicación web. Tenga en cuenta que este esquema puede requerir que su aplicación se ejecute a un nivel de confianza más alto del que se requeriría de otra manera.
Ahora se trata de imprimir documentos PDF y Word. Para acrobat, consulte este enlace:
http://support.adobe.com/devsup/devsup.nsf/docs/52080.htm (Máquina Wayback)
Tenga en cuenta que está un poco anticuado, pero creo que el concepto sigue siendo válido. Tendrá que experimentar un poco para asegurarse de que funcione como se espera.
Para Word, normalmente no soy un fanático de la interoperabilidad/automatización de Office en una aplicación web. Pero en este caso no está editando ningún documento: simplemente cargándolo el tiempo suficiente para imprimirlo. Y el hecho de que dependa de otro recurso escaso (las impresoras) debería evitar que se escale más allá de lo que su servidor web podría soportar. Entonces, es posible que tenga un caso raro en el que la automatización de Office en un proyecto web tenga sentido.
Muchas impresoras y dispositivos multifunción hoy en día admiten la impresión de archivos PDF directamente, esto puede resolver uno de sus problemas. Simplemente envíe el PDF a la impresora. De hecho, algunos incluso admiten el envío de una URL y la impresora luego irá a buscar el documento y lo imprimirá. Lexmark seguro hace esto y creo que algunos otros proveedores también lo hacen. Esto todavía significa que tiene que lidiar con el documento de Word. Word 2007 es compatible con PDF (con el complemento instalado de Microsoft) y he usado esta función programáticamente con gran éxito en C#.
Aquí está el código para eso:
Microsoft.Office.Interop.Word.ApplicationClass msWord = new Microsoft.Office.Interop.Word.ApplicationClass();
object paramUnknown = Type.Missing;
object missing = Type.Missing;
object paramSaveChangesNo = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
//object paramFonts = Microsoft.Office.Interop.Word.wde
object paramFormatPDF = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
object paramTrue = true;
object paramReadOnly = true;
object sourceDoc = @"c:input.doc"
object target = @"c:output.pdf";
msWord.Visible = false;
//open .doc
msWord.Documents.Open(ref sourceDoc, ref paramUnknown, ref paramReadOnly, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
//so it won't show on the taskbar
msWord.Application.Visible = false;
msWord.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;
//save .doc to new target name and format
msWord.ActiveDocument.SaveAs(ref targetDoc, ref paramFormatPDF, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramTrue, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
msWord.ActiveDocument.Close(ref missing, ref missing, ref missing);
msWord.Quit(ref paramSaveChangesNo, ref paramUnknown, ref paramUnknown);
Por último, si su dispositivo no admite la impresión de PDF, puede usar Ghostscript u otras herramientas para convertir su PDF a PS o incluso a PCL. No es lo mejor, ya que esto significa ejecutar un pequeño código no administrado o, en el peor de los casos, desembolsar y ejecutar la línea de comando GS, dicho esto, actualmente hacemos esto en una de nuestras aplicaciones web y funciona bien. Aparte, no lo hacemos para imprimir, sino para unir varios PDF, pero al final funcionará igual.
Aquí puedes ver las reseñas y valoraciones de los usuarios
Si para ti ha sido de ayuda este artículo, sería de mucha ayuda si lo compartieras con el resto desarrolladores de esta forma contrubuyes a extender nuestro contenido.