Hi,

Thanks Drew you definitely got me on the right track. I have now written a function that will use the PDF component to provide the glyph size and work for any font. I was not sure about the /1000 * font size thing which you got me. Thanks again.

Here is it.
/*
* this function returns the typographic width of a string. Pass the text line and the current font object and then minus it off your right position for right align.
*/

function get_text_width($text_line,$current_font, $font_size)
{ $glyph_array = array();
   $total_item_width = 0;
   $text_array = str_split($text_line,1);
   foreach($text_array as $character)
   {
       $glyph_array[] = ord($character);
   }
   $text_width = $current_font->widthsForGlyphs($glyph_array);
   foreach($text_width as $char_width)
   {
       $total_item_width = $total_item_width + $char_width;
   }
   return ($total_item_width/1000)*$font_size;
}



Regards,

Brent


Brent Robinson wrote:
Excellent Thanks a million!!! I am using Helvetica so will work a treat!

Drew Bertola wrote:
Brent Robinson wrote:
Hi There,

I am having some issues with generating a script to align characters
to the right on the framework pdf component.
This is what I did.

First, I used helvetica and helvetica bold, because they have easily
known widths.  I set up a hash to look up the widths and calculate total
string width using a quick custom function.  Then, I just subtract the
width from my right hand aligned position.  Cheap and dirty, but works
like a champ.  It's all below.

