Dlaczego Graphics.MeasureString () zwraca wyższą niż oczekiwana liczbę?

Generuję pokwitowanie i używam obiektu Graphics do wywołania metody DrawString w celu wydrukowania wymaganego tekstu.

graphics.DrawString(string, font, brush, widthOfPage / 2F, yPoint, stringformat);

To działa dobrze w przypadku tego, czego potrzebowałem. Zawsze wiedziałam, co drukowałam, więc mogłam ręcznie przyciąć dowolne struny, aby pasowały prawidłowo na papierze do odbioru 80 mm. Potem musiałem dodać trochę dodatkowej funkcjonalności, która uczyniłaby to bardziej elastycznym. Użytkownik może przekazywać ciągi, które zostaną dodane na dole.

Ponieważ nie wiedziałem, co zamierzają umieścić, właśnie stworzyłem własną funkcję zawijania słów, która przyjmuje liczbę znaków do zawinięcia i sam łańcuch. Aby dowiedzieć się o liczbie postaci, robiłem coś takiego:

float width = document.DefaultPageSettings.PrintableArea.Width;
int max = (int)(width / graphics.MeasureString("a", font).Width);

Teraz szerokość zwraca mi 283, co w mm wynosi około 72, co ma sens, gdy uwzględnisz marginesy na papierze 80 mm.

Jednak metoda MeasureString zwraca 10,5 czcionki Courier New 8pt. Więc zamiast obejść to, czego oczekiwałem, to 36 - 40, otrzymuję 26, co powoduje, że 2 linie tekstu zamieniają się w 3-4.

Jednostki dla PrintableArea.Width wynoszą 1/100 cala, a PageUnit dla obiektu graficznego to Display (co zwykle oznacza 1/100 cala dla drukarek). Dlaczego więc otrzymuję tylko 26?

questionAnswers(3)

yourAnswerToTheQuestion