Stampare un file di testo a più pagine (Windows Form .NET)

È comune per le applicazioni basate su Windows stampare il testo. La classe Graphics fornisce metodi per visualizzare oggetti (grafica o testo) su una periferica, ad esempio un monitor o una stampante. Nella sezione seguente viene descritto in dettaglio il processo di stampa del file di testo. Questo metodo non supporta la stampa di file di testo non normale, ad esempio un documento di Office Word o un file PDF .

Nota

I metodi DrawText dell'oggetto TextRenderer non sono supportati per la stampa. È consigliabile usare sempre i metodi DrawString dell'oggetto Graphics, come illustrato nell'esempio di codice seguente, per visualizzare il testo a scopo di stampa.

Per stampare il test

  1. In Visual Studio fare doppio clic sul modulo da cui si desidera stampare nel riquadro Esplora soluzioni. Verrà aperta la finestra di progettazione visiva.

  2. Nella casella degli strumenti fare doppio clic sul PrintDocument componente per aggiungerlo al modulo. Verrà creato un PrintDocument componente con il nome printDocument1.

  3. Aggiungere un oggetto Button al modulo oppure usare un pulsante già presente nel modulo.

  4. Nella finestra di progettazione visiva del modulo selezionare il pulsante . Nel riquadro Proprietà selezionare il pulsante Filtro eventi e quindi fare doppio clic sull'evento Click per generare un gestore eventi.

  5. Il Click codice evento deve essere visibile. All'esterno dell'ambito del gestore eventi, aggiungere una variabile stringa privata alla classe denominata stringToPrint.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Nel codice del Click gestore eventi impostare la DocumentName proprietà sul nome del documento. Queste informazioni vengono inviate alla stampante. Leggere quindi il contenuto del testo del documento e archiviarlo nella stringToPrint stringa. Infine, chiamare il Print metodo per generare l'evento PrintPage . Il Print metodo è evidenziato di seguito.

    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
    
  7. Tornare a Progettazione visiva del modulo e selezionare il PrintDocument componente. Nel riquadro Proprietà selezionare il filtro evento e quindi fare doppio clic sull'evento PrintPage per generare un gestore eventi.

  8. Nel gestore dell'evento PrintPage, usare la proprietà Graphics della classe PrintPageEventArgs e il contenuto del documento per calcolare la lunghezza delle righe e le righe per pagina. Dopo aver disegnato ogni pagina, verificare se è l'ultima pagina e impostare la HasMorePages proprietà di PrintPageEventArgs conseguenza. L'evento PrintPage viene generato finché la proprietà HasMorePages non assume valore false.

    Nell'esempio di codice seguente il gestore eventi viene usato per stampare il contenuto del file "testPage.txt" nello stesso tipo di carattere usato nel modulo.

    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
    

Vedi anche