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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage