title: vb.net 2010 PrintDocument Margins not working even if I set the margins
body: <p>I am reading from a text file and then printing the string using printdocument via vb.net 2010.</p>
  
  <p>Here is my code :</p>
  
  <pre><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 &gt; 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
  </code></pre>
  
  <p>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?</p>
  
  <p>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.</p>