Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 27 Marzo 2018, 21:46 pm



Título: Imprimir una hoja con C#
Publicado por: Meta en 27 Marzo 2018, 21:46 pm
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 (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
  1. using System;
  2. using System.IO;
  3.  
  4.  
  5. namespace Impresora_Consola_01
  6. {
  7.    class Program
  8.    {
  9.        static void Main(string[] args)
  10.        {
  11.            void Printing(string printer)
  12.            {
  13.                try
  14.                {
  15.                    streamToPrint = new StreamReader(@"Hola amigo.");
  16.                    try
  17.                    {
  18.                        printFont = new Font("Arial", 10);
  19.                        PrintDocument pd = new PrintDocument();
  20.                        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
  21.                        // Specify the printer to use.
  22.                        pd.PrinterSettings.PrinterName = printer;
  23.  
  24.                        if (pd.PrinterSettings.IsValid)
  25.                        {
  26.                            pd.Print();
  27.                        }
  28.                        else
  29.                        {
  30.                            Console.WriteLine("Printer is invalid.");
  31.                        }
  32.                    }
  33.                    finally
  34.                    {
  35.                        streamToPrint.Close();
  36.                    }
  37.                }
  38.                catch (Exception ex)
  39.                {
  40.                    Console.WriteLine(ex.Message);
  41.                }
  42.            }
  43.        }
  44.    }
  45. }
  46.  

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:

Citar
Hola amigo.

Solo te he gastado un folio.

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

Saludos.


Título: Re: Imprimir una hoja con C#
Publicado por: Eleкtro en 28 Marzo 2018, 16:41 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
  1. pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
...de lo contrario no haces nada.

Aquí tienes una solución reusable, adaptable, y muy sencilla de usar:
  • ¿Cómo imprimir documentos de texto de forma sencilla? (https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg2158244#msg2158244)

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.


Título: Re: Imprimir una hoja con C#
Publicado por: Meta en 29 Marzo 2018, 08:00 am
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
  1. using System;
  2. using System.Drawing; // No olvidar y añadir referencia.
  3. using System.Drawing.Printing;
  4.  
  5. namespace Impresora_Consola_01
  6. {
  7.    class Program
  8.    {
  9.        static void Main(string[] args)
  10.        {
  11.            string s = @"Hola amigo.
  12.  
  13. Solo te he gastado un folio.";
  14.  
  15.            PrintDocument p = new PrintDocument();
  16.            p.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
  17.            {
  18.                e1.Graphics.DrawString(s, new Font("Times New Roman", 12),
  19.                    new SolidBrush(Color.Black), new RectangleF(0, 0, p.DefaultPageSettings.PrintableArea.Width,
  20.                    p.DefaultPageSettings.PrintableArea.Height));
  21.            };
  22.  
  23.            try
  24.            {
  25.                p.Print();
  26.            }
  27.            catch (Exception ex)
  28.            {
  29.                // throw new Exception("Exception Occured While Printing", ex);
  30.            }
  31.        }
  32.    }
  33. }

Gracias por tu tiempo.