Çok sayfalı metin dosyasını yazdırma (Windows Forms .NET)

Windows tabanlı uygulamaların metin yazdırması yaygındır. sınıfı, Graphics bir cihaza ekran veya yazıcı gibi nesneler (grafik veya metin) çizme yöntemleri sağlar. Aşağıdaki bölümde, metin dosyasını yazdırma işlemi ayrıntılı olarak açıklanmaktadır. Bu yöntem, Office Word belgesi veya PDF dosyası gibi düz olmayan metin dosyalarını yazdırmayı desteklemez.

Dekont

DrawText yöntemleri TextRenderer yazdırma için desteklenmez. Aşağıdaki kod örneğinde gösterildiği gibi, yazdırma amacıyla metin çizmek için her zaman yöntemini GraphicskullanmalısınızDrawString.

Metni yazdırmak için

  1. Visual Studio'da, Çözüm Gezgini bölmesinde, yazdırmak istediğiniz forma çift tıklayın. Bu, Visual Tasarım Aracı açar.

  2. Araç Kutusu'ndan, forma eklemek için bileşene çift tıklayınPrintDocument. Bu, adlı printDocument1bir PrintDocument bileşen oluşturmalıdır.

  3. Forma bir Button ekleyin veya zaten formda olan bir düğmeyi kullanın.

  4. Formun Görsel Tasarım Aracı düğmeyi seçin. Özellikler bölmesinde Olay filtresi düğmesini seçin ve olay işleyicisi oluşturmak için olaya çift tıklayınClick.

  5. Olay Click kodu görünür olmalıdır. Olay işleyicisinin kapsamı dışında adlı stringToPrintsınıfa özel bir dize değişkeni ekleyin.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Olay işleyici koduna Click geri dönün, özelliğini belgenin adına ayarlayın DocumentName . Bu bilgiler yazıcıya gönderilir. Ardından, belge metni içeriğini okuyun ve dizede stringToPrint depolayın. Son olarak, olayı yükseltmek için yöntemini çağırın PrintPrintPage . yöntemi Print aşağıda vurgulanır.

    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. Formun Visual Tasarım Aracı geri dönün ve bileşeni seçinPrintDocument. Özellikler bölmesinde Olay filtresini seçin ve olay işleyicisi oluşturmak için olaya çift tıklayınPrintPage.

  8. Olay işleyicisindePrintPage, sayfa başına satır uzunluğunu ve satırlarını hesaplamak için sınıfın özelliğini PrintPageEventArgs ve belge içeriğini kullanınGraphics. Her sayfa çizildikten sonra, sayfanın son sayfa olup olmadığını denetleyin ve öğesinin HasMorePagesPrintPageEventArgs özelliğini buna göre ayarlayın. OlayPrintPage, olana falsekadar HasMorePages oluşturulur.

    Aşağıdaki kod örneğinde olay işleyicisi, "testPage.txt" dosyasının içeriğini formda kullanılan yazı tipinde yazdırmak için kullanılır.

    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
    

Ayrıca bkz.