Imprimir un archivo de texto de varias páginas (Windows Forms en .NET)
Es común que las aplicaciones basadas en Windows impriman texto. La clase Graphics proporciona métodos para dibujar objetos (gráficos o texto) en un dispositivo, como una pantalla o una impresora. En la sección siguiente se describe detalladamente el proceso para imprimir el archivo de texto. Este método no admite la impresión de archivos de texto con formato, como un documento de Office Word o un archivo PDF.
Nota:
No se admiten los métodos DrawText de TextRenderer para la impresión. Debe usar siempre los métodos DrawString de Graphics, tal y como se muestra en el siguiente ejemplo de código, para dibujar texto para impresión.
Para imprimir texto
En Visual Studio, haga doble clic en el formulario desde el que desea imprimir, en el panel Explorador de soluciones. Se abre el diseñador visual.
En el Cuadro de herramientas, haga doble clic en el componente PrintDocument para agregarlo al formulario. Se debería crear un componente
PrintDocument
con el nombreprintDocument1
.Agregue un elemento
Button
al formulario o use un botón que ya esté en el formulario.En el diseñador visual del formulario, seleccione el botón. En el panel Propiedades, seleccione el botón de filtro Evento y, a continuación, haga doble clic en el evento
Click
para generar un controlador de eventos.Debería mostrarse el código de evento
Click
. Fuera del ámbito del controlador de eventos, agregue una variable de cadena privada a la clase denominadastringToPrint
.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
De nuevo en el código del controlador de eventos
Click
, establezca la propiedad DocumentName en el nombre del documento. Esta información se envía a la impresora. A continuación, lea el contenido del texto del documento y almacénelo en la cadenastringToPrint
. Por último, llame al método Print para producir el evento PrintPage. El métodoPrint
se resalta a continuación.private void button1_Click(object sender, EventArgs e) { string docName = "testPage.txt"; string docPath = @"C:\"; string fullPath = System.IO.Path.Combine(docPath, docName); printDocument1.DocumentName = docName; stringToPrint = System.IO.File.ReadAllText(fullPath); printDocument1.Print(); }
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim docName As String = "testPage.txt" Dim docPath As String = "C:\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath) PrintDocument1.Print() End Sub
Vuelva al diseñador visual del formulario y seleccione el componente
PrintDocument
. En el panel Propiedades, seleccione el filtro Evento y, a continuación, haga doble clic en el eventoPrintPage
para generar un controlador de eventos.En el controlador de eventos PrintPage, use la propiedad Graphics de la clase PrintPageEventArgs y el contenido del documento para calcular la longitud de la línea y las líneas por página. Una vez dibujada cada página, compruebe si es la última página y establezca la propiedad HasMorePages de
PrintPageEventArgs
como corresponda. El eventoPrintPage
se produce hasta queHasMorePages
esfalse
.En el ejemplo de código siguiente, se usa el controlador de eventos para imprimir el contenido del archivo "testPage.txt" con la misma fuente que se usa en el formulario.
private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { int charactersOnPage = 0; int linesPerPage = 0; // Sets the value of charactersOnPage to the number of characters // of stringToPrint that will fit within the bounds of the page. e.Graphics.MeasureString(stringToPrint, this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage); // Draws the string within the bounds of the page e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic); // Remove the portion of the string that has been printed. stringToPrint = stringToPrint.Substring(charactersOnPage); // Check to see if more pages are to be printed. e.HasMorePages = (stringToPrint.Length > 0); }
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim charactersOnPage As Integer = 0 Dim linesPerPage As Integer = 0 ' Sets the value of charactersOnPage to the number of characters ' of stringToPrint that will fit within the bounds of the page. e.Graphics.MeasureString(stringToPrint, Me.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, charactersOnPage, linesPerPage) ' Draws the string within the bounds of the page e.Graphics.DrawString(stringToPrint, Me.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic) ' Remove the portion of the string that has been printed. stringToPrint = stringToPrint.Substring(charactersOnPage) ' Check to see if more pages are to be printed. e.HasMorePages = stringToPrint.Length > 0 End Sub
Vea también
.NET Desktop feedback