I'll be willing to look at this problem.
My approach would be:
1) Calculate character widths using a higher resolution font size. This
could be fixed, say 100 point, or could be based on the printer resolution.
2) When using characters widths, they would then be scaled to the screen
taking care to avoid truncation errors.
3) When calculating positions on the screen, all positions need to change
from whole numbers to fixed point numbers to avoid truncation problems.
4) When creating a font for displaying text, the font height needs to be
carefully chosen.
5) Soft spacing may need to be added to character positions when displaying
text.