vb.net 2010 PrintDocument Margins not working even if I set the margins

北城以北 提交于 2019-12-22 17:21:37

问题


I am reading from a text file and then printing the string using printdocument via vb.net 2010.

Here is my code :

Public Class myPrinter
    Friend TextToBePrinted As String
    Public Sub prt(ByVal text As String)
        Dim psize As New System.Drawing.Printing.PaperSize("Custom Paper Size", 850, 550)
        Dim newMargins As New System.Drawing.Printing.Margins(0, 0, 0, 0)
        TextToBePrinted = text
        Dim prn As New Printing.PrintDocument
        Using (prn)
            prn.PrinterSettings.PrinterName = frmStockOut.printer
            prn.PrinterSettings.Copies = frmStockOut.copies

            prn.PrinterSettings.DefaultPageSettings.PaperSize = psize
            prn.PrinterSettings.DefaultPageSettings.Margins = newMargins
            prn.DefaultPageSettings.PaperSize = psize
            prn.DefaultPageSettings.Margins = newMargins

            AddHandler prn.PrintPage, _
               AddressOf Me.PrintPageHandler
            prn.Print()
            RemoveHandler prn.PrintPage, _
               AddressOf Me.PrintPageHandler
        End Using
    End Sub

    Private Sub PrintPageHandler(ByVal sender As Object, _
       ByVal args As Printing.PrintPageEventArgs)
        Dim myFont As New Font("Courier New", 11)
        args.Graphics.DrawString(TextToBePrinted, _
           New Font(myFont, FontStyle.Regular), _
           Brushes.Black, 50, 50)
    End Sub
End Class


    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.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


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ReadFile() ' will read text file and store in a string

        Dim Print As New myPrinter
        Dim myprintdialog As New PrintDialog
        With myprintdialog
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                printer = .PrinterSettings.PrinterName
                copies = .PrinterSettings.Copies
                Print.prt(stringToPrint)
            End If
        End With

    End Sub

The problem is even after I set the left margin and top margin to 0, it seems nothing has changed, it is still printing almost 3/4 inch for top margins and 1 inch for the left margin. This is also the output when I didn't set the margins. However, when I prn.OriginAtMargins = True , the output becomes a little different, left margin is now almost 1/2 inch but top margin remains the same. Something wrong with my code?

What I want to accomplish is the top margin can be set at approximately 20 pixels (assuming 100 pixels is equal to 1 inch) and left margin be set at 20 pixels too. Hope somebody can help me.

来源:https://stackoverflow.com/questions/21535714/vb-net-2010-printdocument-margins-not-working-even-if-i-set-the-margins

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!