Graphics.DrawString-Center in der Breite des Druckdokuments
Ich versuche, eine Zeichenfolge auf einem Druckdokument zu zentrieren. Ich habe folgendes mit einem Bild gemacht und es funktioniert, aber mit einer Zeichenkette scheint es nicht dasselbe zu funktionieren.
Hier ist der Code, mit dem ich das Bild zentriert habe
e.Graphics.DrawImage(logo, (e.MarginBounds.Width / 2) - (logo.Width / 2), height);
Der Text, den ich zentrieren möchte, wird von einem Tab in einem TabControl geliefert
using (var sf = new StringFormat())
{
height = logo.Height + 15;
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
e.Graphics.DrawString(tabData.Text, new Font(this.Font.Name, 10),
new SolidBrush(tabData.ForeColor),
(e.MarginBounds.Width / 2) - (txtData.Width / 2), height, sf);
}
Ich habe auch unten versucht und string_size.Width / 2 anstelle von txtData.Width verwendet
SizeF string_size = e.Graphics.MeasureString(tabData.Text, tabData.Font);
BEARBEITEN
Aktueller vollständiger Code
float height = 0;
tabData.Text = "Date Range: 02/02/2010 - 08/09/2013"; //set just for testing
using (var logo = Properties.Resources.title)
{
e.Graphics.DrawImage(logo, e.PageBounds.Left + (e.MarginBounds.Width / 2) - (logo.Width / 2), height);
height = logo.Height + 15;
}
using (var sf = new StringFormat())
{
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
e.Graphics.DrawString(tabData.Text, new Font(this.Font.Name, 10), new SolidBrush(tabData.ForeColor), e.PageBounds.Left + (e.PageBounds.Width / 2), height, sf);
}
Verstehe nicht, warum ich eine Mischung aus PageBounds und MarginBounds verwenden muss, um das Bild zu zentrieren. Dann wird der Text entweder mit beiden MarginBounds oder mit beiden PageBounds zentriert