¿Por qué Graphics.MeasureString () está devolviendo un número mayor al esperado?

Estoy generando un recibo y estoy usando el objeto Graphics para llamar al método DrawString para imprimir el texto requerido.

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

Esto funciona bien para lo que necesitaba hacer. Siempre supe lo que estaba imprimiendo, por lo que podía recortar manualmente las cuerdas para que quepan en el papel del recibo de 80 mm. Luego tuve que agregar un poco de funcionalidad adicional que haría esto más flexible. El usuario podría pasar en cadenas que se agregarían a la parte inferior.

Como no sabía qué iban a poner, simplemente creé mi propia función de ajuste de palabras que toma una cantidad de caracteres para envolver y la cadena en sí. Para averiguar el número de personajes, estaba haciendo algo como esto:

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

Ahora el ancho me está devolviendo 283, que en mm es de aproximadamente 72, lo que tiene sentido cuando se tienen en cuenta los márgenes en un papel de 80 mm.

Pero el método MeasureString está devolviendo 10.5 en una fuente Courier New 8pt. Entonces, en lugar de cambiar lo que esperaba que fuera 36 - 40, obtengo 26, lo que da como resultado que 2 líneas de texto se conviertan en 3-4.

Las unidades para PrintableArea.Width son 1/100 de pulgada, y la Unidad de Página para el objeto de gráficos es Pantalla (que dice que es típicamente 1/100 de pulgada para impresoras). Entonces, ¿por qué solo estoy recuperando 26?

Respuestas a la pregunta(3)

Su respuesta a la pregunta