DrawString / MeasureString Offset Problem Solved !
When you are trying to use DrawString and MeasureString for example to print something it seems that there is a little offset to the right and the left of the text, using MeasureString doesn’t seems to do its job.
This is how it will look:
And this is how you want it to look:
In order to solve the measuring problem all you have to do is use StringFormat with GenericTypographic and send it both to the MeasureString & to the DrawString as additional parameter.
Microsoft’s KB-307208 explains in more detail what is going on behind the gdi plus DrawString & MeasureString methods.
— Using the above method in a print preview example —
PrintPreviewDialog ppd = new PrintPreviewDialog();
System.Drawing.Printing.PrintDocument pd = new PrintDocument();
pd.PrintPage +=delegate(object printSender, PrintPageEventArgs printEventArg)
{
string str = "Some String";
Font font = new Font("Arial", 12);
PointF location = new PointF(10, 10);
PointF origin = new PointF(0, 0);
StringFormat sFormat = new StringFormat(StringFormat.GenericTypographic);
SizeF textArea = printEventArg.Graphics.MeasureString(str, font, origin, sFormat);
printEventArg.Graphics.FillRectangle(System.Drawing.Brushes.Red, new RectangleF(location, textArea));
printEventArg.Graphics.DrawString(str, font, System.Drawing.Brushes.Black, location,sFormat);
};
ppd.Document = pd;
ppd.PrintPreviewControl.Zoom = 4.0;
ppd.ClientSize = new Size(600, 300);
ppd.ShowDialog();