Muchas impresoras y dispositivos multifuncionales admiten actualmente 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 irá a obtener el documento e imprimirlo. Lexmark seguramente hace esto y creo que algunos otros proveedores también lo hacen. Esto todavía significa que tiene que tratar con el documento de Word. Word 2007 es compatible con PDF (con add-in installed from Microsoft) y he utilizado esta función de forma programática con gran éxito en C#.
Aquí está el código para que:
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 el dispositivo no admite la impresión PDF entonces usted podría utilizar Ghostscript u otras herramientas para convertir su PDF a PS o incluso PCL. No es el mejor ya que esto significa ejecutar un pequeño código no administrado o el peor de los casos, bombardear y ejecutar la línea de comandos GS, dicho esto, actualmente hacemos esto en una de nuestras aplicaciones web y funciona bien. Por otro lado, no lo hacemos para imprimir sino para unir varios archivos PDF, pero al final funcionará de la misma manera.
Tengo control total del entorno de implementación, es una aplicación de intranet interna. Office interop/autmation es horrible, y mientras los documentos son generados por C#, usamos Aspose.Words. Puedo aceptar el uso de interop.automation para imprimir, intentarlo. –
Si ya tiene Aspose, entonces puede verificar si es compatible con la impresión. –
Pero definitivamente estoy de acuerdo en que en el 99% de los casos la interoperabilidad de la oficina es horrible. –