Вот как я это делаю в одном из моих проектов. Вы можете попробовать это, если ypu вставит код в http://raphaeljs.com/playground.html
// create rectangle
var locx = 300
var locy = 200
paper.rect(locx, locy, 100,100)
// create raw text
element2 = paper.text(locx, locy, "Raphael\n \njust\nrocks")
element2.attr("text-anchor", "start")
// measure the raw text
var bbox = element2.getBBox()
// compute the scale
var scalex = 100/bbox["width"]
var scaley = 100/bbox["height"]
var translation = "s"+ scalex + "," + scaley
// scale the text
element2.transform(translation)
// measure the scaled text
var bbox = element2.getBBox()
// compute the offets of the scaled text
offsetx = locx - bbox["x"]
offsety = locy - bbox["y"]
translation = translation + "T" + offsetx + "," + offsety
// do the final translation
element2.transform(translation)
Более элегантные решения приветствуются.