none
Imprimir desde c# RRS feed

  • Pregunta

  • Explico la situación para que sea simple (abstrayendo el problema- aclaro esto pues quizas mi pregunta les resulte sin sentido):

    tengo en el disco c: un archivo documento1.docx  (es un archivo word que tiene en su interior fotos y algo de escritura)

    tengo un formulario windows con un botón que al presionarlo quiero que imprima el archivo documento1.docx sin abrir el word

    Que código debería poner en mi botón para que imprima si es que se puede?

    Gracias


    Sofia

    viernes, 31 de octubre de 2014 6:14

Respuestas

  • Depende de lo que entiendas por "sin abrir el Word". Si queres decir "que no se vea en la pantalla", entonces puedes usar automatización OLE para imprimir por mediación del Word. Simplemente, ponle en el programa una referencia al Word, y dale los comandos para que cargue el archivo y lo mande a impresora, sin pedirle que se abra en pantalla. Pero si quieres decir "sin ejecutar el Word" (por ejemplo, si el programa debe poder imprimir el documento desde un equipo en el que no está instalado el Word), entonces es bastante más complicado. Puedes usar el SDK de OpenXML (es una descarga gratuíta desde Microsoft) para abrir el fichero docx y extraer los textos e imágenes, y luego mandarlos a imprimir usando el PrintDocument y System.Drawing. Esto será considerablemente más complejo que imprimir por mediación del ejecutabla de Word; probablemente varios miles de líneas de programación, así que no puedes sencillamente preguntar en el foro "qué código debería poner en mi botón".

    En cambio, si te vale lo de ejecutar el Word sin mostrarlo, sí que son sólo unas pocas líneas. Por ejemplo, puedes usar el ProcessStartInfo para lanzar el ejecutable sin abrirlo en una ventana:

    http://www.c-sharpcorner.com/Blogs/13946/print-any-document-file-using-a-C-Sharp-code-without-opening-docu.aspx

    O bien usar la automatización mediante COM/Interop. Algo parecido a esto:

    using Word = Microsoft.Office.Interop.Word;
    //...
    Word.Application wdApp = new Word.Application();
    Word.Document doc = wdApp.Documents.Open(PonerAquíLosParámetros);
    doc.PrintOut(PonerAquíLosParámetros);
    doc.Close(PonerAquíLosParámetros);
    wdApp.Quit(PonerAquíLosParámetros);

    Si vas a seguir esta vía, asegúrate de leer sobre el tema porque hay que tomar varias precauciones, tales como "liberar" los objetos creados para que no se te quede una copia de Word ejecutándose en memoria después de terminar de usarlo.

    • Marcado como respuesta Daniela_23 viernes, 31 de octubre de 2014 8:02
    viernes, 31 de octubre de 2014 7:41
    Moderador

Todas las respuestas

  • Depende de lo que entiendas por "sin abrir el Word". Si queres decir "que no se vea en la pantalla", entonces puedes usar automatización OLE para imprimir por mediación del Word. Simplemente, ponle en el programa una referencia al Word, y dale los comandos para que cargue el archivo y lo mande a impresora, sin pedirle que se abra en pantalla. Pero si quieres decir "sin ejecutar el Word" (por ejemplo, si el programa debe poder imprimir el documento desde un equipo en el que no está instalado el Word), entonces es bastante más complicado. Puedes usar el SDK de OpenXML (es una descarga gratuíta desde Microsoft) para abrir el fichero docx y extraer los textos e imágenes, y luego mandarlos a imprimir usando el PrintDocument y System.Drawing. Esto será considerablemente más complejo que imprimir por mediación del ejecutabla de Word; probablemente varios miles de líneas de programación, así que no puedes sencillamente preguntar en el foro "qué código debería poner en mi botón".

    En cambio, si te vale lo de ejecutar el Word sin mostrarlo, sí que son sólo unas pocas líneas. Por ejemplo, puedes usar el ProcessStartInfo para lanzar el ejecutable sin abrirlo en una ventana:

    http://www.c-sharpcorner.com/Blogs/13946/print-any-document-file-using-a-C-Sharp-code-without-opening-docu.aspx

    O bien usar la automatización mediante COM/Interop. Algo parecido a esto:

    using Word = Microsoft.Office.Interop.Word;
    //...
    Word.Application wdApp = new Word.Application();
    Word.Document doc = wdApp.Documents.Open(PonerAquíLosParámetros);
    doc.PrintOut(PonerAquíLosParámetros);
    doc.Close(PonerAquíLosParámetros);
    wdApp.Quit(PonerAquíLosParámetros);

    Si vas a seguir esta vía, asegúrate de leer sobre el tema porque hay que tomar varias precauciones, tales como "liberar" los objetos creados para que no se te quede una copia de Word ejecutándose en memoria después de terminar de usarlo.

    • Marcado como respuesta Daniela_23 viernes, 31 de octubre de 2014 8:02
    viernes, 31 de octubre de 2014 7:41
    Moderador
  • que buena respuesta

    Sofia

    viernes, 31 de octubre de 2014 8:03
  • Alberto, sabes como se hace para que las márgenes no se dañen si imprimes un documento desde .NET?? Hago la imrpesion y en una impresora se ve perfecto, pero en otra impresora las márgenes no cuadran y queda sobre el preimpreso la impresión.
    viernes, 31 de octubre de 2014 13:36