Udostępnij za pośrednictwem


Drukowanie przy użyciu podglądu wydruku

W programowaniu Windows Forms często oferuje się podgląd wydruku, oprócz usług drukowania. Łatwym sposobem dodania podglądu wydruku do aplikacji jest użycie PrintPreviewDialog kontrolki w połączeniu z logiką obsługi zdarzeń PrintPage do drukowania pliku.

Aby wyświetlić podgląd dokumentu tekstowego za pomocą kontrolki PrintPreviewDialog

  1. W programie Visual Studio użyj okienka eksploratora rozwiązań i kliknij dwukrotnie formularz, z którego chcesz wydrukować. To otwiera projektanta wizualnego.

  2. W okienku przybornika kliknij dwukrotnie składnik i składnik , aby dodać je do formularza.

  3. Dodaj Button do formularza lub użyj przycisku znajdującego się już w formularzu.

  4. W projektancie wizualizacji formularza wybierz przycisk. W okienku właściwości wybierz przycisk filtru zdarzenia , a następnie kliknij dwukrotnie zdarzenie , aby wygenerować procedurę obsługi zdarzeń.

  5. Kod zdarzenia Click powinien być widoczny. Poza zakresem programu obsługi zdarzeń dodaj dwie zmienne ciągu prywatnego do klasy o nazwie documentContents i stringToPrint:

    // 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
    
  6. Po powrocie do kodu programu obsługi zdarzeń Click ustaw właściwość DocumentName na dokument, który chcesz wydrukować, i otwórz i odczytaj zawartość dokumentu do dodanego wcześniej ciągu.

    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)
    
  7. Tak jak w przypadku drukowania dokumentu, w procedurze obsługi zdarzeń PrintPage użyj właściwości Graphics klasy PrintPageEventArgs i zawartości pliku, aby obliczyć wiersze na stronę i renderować zawartość dokumentu. Po narysowaniu każdej strony sprawdź, czy jest to ostatnia strona, a następnie odpowiednio ustaw właściwość HasMorePages obiektu PrintPageEventArgs. Zdarzenie PrintPage jest zgłaszane dopóki HasMorePages nie zostanie false. Po zakończeniu renderowania dokumentu zresetuj ciąg do renderowania. Upewnij się również, że zdarzenie PrintPage jest skojarzone z metodą obsługi zdarzeń.

    Uwaga / Notatka

    Jeśli zaimplementowano drukowanie w aplikacji, kroki 5 i 6 mogły już zostać ukończone.

    W poniższym przykładzie kodu program obsługi zdarzeń jest używany do drukowania pliku "testPage.txt" w tej samej czcionki używanej w formularzu.

    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
    
  8. Ustaw właściwość Document kontrolki PrintPreviewDialog na składnik PrintDocument w formularzu.

    printPreviewDialog1.Document = printDocument1;
    
    PrintPreviewDialog1.Document = PrintDocument1
    
  9. Wywołaj metodę ShowDialog w kontrolce PrintPreviewDialog. Zwróć uwagę na następujący wyróżniony kod; zwykle wywołujesz ShowDialog z metody obsługi zdarzeń przycisku Click. Wywołanie ShowDialog wywołuje zdarzenie PrintPage i renderuje dane wyjściowe do kontrolki PrintPreviewDialog. Gdy użytkownik wybierze ikonę drukowania w oknie dialogowym, zdarzenie PrintPage zostanie ponownie zgłoszone, wysyłając dane wyjściowe do drukarki zamiast okna dialogowego podglądu. W związku z tym ciąg jest resetowany na końcu procesu renderowania w kroku 4.

    Poniższy przykład kodu przedstawia metodę obsługi zdarzeń Click dla przycisku w formularzu. Metoda obsługi zdarzeń wywołuje metody, które odczytują dokument i wyświetlają okno dialogowe podglądu wydruku.

    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
    

Zobacz także