Warum gibt Graphics.MeasureString () eine höhere als die erwartete Zahl zurück?
Ich erstelle eine Quittung und benutze das Graphics-Objekt, um die DrawString-Methode aufzurufen und den erforderlichen Text auszudrucken.
graphics.DrawString(string, font, brush, widthOfPage / 2F, yPoint, stringformat);
Dies funktioniert gut für das, wozu ich es brauchte. Ich wusste immer, was ich druckte, sodass ich alle Zeichenfolgen manuell zuschneiden konnte, damit sie richtig auf 80-mm-Quittungspapier passen. Dann musste ich ein bisschen mehr Funktionalität hinzufügen, um dies flexibler zu machen. Der Benutzer kann Zeichenfolgen übergeben, die am Ende hinzugefügt werden.
Da ich nicht wusste, was sie setzen würden, habe ich gerade meine eigene Zeilenumbruchfunktion erstellt, die eine Reihe von Zeichen zum Umbruch und die Zeichenfolge selbst enthält. Um die Anzahl der Zeichen herauszufinden, habe ich Folgendes getan:
float width = document.DefaultPageSettings.PrintableArea.Width;
int max = (int)(width / graphics.MeasureString("a", font).Width);
Jetzt gibt mir die Breite 283 zurück, was in mm ungefähr 72 ist. Dies ist sinnvoll, wenn Sie Ränder auf 80-mm-Papier berücksichtigen.
Die MeasureString-Methode gibt jedoch 10.5 für eine Courier New 8pt-Schriftart zurück. Anstatt das zu erreichen, was ich mit 36 - 40 erwartet hatte, erhalte ich 26, was dazu führt, dass 2 Textzeilen in 3-4 umgewandelt werden.
Die Einheiten für PrintableArea.Width sind 1/100 Zoll, und die PageUnit für das Grafikobjekt ist Display (normalerweise 1/100 Zoll für Drucker). Warum bekomme ich nur 26 zurück?