Ç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
Visual Studio'da, Çözüm Gezgini bölmesinde, yazdırmak istediğiniz forma çift tıklayın. Bu, Visual Tasarım Aracı açar.
Araç Kutusu'ndan, forma eklemek için bileşene çift tıklayınPrintDocument. Bu, adlı
printDocument1
birPrintDocument
bileşen oluşturmalıdır.Forma bir
Button
ekleyin veya zaten formda olan bir düğmeyi kullanın.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ın
Click
.Olay
Click
kodu görünür olmalıdır. Olay işleyicisinin kapsamı dışında adlıstringToPrint
sınıfa özel bir dize değişkeni ekleyin.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
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 dizedestringToPrint
depolayın. Son olarak, olayı yükseltmek için yöntemini çağırın Print PrintPage . yöntemiPrint
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
Formun Visual Tasarım Aracı geri dönün ve bileşeni seçin
PrintDocument
. Özellikler bölmesinde Olay filtresini seçin ve olay işleyicisi oluşturmak için olaya çift tıklayınPrintPage
.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 HasMorePages
PrintPageEventArgs
özelliğini buna göre ayarlayın. OlayPrintPage
, olanafalse
kadarHasMorePages
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.
.NET Desktop feedback