Udostępnij za pośrednictwem


Drukowanie przy użyciu podglądu wydruku (Windows Forms .NET)

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

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

  1. W programie Visual Studio użyj okienka Eksplorator rozwiązań i kliknij dwukrotnie formularz, z którego chcesz wydrukować. Spowoduje to otwarcie Projektant wizualizacji.

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

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

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

  5. Kod Click zdarzenia powinien być widoczny. Poza zakresem programu obsługi zdarzeń dodaj dwie prywatne zmienne ciągu 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 Click do kodu procedury obsługi zdarzeń ustaw DocumentName właściwość 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 PrintPage procedurze obsługi zdarzeń użyj Graphics właściwości PrintPageEventArgs klasy i zawartości pliku, aby obliczyć wiersze na stronę i renderować zawartość dokumentu. Po narysaniu każdej strony sprawdź, czy jest to ostatnia strona, i ustaw HasMorePages odpowiednio właściwość PrintPageEventArgs . Zdarzenie PrintPage jest zgłaszane do momentu, aż HasMorePages ma wartość false. Po zakończeniu renderowania dokumentu zresetuj ciąg do renderowania. Upewnij się również, że PrintPage zdarzenie jest skojarzone z metodą obsługi zdarzeń.

    Uwaga

    Jeśli zaimplementowano drukowanie w aplikacji, być może wykonano już krok 5 i 6.

    W poniższym przykładzie kodu program obsługi zdarzeń jest używany do drukowania pliku "testPage.txt" w tej samej czcionki użytej 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. Document Ustaw właściwość kontrolki PrintPreviewDialog na PrintDocument składnik w formularzu.

    printPreviewDialog1.Document = printDocument1;
    
    PrintPreviewDialog1.Document = PrintDocument1
    
  9. Wywołaj metodę ShowDialog w kontrolce PrintPreviewDialog . Zwróć uwagę na wyróżniony kod podany poniżej, zazwyczaj wywołujesz ShowDialogClick metodę obsługi zdarzeń przycisku. Wywołanie ShowDialog wywołuje PrintPage zdarzenie i renderuje dane wyjściowe do kontrolki PrintPreviewDialog . Gdy użytkownik wybierze ikonę drukowania w oknie dialogowym, PrintPage zdarzenie 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 Click metodę obsługi zdarzeń dla przycisku w formularzu. Metoda obsługi zdarzeń wywołuje metody odczytywania dokumentu i wyświetlania okna dialogowego 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 też