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.
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.
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):
Citarpd.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.
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#:
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.