Imprimir una hoja con C#

Iniciado por Meta, 27 Marzo 2018, 21:46 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Buenas:

Quiero imprimir un folio, una hoja con la consola en C#, no con Windows Form.
Aquí hay un ejemplo pero es con Windows Form en el cual no me interesa.
https://msdn.microsoft.com/es-es/library/system.drawing.printing.printersettings%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp&f=255&MSPPError=-2147217396#code-snippet-2

He modificado el código así un poco.
Código (csharp) [Seleccionar]
using System;
using System.IO;


namespace Impresora_Consola_01
{
    class Program
    {
        static void Main(string[] args)
        {
            void Printing(string printer)
            {
                try
                {
                    streamToPrint = new StreamReader(@"Hola amigo.");
                    try
                    {
                        printFont = new Font("Arial", 10);
                        PrintDocument pd = new PrintDocument();
                        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
                        // Specify the printer to use.
                        pd.PrinterSettings.PrinterName = printer;

                        if (pd.PrinterSettings.IsValid)
                        {
                            pd.Print();
                        }
                        else
                        {
                            Console.WriteLine("Printer is invalid.");
                        }
                    }
                    finally
                    {
                        streamToPrint.Close();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}


Cuando ejecutes el ejecutable, lo que tiene que hacer, buscar una impresora que tenga dispuesta, y imprima solo un folio. El mensaje que imprime una hoja es este:

CitarHola amigo.

Solo te he gastado un folio.

¿Es posible hacer en modo consola o tiene que ser si o si con Windows Form?

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

#1
Cita de: Meta en 27 Marzo 2018, 21:46 PM¿Es posible hacer en modo consola o tiene que ser si o si con Windows Form?

Tanto en tu código como en el del ejemplo de MSDN faltaría por declarar el método 'pd_PrintPage' que controla el evento 'PrintDocument.PrintPage' para poder controlar la impresión de la página (la fuente de texto, tamaño, color, márgenes, etcétera):
Citar
Código (csharp) [Seleccionar]
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
...de lo contrario no haces nada.

Aquí tienes una solución reusable, adaptable, y muy sencilla de usar:

para saber como usar la clase, mira el ejemplo del 'modo de empleo' que escribí debajo de la clase PrintDocumentBasic en ese mmismo post.
no hace falta mencionar que puedes usar cualquier conversor de código VB.NET a C# para convertir la clase PrintDocumentBasic.

PD: recuerda que también puedes imprimir documentos con la librería de clases de WPF, lo cual sería mucho más sofisticado que usar los miembros de GDI+.

Saludos.








Meta

Buenas:

Pedazo de cocumento, has hecho un buen trabajo. ;)

Me ha ayudado tener ideas, ya puedo imprimir un folio, eso si, me sale una ventana con un botón cancelar y la palabra diciendo "Imprimiendo..." que no debería, pero al menos ya funciona. Dejo el código por si alguien lo necesita o coja ideas.

Código C#:
Código (csharp) [Seleccionar]
using System;
using System.Drawing; // No olvidar y añadir referencia.
using System.Drawing.Printing;

namespace Impresora_Consola_01
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = @"Hola amigo.

Solo te he gastado un folio.";

            PrintDocument p = new PrintDocument();
            p.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
            {
                e1.Graphics.DrawString(s, new Font("Times New Roman", 12),
                    new SolidBrush(Color.Black), new RectangleF(0, 0, p.DefaultPageSettings.PrintableArea.Width,
                    p.DefaultPageSettings.PrintableArea.Height));
            };

            try
            {
                p.Print();
            }
            catch (Exception ex)
            {
                // throw new Exception("Exception Occured While Printing", ex);
            }
        }
    }
}


Gracias por tu tiempo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/