<font color='black' size='2' face='arial'>
<div> <font size="2"><br>
Hi Warren,<br>
<br>
Have you made some progress with this?<br>
<br>
Well, you might need some font metrics and get the transforms in order to be able to do this. The following is in C but it might be helpful. Probably need to change a few things around but it is a start.<br>
<br>
Eric <br>
<br>
       <br>
//gcc -Wall cairo_text_size.c -o cairo_text_size `pkg-config --cflags --libs cairo` -lm<br>
<br>
#include<cairo.h><br>
#include<cairo-pdf.h><br>
#include<stdio.h><br>
#include<math.h><br>
<br>
static void text_in_box(cairo_t *cr, double center_box_x, double center_box_y, double box_width, double box_height, double rotate, char *string);<br>
<br>
int main()<br>
  {<br>
    double width=600.0;<br>
    double height=600.0;<br>
    char *string1="Center String";<br>
    char *string2="Translate Stringssssss!";<br>
    char *string3="Rotate String";<br>
    char *string4="Joy!!!";<br>
    <br>
    cairo_surface_t *surface=cairo_pdf_surface_create("cairo_test1.pdf", width, height);<br>
    cairo_t *cr=cairo_create(surface);<br>
<br>
    //Paint background.<br>
    cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0);<br>
    cairo_paint(cr);<br>
<br>
    //Draw from the center of surface. Good for testing text and box alignment.<br>
    cairo_translate(cr, width/2.0, height/2.0);<br>
    //Scale the drawing if needed.<br>
    cairo_scale(cr, 1.0, 1.0);<br>
<br>
    //Draw cartesian coordinates.<br>
    cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0);<br>
    cairo_move_to(cr, -width/2.0, 0.0);<br>
    cairo_line_to(cr, width/2.0, 0.0);<br>
    cairo_stroke(cr);<br>
    cairo_move_to(cr, 0.0, -height/2.0);<br>
    cairo_line_to(cr, 0.0, height/2.0);<br>
    cairo_stroke(cr);<br>
<br>
    cairo_select_font_face(cr, "courier", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);<br>
    //Since the font gets scaled to the box the default font size should be fine.<br>
    //cairo_set_font_size(cr, 10.0);<br>
<br>
    //Draw text at center.<br>
    text_in_box(cr, 0.0, 0.0, 350.0, 100.0, 0.0, string1);<br>
<br>
    //Translate text.<br>
    text_in_box(cr, -120.0, -150.0, 300.0, 30.0, 0.0, string2);<br>
<br>
    //Rotate text.<br>
    text_in_box(cr, 150.0, 150.0, 121.0, 52.0, M_PI/4.0, string3);<br>
<br>
    text_in_box(cr, -150.0, 185.0, 121.0, 52.0, -M_PI/4.0, string4);<br>
<br>
    text_in_box(cr, 150.0, -190.0, 225.0, 52.0, -M_PI/4.0, string4);<br>
   <br>
    printf("Output to cairo_test1.pdf\n");<br>
<br>
    cairo_destroy(cr);<br>
    cairo_surface_destroy(surface);<br>
<br>
    return 0;<br>
  }<br>
static void text_in_box(cairo_t *cr, double center_box_x, double center_box_y, double box_width, double box_height, double rotate, char *string)<br>
  {<br>
    double move_x=0.0;<br>
    double move_y=0.0;<br>
    double scale_x=0.0;<br>
    double scale_y=0.0;<br>
    cairo_text_extents_t te;<br>
    cairo_font_extents_t fe;<br>
<br>
    //Get some font metrics.<br>
    cairo_text_extents(cr, string, &te);<br>
    cairo_font_extents(cr, &fe);<br>
    move_x=-te.width/2.0-te.x_bearing;<br>
    move_y=-te.height/2.0-te.y_bearing;<br>
    //Pad the rectangle a little.<br>
    scale_x=-te.width/2.0-te.x_bearing-4.0;<br>
    scale_y=-te.height/2.0-te.y_bearing+fe.descent;<br>
   <br>
    //Order transforms and draw.<br>
    cairo_save(cr);<br>
    cairo_translate(cr, center_box_x, center_box_y);<br>
    cairo_rotate(cr, rotate);<br>
    cairo_scale(cr, box_width/fabs(2.0*move_x), box_height/fabs(2.0*move_y));<br>
    cairo_set_source_rgba(cr, 0.0, 1.0, 0.0, 0.4);<br>
    cairo_rectangle(cr, -fabs(scale_x), -fabs(scale_y), fabs(2.0*scale_x), fabs(2.0*scale_y));<br>
    cairo_fill(cr); <br>
    cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0);<br>
    cairo_move_to(cr, move_x, move_y);<br>
    cairo_show_text(cr, string);<br>
    cairo_restore(cr); <br>
  }<br>
</font><br>
</div>

<div> <br>
</div>
<br>
</font>