Por que Graphics.MeasureString () está retornando um número maior que o esperado?

Estou gerando um recibo e estou usando o objeto Graphics para chamar o método DrawString para imprimir o texto necessário.

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

Isso funciona bem para o que eu precisava fazer. Eu sempre soube o que estava imprimindo, para poder aparar manualmente as cordas para que coubesse corretamente em papel de recibo de 80 mm. Então eu tive que adicionar um pouco mais de funcionalidade que tornaria isso mais flexível. O usuário poderia passar seqüências de caracteres que seriam adicionadas ao fundo.

Como eu não sabia o que eles iam colocar, acabei de criar minha própria função de quebra automática de palavras que inclui vários caracteres para envolver e a própria string. Para descobrir o número de personagens, eu estava fazendo algo assim:

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

Agora a largura está me retornando 283, que em mm é cerca de 72, o que faz sentido quando você conta as margens em papel de 80mm.

Mas o método MeasureString está retornando 10.5 em uma fonte Courier New 8pt. Então, em vez de contornar o que eu esperava ser 36-40, estou recebendo 26, resultando em 2 linhas de texto sendo transformadas em 3-4.

As unidades para PrintableArea.Width são 1 / 100th de uma polegada e o PageUnit para o objeto gráfico é Display (que normalmente é 1 / 100th de uma polegada para impressoras). Então, por que estou recebendo apenas 26 de volta?

questionAnswers(3)

yourAnswerToTheQuestion