--
Drew

  /*
   * this function returns the typographic width of a string.
   */
  public function width_of($str, $font_key, $pt_size)
  {
    /*
     * get the width of a numeric - used for right justification.
     */
    $wx = 0;
       for ( $i = 0; $i < strlen($str); $i++ )
      {
    $ch = ord(substr($str, $i, 1));
    $wx += self::$char_wx[$font_key][$ch];
      }

    $width = ( $wx / 1000 ) * $pt_size;

    return($width);
  }

  /*
   * This is an array of character widths for a few standard fonts.
   *
   * Included is "h" (helvetica) and "hb" (helvetica-bold).
   *
   * Each element is identified by the ascii decimal value of a
   * character as the key, and the width (wx) of the character as the
   * value.
   *
   * The widths are in thousandths of a point, so you can calculate a
   * characters width as follows:
   *
   *     pt_size_of_font * wx_value / 1000
   */
  public static $char_wx = array("h"  => array("32"  => "278",
                           "33"  => "278",
                           "34"  => "355",
                           "35"  => "556",
                           "36"  => "556",
                           "37"  => "889",
                           "38"  => "667",
                           "39"  => "222",
                           "40"  => "333",
                           "41"  => "333",
                           "42"  => "389",
                           "43"  => "584",
                           "44"  => "278",
                           "45"  => "333",
                           "46"  => "278",
                           "47"  => "278",
                           "48"  => "556",
                           "49"  => "556",
                           "50"  => "556",
                           "51"  => "556",
                           "52"  => "556",
                           "53"  => "556",
                           "54"  => "556",
                           "55"  => "556",
                           "56"  => "556",
                           "57"  => "556",
                           "58"  => "278",
                           "59"  => "278",
                           "60"  => "584",
                           "61"  => "584",
                           "62"  => "584",
                           "63"  => "556",
                           "64"  => "1015",
                           "65"  => "667",
                           "66"  => "667",
                           "67"  => "722",
                           "68"  => "722",
                           "69"  => "667",
                           "70"  => "611",
                           "71"  => "778",
                           "72"  => "722",
                           "73"  => "278",
                           "74"  => "500",
                           "75"  => "667",
                           "76"  => "556",
                           "77"  => "833",
                           "78"  => "722",
                           "79"  => "778",
                           "80"  => "667",
                           "81"  => "778",
                           "82"  => "722",
                           "83"  => "667",
                           "84"  => "611",
                           "85"  => "722",
                           "86"  => "667",
                           "87"  => "944",
                           "88"  => "667",
                           "89"  => "667",
                           "90"  => "611",
                           "91"  => "278",
                           "92"  => "278",
                           "93"  => "278",
                           "94"  => "469",
                           "95"  => "556",
                           "96"  => "222",
                           "97"  => "556",
                           "98"  => "556",
                           "99"  => "500",
                           "100" => "556",
                           "101" => "556",
                           "102" => "278",
                           "103" => "556",
                           "104" => "556",
                           "105" => "222",
                           "106" => "222",
                           "107" => "500",
                           "108" => "222",
                           "109" => "833",
                           "110" => "556",
                           "111" => "556",
                           "112" => "556",
                           "113" => "556",
                           "114" => "333",
                           "115" => "500",
                           "116" => "278",
                           "117" => "556",
                           "118" => "500",
                           "119" => "722",
                           "120" => "500",
                           "121" => "500",
                           "122" => "500",
                           "123" => "334",
                           "124" => "260",
                           "125" => "334",
                           "126" => "584",
                           "161" => "333",
                           "162" => "556",
                           "163" => "556",
                           "164" => "167",
                           "165" => "556",
                           "166" => "556",
                           "167" => "556",
                           "168" => "556",
                           "169" => "191",
                           "170" => "333",
                           "171" => "556",
                           "172" => "333",
                           "173" => "333",
                           "174" => "500",
                           "175" => "500",
                           "177" => "556",
                           "178" => "556",
                           "179" => "556",
                           "180" => "278",
                           "182" => "537",
                           "183" => "350",
                           "184" => "222",
                           "185" => "333",
                           "186" => "333",
                           "187" => "556",
                           "188" => "1000",
                           "189" => "1000",
                           "191" => "611",
                           "193" => "333",
                           "194" => "333",
                           "195" => "333",
                           "196" => "333",
                           "197" => "333",
                           "198" => "333",
                           "199" => "333",
                           "200" => "333",
                           "202" => "333",
                           "203" => "333",
                           "205" => "333",
                           "206" => "333",
                           "207" => "333",
                           "208" => "1000",
                           "225" => "1000",
                           "227" => "370",
                           "232" => "556",
                           "233" => "778",
                           "234" => "1000",
                           "235" => "365",
                           "241" => "889",
                           "245" => "278",
                           "248" => "222",
                           "249" => "611",
                           "250" => "944",
                           "251" => "611"),
                 "hb" => array("32"  => "278",
                           "33"  => "333",
                           "34"  => "474",
                           "35"  => "556",
                           "36"  => "556",
                           "37"  => "889",
                           "38"  => "722",
                           "39"  => "278",
                           "40"  => "333",
                           "41"  => "333",
                           "42"  => "389",
                           "43"  => "584",
                           "44"  => "278",
                           "45"  => "333",
                           "46"  => "278",
                           "47"  => "278",
                           "48"  => "556",
                           "49"  => "556",
                           "50"  => "556",
                           "51"  => "556",
                           "52"  => "556",
                           "53"  => "556",
                           "54"  => "556",
                           "55"  => "556",
                           "56"  => "556",
                           "57"  => "556",
                           "58"  => "333",
                           "59"  => "333",
                           "60"  => "584",
                           "61"  => "584",
                           "62"  => "584",
                           "63"  => "611",
                           "64"  => "975",
                           "65"  => "722",
                           "66"  => "722",
                           "67"  => "722",
                           "68"  => "722",
                           "69"  => "667",
                           "70"  => "611",
                           "71"  => "778",
                           "72"  => "722",
                           "73"  => "278",
                           "74"  => "556",
                           "75"  => "722",
                           "76"  => "611",
                           "77"  => "833",
                           "78"  => "722",
                           "79"  => "778",
                           "80"  => "667",
                           "81"  => "778",
                           "82"  => "722",
                           "83"  => "667",
                           "84"  => "611",
                           "85"  => "722",
                           "86"  => "667",
                           "87"  => "944",
                           "88"  => "667",
                           "89"  => "667",
                           "90"  => "611",
                           "91"  => "333",
                           "92"  => "278",
                           "93"  => "333",
                           "94"  => "584",
                           "95"  => "556",
                           "96"  => "278",
                           "97"  => "556",
                           "98"  => "611",
                           "99"  => "556",
                           "100" => "611",
                           "101" => "556",
                           "102" => "333",
                           "103" => "611",
                           "104" => "611",
                           "105" => "278",
                           "106" => "278",
                           "107" => "556",
                           "108" => "278",
                           "109" => "889",
                           "110" => "611",
                           "111" => "611",
                           "112" => "611",
                           "113" => "611",
                           "114" => "389",
                           "115" => "556",
                           "116" => "333",
                           "117" => "611",
                           "118" => "556",
                           "119" => "778",
                           "120" => "556",
                           "121" => "556",
                           "122" => "500",
                           "123" => "389",
                           "124" => "280",
                           "125" => "389",
                           "126" => "584",
                           "161" => "333",
                           "162" => "556",
                           "163" => "556",
                           "164" => "167",
                           "165" => "556",
                           "166" => "556",
                           "167" => "556",
                           "168" => "556",
                           "169" => "238",
                           "170" => "500",
                           "171" => "556",
                           "172" => "333",
                           "173" => "333",
                           "174" => "611",
                           "175" => "611",
                           "177" => "556",
                           "178" => "556",
                           "179" => "556",
                           "180" => "278",
                           "182" => "556",
                           "183" => "350",
                           "184" => "278",
                           "185" => "500",
                           "186" => "500",
                           "187" => "556",
                           "188" => "1000",
                           "189" => "1000",
                           "191" => "611",
                           "193" => "333",
                           "194" => "333",
                           "195" => "333",
                           "196" => "333",
                           "197" => "333",
                           "198" => "333",
                           "199" => "333",
                           "200" => "333",
                           "202" => "333",
                           "203" => "333",
                           "205" => "333",
                           "206" => "333",
                           "207" => "333",
                           "208" => "1000",
                           "225" => "1000",
                           "227" => "370",
                           "232" => "611",
                           "233" => "778",
                           "234" => "1000",
                           "235" => "365",
                           "241" => "889",
                           "245" => "278",
                           "248" => "278",
                           "249" => "611",
                           "250" => "944",
                           "251" => "611"));


--
Brent Robinson
Director

T: 0870-760-1514
F: 0870-760-1514
E: [EMAIL PROTECTED]
W: www.arquila.com


This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to which they
are addressed. If you have received this email in error please notify
the system manager. Please note that any views or opinions presented in
this email are solely those of the author and do not necessarily
represent those of the company. Finally, the recipient should check
this email and any attachments for the presence of viruses. The sender
accepts no liability for any damage caused by any virus transmitted by
this email.

Reply via email to