Hola, en este ejemplo utilizamos printpreview, un printDialog y de forma directa mediante un método, para realizar una impresión de forma compleja, es decir, solo imprimiendo el contenido de un ritchtextbox, la impresión puede ser de muchísimas hojas.
Empezamos agregando los "using" necesarios:
using System.Windows.Forms;
using System.Drawing.Printing;
using System.Drawing;
Dentro de la clase declaramos:
PrintDocument documento = new PrintDocument();//Documento a imprimir
int ItemCounter = 0;
Que es el documento que se imprimirá, un objeto de tipo "PrintDocument" o dicho en español documento a imprimir.
En el constructor agregamos:
- Código:
-
public Form1()
{
InitializeComponent();
documento.PrintPage += new PrintPageEventHandler(documento_PrintPage);
}
También insertamos en el evento Validated, para llevar un conteo de las paginas:
- Código:
-
void PrintPreviewControl_Validated(object sender, EventArgs e)
{
ItemCounter = 0;
}
Agregamos 3 botones, en el primero utilizaremos un printpreview, en el segundo utilizaremos un PrintDialog y en el tercero imprimiremos con el metodo print del documento.
En el evento click del primer botón:
- Código:
-
PrintPreviewDialog VistaPrevia = new PrintPreviewDialog();
VistaPrevia.Document = documento;
VistaPrevia.PrintPreviewControl.Document = documento;
VistaPrevia.PrintPreviewControl.Validated += new EventHandler(PrintPreviewControl_Validated);
VistaPrevia.Show();
En evento click del segundo boton:
- Código:
-
PrintDialog DialogoImprimir = new PrintDialog();
DialogoImprimir.Document = documento;
if (DialogoImprimir.ShowDialog() == DialogResult.OK) {
DialogoImprimir.Document.Print();
}
En evento click del tercer botón:
- Código:
-
documento.Print();
En evento PrintPage del documento a imprimir insertamos el siguiente código (Incluiré el evento para comodidad):
- Código:
-
void documento_PrintPage(object sender, PrintPageEventArgs e)
{
//Para cancelar la impresión
float margenIzdo=e.MarginBounds.Left;
float margenSuperior=e.MarginBounds.Top;
float lineas=0, posicionY=0;
int Counter=0;
string lineaactual;
Font miFuente=new Font("Times New Roman",16,FontStyle.Regular);
lineas=e.MarginBounds.Height/miFuente.GetHeight(e.Graphics);
while (Counter < lineas && ItemCounter <= richTextBox1.Lines.Length - 1)
{
lineaactual = richTextBox1.Lines[ItemCounter];
posicionY = margenSuperior + Counter * miFuente.GetHeight(e.Graphics);
e.Graphics.DrawString(lineaactual, miFuente, Brushes.Black, margenIzdo, posicionY);
Counter += 1;
ItemCounter += 1;
if (!(ItemCounter == richTextBox1.Lines.Length))
{ e.HasMorePages = true;
}
else{ e.HasMorePages = false; }
}
e.Graphics.DrawString("\n\nVisitanos en C Sharp Programadores México para más códigos" + "\n\nhttp://www.facebook.com/group.php?gid=381514445922&ref=ts", miFuente, Brushes.Blue, margenIzdo, posicionY);
}
Descargar:
[Tienes que estar registrado y conectado para ver este vínculo]CuteWriter
En caso de no contar con una impresora y para no gastar hojas, puedes utilizar este programa que en vez de imprimir en impresora lo hace sobre un archivo pdf.
[Tienes que estar registrado y conectado para ver este vínculo]