vb.net

[vb.net]列印檔案

透過vb.net 把一個文字檔列印出來

這項範例需要:
表單上要放一個名稱為 PrintButton 的 Button 控制項。
和一個名稱為 PrintDocument1 的 PrintDocument 元件。
然後你的桌面上要有一個名稱為 myFile.txt 的文字檔。



Public Class Form1
    Dim fileToPrint As System.IO.StreamReader
    Dim printFont As System.Drawing.Font
    Private Sub PrintButton_Click(sender As Object, e As EventArgs) Handles PrintButton.Click

        Dim PrintPath As String = System.Environment. _
           GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
        fileToPrint = New System.IO.StreamReader(PrintPath & "\myFile.txt", System.Text.Encoding.Default)
        printFont = New System.Drawing.Font("微軟正黑體", 12)
        PrintDocument1.Print()
        fileToPrint.Close()
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As  _
       System.Drawing.Printing.PrintPageEventArgs) Handles _
       PrintDocument1.PrintPage
        Dim linesPerPage As Single = 0
        Dim yPos As Single = 0
        Dim count As Integer = 0
        Dim line As String = Nothing
        linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)
        While count < linesPerPage
            line = fileToPrint.ReadLine()
            If line Is Nothing Then
                Exit While
            End If
            yPos = count * printFont.GetHeight(e.Graphics)
            e.Graphics.DrawString(line, printFont, Brushes.Black, 0, yPos, New StringFormat())
            count += 1
        End While
        If Not (line Is Nothing) Then
            e.HasMorePages = True
        End If
    End Sub


End Class

這樣就可以把檔案列印出來了,vb.net一樣還是透過e.Graphics.DrawString 這個在列印檔案。
它的原理就是 先去讀檔 然後看有幾行 一行一行列印出來

看你是第幾行 高度就是 第幾行*一行高度這樣

因為e.Graphics.DrawString 需要給你列印的x y座標

所以不管是列印文字 列印檔案 其實都是這樣的概念。

這個範例msdn上有 連結為 https://msdn.microsoft.com/zh-tw/library/cc464107%28v=vs.71%29.aspx

不過MSDN的範例列印中文會有問題,因為System.IO.StreamReader 這個預設是用UTF8去讀取檔案的,而我們中文預設是BIG5

所以我上面的範例有稍微改一下 加入了System.Text.Encoding.Default 這個 讓StreamReader 去用系統預設的編碼(以我們WINDOWS來說就是BIG5)來列印。

Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。