Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es habitual que la programación de Windows Forms ofrezca una vista previa de impresión además de los servicios de impresión. Una manera fácil de agregar vista previa de impresión a la aplicación es usar un PrintPreviewDialog control en combinación con PrintPage la lógica de control de eventos para imprimir un archivo.
Para obtener una vista previa de un documento de texto con un control PrintPreviewDialog
En Visual Studio, use el panel Explorador de soluciones y haga doble clic en el formulario desde el que desea imprimir. Esto abre el Diseñador Visual.
En el panel Cuadro de herramientas , haga doble clic en el PrintDocument componente y en el PrintPreviewDialog componente para agregarlos al formulario.
Agregue un
Button
elemento 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 Filtro de eventos y haga doble clic en el
Click
evento para generar un controlador de eventos.El
Click
código de evento debe estar visible. Fuera del ámbito del controlador de eventos, agregue dos variables de cadena privadas a la clase denominadadocumentContents
ystringToPrint
:// Declare a string to hold the entire document contents. private string documentContents=""; // Declare a variable to hold the portion of the document that // is not printed. private string stringToPrint="";
' Declare a string to hold the entire document contents. Private documentContents As String ' Declare a variable to hold the portion of the document that ' is not printed. Private stringToPrint As String
Regrese al código del controlador de eventos
Click
, establezca la propiedad DocumentName del documento que desea imprimir, y abra y lea el contenido del documento en la cadena añadida previamente.string docName = "testPage.txt"; string docPath = @"C:\"; string fullPath = System.IO.Path.Combine(docPath, docName); printDocument1.DocumentName = docName; stringToPrint = System.IO.File.ReadAllText(fullPath);
Dim docName As String = "testPage.txt" Dim docPath As String = "C:\Users\v-rsatao\Desktop\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath)
Como haría para imprimir el documento, en el PrintPage controlador de eventos, use la Graphics propiedad de la PrintPageEventArgs clase y el contenido del archivo para calcular líneas por página y representar el contenido del documento. Una vez dibujada cada página, compruebe si es la última y establezca en consecuencia la propiedad HasMorePages de
PrintPageEventArgs
. ElPrintPage
evento se genera hasta queHasMorePages
estéfalse
. Cuando el documento termine de representarse, restablezca la cadena que se va a representar. Además, asegúrese de que elPrintPage
evento está asociado a su método de control de eventos.Nota:
Si ha implementado la impresión en la aplicación, es posible que los pasos 5 y 6 ya se hayan completado.
En el ejemplo de código siguiente, el controlador de eventos se usa para imprimir el archivo "testPage.txt" en la misma fuente usada en el formulario.
void PrintDocument1_PrintPage(object sender, 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); // If there are no more pages, reset the string to be printed. if (!e.HasMorePages) stringToPrint = documentContents; }
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 ' If there are no more pages, reset the string to be printed. If Not e.HasMorePages Then stringToPrint = documentContents End If End Sub
Establezca la propiedad Document del control PrintPreviewDialog en el componente PrintDocument del formulario.
printPreviewDialog1.Document = printDocument1;
PrintPreviewDialog1.Document = PrintDocument1
Llame al método ShowDialog en el control PrintPreviewDialog. Tenga en cuenta el código resaltado siguiente, normalmente llamaría ShowDialog desde el Click método de control de eventos de un botón. Al llamar a ShowDialog , se genera el PrintPage evento y se representa la salida en el
PrintPreviewDialog
control . Cuando el usuario selecciona el icono de impresión en el cuadro de diálogo, se vuelve a generar elPrintPage
evento, enviando la salida a la impresora en lugar del cuadro de diálogo de vista previa. Por lo tanto, la cadena se restablece al final del proceso de representación en el paso 4.En el ejemplo de código siguiente se muestra el Click método de control de eventos para un botón del formulario. El método de control de eventos llama a los métodos para leer el documento y mostrar el cuadro de diálogo de vista previa de impresió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); printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog(); }
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim docName As String = "testPage.txt" Dim docPath As String = "C:\Users\v-rsatao\Desktop\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath) PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
Consulte también
.NET Desktop feedback