textRendering = "geometricPrecision" doesn't do much to improve the result. You'll have better result using a 3rd party library if it is not covenient to pre-render the text to bitmap. For example, opentype.js.