I want to measure the width of a string in printdocument & itextSharp, it shows different width,
Printdocument shows 363.5 points & Itextsharp shows 333.42 points, what is wrong with my code.
Imports System.IO
Imports System.Drawing.Printing
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Public Class Form1
Public egraphics As Graphics
Public prnDocument As New System.Drawing.Printing.PrintDocument
Private TMPbmp As New Bitmap(1, 1)
Private TMPgfx As Graphics = Graphics.FromImage(TMPbmp)
Private TxtSize As SizeF
Private lstrstring As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim psize As New Printing.PaperSize("Custom", 595, 842)
lstrstring = "Abcdghijyzw"
AddHandler prnDocument.PrintPage, AddressOf PrintPage
prnDocument.DefaultPageSettings.PaperSize = psize
prnDocument.DefaultPageSettings.Margins.Top = 0
prnDocument.DefaultPageSettings.Margins.Left = 0
prnDocument.DefaultPageSettings.Margins.Bottom = 0
prnDocument.DefaultPageSettings.Margins.Right = 0
prnDocument.Print()
ITextSharpPrint()
End Sub
Private Sub PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim fReportFont As System.Drawing.Font
Dim lstringformat As New StringFormat
lstringformat = System.Drawing.StringFormat.GenericTypographic
egraphics = e.Graphics
egraphics.PageUnit = GraphicsUnit.Point
fReportFont = New System.Drawing.Font(Trim("Helvetica"), 60, FontStyle.Regular)
egraphics.DrawString(lstrstring, fReportFont, New SolidBrush(Color.Black), 200, 100, lstringformat)
MsgBox(egraphics.MeasureString(lstrstring, fReportFont).Width)
End Sub
Private Sub ITextSharpPrint()
Using fs As System.IO.FileStream = New FileStream("C:\Kgm.pdf", FileMode.Create)
Dim document As New iTextSharp.text.Document(PageSize.A4, 0, 0, 0, 0)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
Dim tFont As iTextSharp.text.Font
document.Open()
Dim cb As PdfContentByte = writer.DirectContent
cb.BeginText()
tFont = FontFactory.GetFont("Helvetica", 60, 0)
Dim lbase As BaseFont
lbase = tFont.BaseFont
cb.SetFontAndSize(tFont.BaseFont, 60)
cb.SetTextMatrix(100, document.PageSize.Height - 200)
cb.ShowText(lstrString)
MsgBox(lbase.GetWidthPoint(lstrstring, 60))
cb.EndText()
document.Close()
writer.Close()
fs.Close()
End Using
End Sub
End Class