How to center text on slanted triangular face?
Here is the script to do that 

import bpy 
import bmesh


def addText(text, location, rotation, mat, fact = .2, extrude = .005): 
    myFont = bpy.data.curves.new(type="FONT", name="myFont")
    fontOb = bpy.data.objects.new(fontObjName, myFont)
    fontOb.data.body = text
    bpy.context.scene.objects.link(fontOb)
    bpy.context.scene.update()
    fontOb.select = True
    bpy.context.scene.objects.active = fontOb
    fontOb.dimensions = (fontOb.dimensions[0] * fact, fontOb.dimensions[1] * fact, fontOb.dimensions[2] * fact)
    fontOb.data.extrude = extrude
    bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY')
    fontOb.location = location
    fontOb.rotation_mode = 'QUATERNION'
    fontOb.active_material = mat
    fontOb.rotation_quaternion = rotation.to_track_quat('Z','Y')
    fontOb.select = False
    return fontOb


def labelObjFaces(obj, mat):    
    bpy.ops.object.mode_set(mode = 'EDIT', toggle = False)
    bm = bmesh.from_edit_mesh(obj.data).copy()
    bpy.ops.object.mode_set(mode = 'OBJECT', toggle = False)
    for f in bm.faces:
        fontOb = addText(str(f.index), f.calc_center_median(), f.normal, mat)
        fontOb.parent = obj

fontObjName = "__fontObj123" 
matName = '__labelMat123'
deleteOldFs = [fObj for fObj in bpy.data.objects if fObj.name.startswith(fontObjName)]

#clean-up
for delF in deleteOldFs:
    bpy.data.objects.remove(delF)
if(matName in bpy.data.materials):
    bpy.data.materials.remove(bpy.data.materials[matName])

mat = bpy.data.materials.new(matName)
mat.diffuse_color = (0.3731134057044983, 0.59569658041000366, 0.3000000715255737)

labelObjFaces(bpy.context.object, mat)


To execute the script.


open the blend file that has your object 
switch to script view
click new button
paste the code 
deselect all the objects (move the mouse to 3d view and press a)
select the object on which you want to put the labels by right clicking on it
click the 'Run Script' button