示例#1
0
 /**
  * Returns a number between 0 and 1 inclusive that indicates the percentage
  * of characters in the string which are covered by glyphs in this font.
  *
  * Since no one font will contain glyphs for the entire Unicode character
  * range, this method can be used to help locate a suitable font when the
  * actual contents of the string are not known.
  *
  * Note that some fonts lie about the characters they support. Additionally,
  * fonts don't usually contain glyphs for control characters such as tabs
  * and line breaks, so it is rare that you will get back a full 1.0 score.
  * The resulting value should be considered informational only.
  *
  * @param string $string
  * @param string $charEncoding (optional) Character encoding of source text.
  *   If omitted, uses 'current locale'.
  * @return float
  */
 public function getCoveredPercentage($string, $charEncoding = '')
 {
     /* Convert the string to UTF-16BE encoding so we can match the string's
      * character codes to those found in the cmap.
      */
     if ($charEncoding != 'UTF-16BE') {
         $string = iconv($charEncoding, 'UTF-16BE', $string);
     }
     $charCount = iconv_strlen($string, 'UTF-16BE');
     if ($charCount == 0) {
         return 0;
     }
     /* Fetch the covered character code list from the font's cmap.
      */
     $coveredCharacters = $this->cmap->getCoveredCharacters();
     /* Calculate the score by doing a lookup for each character.
      */
     $score = 0;
     $maxIndex = strlen($string);
     for ($i = 0; $i < $maxIndex; $i++) {
         /**
          * @todo Properly handle characters encoded as surrogate pairs.
          */
         $charCode = ord($string[$i]) << 8 | ord($string[++$i]);
         /* This could probably be optimized a bit with a binary search...
          */
         if (in_array($charCode, $coveredCharacters)) {
             $score++;
         }
     }
     return $score / $charCount;
 }
 /**
  * Object constructor
  */
 public function __construct()
 {
     parent::__construct();
     /* Object properties */
     $this->_fontType = Zend_Pdf_Font::TYPE_STANDARD;
     /* The font names are stored internally as Unicode UTF-16BE-encoded
      * strings. Since this information is static, save unnecessary trips
      * through iconv() and just use pre-encoded hexidecimal strings.
      */
     $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] = "Copyrigh" . "t (c) 19" . "85, 1987" . ", 1989, " . "1990, 19" . "97 Adobe" . " Systems" . " Incorpo" . "rated.  " . "All Righ" . "ts Reser" . "ved.Helv" . "etica is" . " a trade" . "mark of " . "Linotype" . "-Hell AG" . " and/or " . "its subs" . "idiaries" . ".";
     $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] = "Helvetic" . "a";
     $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] = "Bold";
     $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] = "43052";
     $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] = "Helvetic" . "a-Bold B" . "old";
     $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] = "002.000";
     $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] = "Helvetic" . "a-Bold";
     $this->_isBold = true;
     $this->_isItalic = false;
     $this->_isMonospaced = false;
     $this->_underlinePosition = -100;
     $this->_underlineThickness = 50;
     $this->_strikePosition = 225;
     $this->_strikeThickness = 50;
     $this->_unitsPerEm = 1000;
     $this->_ascent = 718;
     $this->_descent = -207;
     $this->_lineGap = 275;
     /* The glyph numbers assigned here are synthetic; they do not match the
      * actual glyph numbers used by the font. This is not a big deal though
      * since this data never makes it to the PDF file. It is only used
      * internally for layout calculations.
      */
     $this->_glyphWidths = array(0x0 => 0x1f4, 0x1 => 0x116, 0x2 => 0x14d, 0x3 => 0x1da, 0x4 => 0x22c, 0x5 => 0x22c, 0x6 => 0x379, 0x7 => 0x2d2, 0x8 => 0x116, 0x9 => 0x14d, 0xa => 0x14d, 0xb => 0x185, 0xc => 0x248, 0xd => 0x116, 0xe => 0x14d, 0xf => 0x116, 0x10 => 0x116, 0x11 => 0x22c, 0x12 => 0x22c, 0x13 => 0x22c, 0x14 => 0x22c, 0x15 => 0x22c, 0x16 => 0x22c, 0x17 => 0x22c, 0x18 => 0x22c, 0x19 => 0x22c, 0x1a => 0x22c, 0x1b => 0x14d, 0x1c => 0x14d, 0x1d => 0x248, 0x1e => 0x248, 0x1f => 0x248, 0x20 => 0x263, 0x21 => 0x3cf, 0x22 => 0x2d2, 0x23 => 0x2d2, 0x24 => 0x2d2, 0x25 => 0x2d2, 0x26 => 0x29b, 0x27 => 0x263, 0x28 => 0x30a, 0x29 => 0x2d2, 0x2a => 0x116, 0x2b => 0x22c, 0x2c => 0x2d2, 0x2d => 0x263, 0x2e => 0x341, 0x2f => 0x2d2, 0x30 => 0x30a, 0x31 => 0x29b, 0x32 => 0x30a, 0x33 => 0x2d2, 0x34 => 0x29b, 0x35 => 0x263, 0x36 => 0x2d2, 0x37 => 0x29b, 0x38 => 0x3b0, 0x39 => 0x29b, 0x3a => 0x29b, 0x3b => 0x263, 0x3c => 0x14d, 0x3d => 0x116, 0x3e => 0x14d, 0x3f => 0x248, 0x40 => 0x22c, 0x41 => 0x116, 0x42 => 0x22c, 0x43 => 0x263, 0x44 => 0x22c, 0x45 => 0x263, 0x46 => 0x22c, 0x47 => 0x14d, 0x48 => 0x263, 0x49 => 0x263, 0x4a => 0x116, 0x4b => 0x116, 0x4c => 0x22c, 0x4d => 0x116, 0x4e => 0x379, 0x4f => 0x263, 0x50 => 0x263, 0x51 => 0x263, 0x52 => 0x263, 0x53 => 0x185, 0x54 => 0x22c, 0x55 => 0x14d, 0x56 => 0x263, 0x57 => 0x22c, 0x58 => 0x30a, 0x59 => 0x22c, 0x5a => 0x22c, 0x5b => 0x1f4, 0x5c => 0x185, 0x5d => 0x118, 0x5e => 0x185, 0x5f => 0x248, 0x60 => 0x14d, 0x61 => 0x22c, 0x62 => 0x22c, 0x63 => 0xa7, 0x64 => 0x22c, 0x65 => 0x22c, 0x66 => 0x22c, 0x67 => 0x22c, 0x68 => 0xee, 0x69 => 0x1f4, 0x6a => 0x22c, 0x6b => 0x14d, 0x6c => 0x14d, 0x6d => 0x263, 0x6e => 0x263, 0x6f => 0x22c, 0x70 => 0x22c, 0x71 => 0x22c, 0x72 => 0x116, 0x73 => 0x22c, 0x74 => 0x15e, 0x75 => 0x116, 0x76 => 0x1f4, 0x77 => 0x1f4, 0x78 => 0x22c, 0x79 => 0x3e8, 0x7a => 0x3e8, 0x7b => 0x263, 0x7c => 0x14d, 0x7d => 0x14d, 0x7e => 0x14d, 0x7f => 0x14d, 0x80 => 0x14d, 0x81 => 0x14d, 0x82 => 0x14d, 0x83 => 0x14d, 0x84 => 0x14d, 0x85 => 0x14d, 0x86 => 0x14d, 0x87 => 0x14d, 0x88 => 0x14d, 0x89 => 0x3e8, 0x8a => 0x3e8, 0x8b => 0x172, 0x8c => 0x263, 0x8d => 0x30a, 0x8e => 0x3e8, 0x8f => 0x16d, 0x90 => 0x379, 0x91 => 0x116, 0x92 => 0x116, 0x93 => 0x263, 0x94 => 0x3b0, 0x95 => 0x263, 0x96 => 0x116, 0x97 => 0x22c, 0x98 => 0x22c, 0x99 => 0x263, 0x9a => 0x22c, 0x9b => 0x29b, 0x9c => 0x248, 0x9d => 0x29b, 0x9e => 0x2d2, 0x9f => 0x22c, 0xa0 => 0x2d2, 0xa1 => 0x22c, 0xa2 => 0x22c, 0xa3 => 0x22c, 0xa4 => 0x2d2, 0xa5 => 0x2d2, 0xa6 => 0x22c, 0xa7 => 0x2d2, 0xa8 => 0x263, 0xa9 => 0x29b, 0xaa => 0x2d2, 0xab => 0xfa, 0xac => 0x2e1, 0xad => 0x29b, 0xae => 0x22c, 0xaf => 0x22c, 0xb0 => 0x2d2, 0xb1 => 0x116, 0xb2 => 0x22c, 0xb3 => 0x263, 0xb4 => 0x2d2, 0xb5 => 0x22c, 0xb6 => 0x29b, 0xb7 => 0x22c, 0xb8 => 0x22c, 0xb9 => 0x116, 0xba => 0x1ee, 0xbb => 0x2d2, 0xbc => 0x30a, 0xbd => 0x263, 0xbe => 0x22c, 0xbf => 0x2d2, 0xc0 => 0x185, 0xc1 => 0x22c, 0xc2 => 0x263, 0xc3 => 0x29b, 0xc4 => 0x30a, 0xc5 => 0x2d2, 0xc6 => 0x29b, 0xc7 => 0x2e7, 0xc8 => 0x2d2, 0xc9 => 0x263, 0xca => 0x14d, 0xcb => 0x30a, 0xcc => 0x2d2, 0xcd => 0x2d2, 0xce => 0x248, 0xcf => 0x263, 0xd0 => 0x263, 0xd1 => 0x1ee, 0xd2 => 0x22c, 0xd3 => 0x2d2, 0xd4 => 0x116, 0xd5 => 0x29b, 0xd6 => 0x22c, 0xd7 => 0x22c, 0xd8 => 0x22c, 0xd9 => 0x263, 0xda => 0x263, 0xdb => 0x2d2, 0xdc => 0x116, 0xdd => 0x248, 0xde => 0x118, 0xdf => 0x2e1, 0xe0 => 0x30a, 0xe1 => 0x116, 0xe2 => 0x258, 0xe3 => 0x29b, 0xe4 => 0x185, 0xe5 => 0x263, 0xe6 => 0x263, 0xe7 => 0x263, 0xe8 => 0x225, 0xe9 => 0x2d2, 0xea => 0x2d2, 0xeb => 0x116, 0xec => 0x185, 0xed => 0x22c, 0xee => 0x2d2, 0xef => 0x2d2, 0xf0 => 0x2d2, 0xf1 => 0x22c, 0xf2 => 0x1f4, 0xf3 => 0x116, 0xf4 => 0x30a, 0xf5 => 0x263, 0xf6 => 0x22c, 0xf7 => 0x22c, 0xf8 => 0x116, 0xf9 => 0x30a, 0xfa => 0x2d2, 0xfb => 0x264, 0xfc => 0x263, 0xfd => 0x14d, 0xfe => 0x30a, 0xff => 0x263, 0x100 => 0x116, 0x101 => 0x263, 0x102 => 0x29b, 0x103 => 0x263, 0x104 => 0x342, 0x105 => 0x29b, 0x106 => 0x190, 0x107 => 0x2d2, 0x108 => 0x263, 0x109 => 0x3e8, 0x10a => 0x22c, 0x10b => 0x116, 0x10c => 0x116, 0x10d => 0x263, 0x10e => 0x342, 0x10f => 0x225, 0x110 => 0x263, 0x111 => 0x263, 0x112 => 0x2d2, 0x113 => 0x29b, 0x114 => 0x22c, 0x115 => 0x263, 0x116 => 0x342, 0x117 => 0x29b, 0x118 => 0x29b, 0x119 => 0x30a, 0x11a => 0x190, 0x11b => 0x263, 0x11c => 0x2d2, 0x11d => 0x263, 0x11e => 0x225, 0x11f => 0x2d2, 0x120 => 0x185, 0x121 => 0x2d2, 0x122 => 0x263, 0x123 => 0x2d2, 0x124 => 0x263, 0x125 => 0x2d2, 0x126 => 0x2d2, 0x127 => 0x2d2, 0x128 => 0x30a, 0x129 => 0x1f4, 0x12a => 0x29b, 0x12b => 0x116, 0x12c => 0x22c, 0x12d => 0x248, 0x12e => 0x116, 0x12f => 0x263, 0x130 => 0x14d, 0x131 => 0x248, 0x132 => 0x263, 0x133 => 0x263, 0x134 => 0x225, 0x135 => 0x263, 0x136 => 0x263, 0x137 => 0x1f4, 0x138 => 0x263, 0x139 => 0x14d, 0x13a => 0x116, 0x13b => 0x22c);
     $this->_glyphMaxIndex = 315;
     /* The cmap table is similarly synthesized.
      */
     $cmapData = array(0x20 => 0x1, 0x21 => 0x2, 0x22 => 0x3, 0x23 => 0x4, 0x24 => 0x5, 0x25 => 0x6, 0x26 => 0x7, 0x2019 => 0x8, 0x28 => 0x9, 0x29 => 0xa, 0x2a => 0xb, 0x2b => 0xc, 0x2c => 0xd, 0x2d => 0xe, 0x2e => 0xf, 0x2f => 0x10, 0x30 => 0x11, 0x31 => 0x12, 0x32 => 0x13, 0x33 => 0x14, 0x34 => 0x15, 0x35 => 0x16, 0x36 => 0x17, 0x37 => 0x18, 0x38 => 0x19, 0x39 => 0x1a, 0x3a => 0x1b, 0x3b => 0x1c, 0x3c => 0x1d, 0x3d => 0x1e, 0x3e => 0x1f, 0x3f => 0x20, 0x40 => 0x21, 0x41 => 0x22, 0x42 => 0x23, 0x43 => 0x24, 0x44 => 0x25, 0x45 => 0x26, 0x46 => 0x27, 0x47 => 0x28, 0x48 => 0x29, 0x49 => 0x2a, 0x4a => 0x2b, 0x4b => 0x2c, 0x4c => 0x2d, 0x4d => 0x2e, 0x4e => 0x2f, 0x4f => 0x30, 0x50 => 0x31, 0x51 => 0x32, 0x52 => 0x33, 0x53 => 0x34, 0x54 => 0x35, 0x55 => 0x36, 0x56 => 0x37, 0x57 => 0x38, 0x58 => 0x39, 0x59 => 0x3a, 0x5a => 0x3b, 0x5b => 0x3c, 0x5c => 0x3d, 0x5d => 0x3e, 0x5e => 0x3f, 0x5f => 0x40, 0x2018 => 0x41, 0x61 => 0x42, 0x62 => 0x43, 0x63 => 0x44, 0x64 => 0x45, 0x65 => 0x46, 0x66 => 0x47, 0x67 => 0x48, 0x68 => 0x49, 0x69 => 0x4a, 0x6a => 0x4b, 0x6b => 0x4c, 0x6c => 0x4d, 0x6d => 0x4e, 0x6e => 0x4f, 0x6f => 0x50, 0x70 => 0x51, 0x71 => 0x52, 0x72 => 0x53, 0x73 => 0x54, 0x74 => 0x55, 0x75 => 0x56, 0x76 => 0x57, 0x77 => 0x58, 0x78 => 0x59, 0x79 => 0x5a, 0x7a => 0x5b, 0x7b => 0x5c, 0x7c => 0x5d, 0x7d => 0x5e, 0x7e => 0x5f, 0xa1 => 0x60, 0xa2 => 0x61, 0xa3 => 0x62, 0x2044 => 0x63, 0xa5 => 0x64, 0x192 => 0x65, 0xa7 => 0x66, 0xa4 => 0x67, 0x27 => 0x68, 0x201c => 0x69, 0xab => 0x6a, 0x2039 => 0x6b, 0x203a => 0x6c, 0xfb01 => 0x6d, 0xfb02 => 0x6e, 0x2013 => 0x6f, 0x2020 => 0x70, 0x2021 => 0x71, 0xb7 => 0x72, 0xb6 => 0x73, 0x2022 => 0x74, 0x201a => 0x75, 0x201e => 0x76, 0x201d => 0x77, 0xbb => 0x78, 0x2026 => 0x79, 0x2030 => 0x7a, 0xbf => 0x7b, 0x60 => 0x7c, 0xb4 => 0x7d, 0x2c6 => 0x7e, 0x2dc => 0x7f, 0xaf => 0x80, 0x2d8 => 0x81, 0x2d9 => 0x82, 0xa8 => 0x83, 0x2da => 0x84, 0xb8 => 0x85, 0x2dd => 0x86, 0x2db => 0x87, 0x2c7 => 0x88, 0x2014 => 0x89, 0xc6 => 0x8a, 0xaa => 0x8b, 0x141 => 0x8c, 0xd8 => 0x8d, 0x152 => 0x8e, 0xba => 0x8f, 0xe6 => 0x90, 0x131 => 0x91, 0x142 => 0x92, 0xf8 => 0x93, 0x153 => 0x94, 0xdf => 0x95, 0xcf => 0x96, 0xe9 => 0x97, 0x103 => 0x98, 0x171 => 0x99, 0x11b => 0x9a, 0x178 => 0x9b, 0xf7 => 0x9c, 0xdd => 0x9d, 0xc2 => 0x9e, 0xe1 => 0x9f, 0xdb => 0xa0, 0xfd => 0xa1, 0x219 => 0xa2, 0xea => 0xa3, 0x16e => 0xa4, 0xdc => 0xa5, 0x105 => 0xa6, 0xda => 0xa7, 0x173 => 0xa8, 0xcb => 0xa9, 0x110 => 0xaa, 0xf6c3 => 0xab, 0xa9 => 0xac, 0x112 => 0xad, 0x10d => 0xae, 0xe5 => 0xaf, 0x145 => 0xb0, 0x13a => 0xb1, 0xe0 => 0xb2, 0x162 => 0xb3, 0x106 => 0xb4, 0xe3 => 0xb5, 0x116 => 0xb6, 0x161 => 0xb7, 0x15f => 0xb8, 0xed => 0xb9, 0x25ca => 0xba, 0x158 => 0xbb, 0x122 => 0xbc, 0xfb => 0xbd, 0xe2 => 0xbe, 0x100 => 0xbf, 0x159 => 0xc0, 0xe7 => 0xc1, 0x17b => 0xc2, 0xde => 0xc3, 0x14c => 0xc4, 0x154 => 0xc5, 0x15a => 0xc6, 0x10f => 0xc7, 0x16a => 0xc8, 0x16f => 0xc9, 0xb3 => 0xca, 0xd2 => 0xcb, 0xc0 => 0xcc, 0x102 => 0xcd, 0xd7 => 0xce, 0xfa => 0xcf, 0x164 => 0xd0, 0x2202 => 0xd1, 0xff => 0xd2, 0x143 => 0xd3, 0xee => 0xd4, 0xca => 0xd5, 0xe4 => 0xd6, 0xeb => 0xd7, 0x107 => 0xd8, 0x144 => 0xd9, 0x16b => 0xda, 0x147 => 0xdb, 0xcd => 0xdc, 0xb1 => 0xdd, 0xa6 => 0xde, 0xae => 0xdf, 0x11e => 0xe0, 0x130 => 0xe1, 0x2211 => 0xe2, 0xc8 => 0xe3, 0x155 => 0xe4, 0x14d => 0xe5, 0x179 => 0xe6, 0x17d => 0xe7, 0x2265 => 0xe8, 0xd0 => 0xe9, 0xc7 => 0xea, 0x13c => 0xeb, 0x165 => 0xec, 0x119 => 0xed, 0x172 => 0xee, 0xc1 => 0xef, 0xc4 => 0xf0, 0xe8 => 0xf1, 0x17a => 0xf2, 0x12f => 0xf3, 0xd3 => 0xf4, 0xf3 => 0xf5, 0x101 => 0xf6, 0x15b => 0xf7, 0xef => 0xf8, 0xd4 => 0xf9, 0xd9 => 0xfa, 0x2206 => 0xfb, 0xfe => 0xfc, 0xb2 => 0xfd, 0xd6 => 0xfe, 0xb5 => 0xff, 0xec => 0x100, 0x151 => 0x101, 0x118 => 0x102, 0x111 => 0x103, 0xbe => 0x104, 0x15e => 0x105, 0x13e => 0x106, 0x136 => 0x107, 0x139 => 0x108, 0x2122 => 0x109, 0x117 => 0x10a, 0xcc => 0x10b, 0x12a => 0x10c, 0x13d => 0x10d, 0xbd => 0x10e, 0x2264 => 0x10f, 0xf4 => 0x110, 0xf1 => 0x111, 0x170 => 0x112, 0xc9 => 0x113, 0x113 => 0x114, 0x11f => 0x115, 0xbc => 0x116, 0x160 => 0x117, 0x218 => 0x118, 0x150 => 0x119, 0xb0 => 0x11a, 0xf2 => 0x11b, 0x10c => 0x11c, 0xf9 => 0x11d, 0x221a => 0x11e, 0x10e => 0x11f, 0x157 => 0x120, 0xd1 => 0x121, 0xf5 => 0x122, 0x156 => 0x123, 0x13b => 0x124, 0xc3 => 0x125, 0x104 => 0x126, 0xc5 => 0x127, 0xd5 => 0x128, 0x17c => 0x129, 0x11a => 0x12a, 0x12e => 0x12b, 0x137 => 0x12c, 0x2212 => 0x12d, 0xce => 0x12e, 0x148 => 0x12f, 0x163 => 0x130, 0xac => 0x131, 0xf6 => 0x132, 0xfc => 0x133, 0x2260 => 0x134, 0x123 => 0x135, 0xf0 => 0x136, 0x17e => 0x137, 0x146 => 0x138, 0xb9 => 0x139, 0x12b => 0x13a, 0x20ac => 0x13b);
     $this->cmap = Zend_Pdf_Cmap::cmapWithTypeData(Zend_Pdf_Cmap::TYPE_BYTE_ENCODING_STATIC, $cmapData);
     /* Resource dictionary */
     /* The resource dictionary for the standard fonts is sparse because PDF
      * viewers already have all of the metrics data. We only need to provide
      * the font name and encoding method.
      */
     $this->_resource->BaseFont = new Zend_Pdf_Element_Name('Helvetica-Bold');
     $this->_resource->Encoding = new Zend_Pdf_Element_Name('WinAnsiEncoding');
 }
示例#3
0
 /**
  * Parses the OpenType cmap (Character to Glyph Mapping) table.
  *
  * The cmap table provides the maps from character codes to font glyphs.
  * There are usually at least two character maps in a font: Microsoft Unicode
  * and Macintosh Roman. For very complex fonts, there may also be mappings
  * for the characters in the Unicode Surrogates Area, which are UCS-4
  * characters.
  *
  * @todo Need to rework the selection logic for picking a subtable. We should
  *   have an explicit list of preferences, followed by a list of those that
  *   are tolerable. Most specifically, since everything above this layer deals
  *   in Unicode, we need to be sure to only accept format 0 MacRoman tables.
  *
  * @throws Zend_Pdf_Exception
  */
 protected function _parseCmapTable()
 {
     $this->_jumpToTable('cmap');
     $baseOffset = $this->_tableDirectory['cmap']['offset'];
     /* We only understand version 0 tables.
      */
     $tableVersion = $this->readUInt(2);
     if ($tableVersion != 0) {
         throw new Zend_Pdf_Exception("Unable to read version {$tableVersion} table", Zend_Pdf_Exception::DONT_UNDERSTAND_TABLE_VERSION);
     }
     $this->_debugLog('Version %d table', $tableVersion);
     $subtableCount = $this->readUInt(2);
     $this->_debugLog('%d subtables', $subtableCount);
     /* Like the name table, there may be many different encoding subtables
      * present. Ideally, we are looking for an acceptable Unicode table.
      */
     $subtables = array();
     for ($subtableIndex = 0; $subtableIndex < $subtableCount; $subtableIndex++) {
         $platformID = $this->readUInt(2);
         $encodingID = $this->readUInt(2);
         if (!($platformID == 0 && $encodingID == 3 || $platformID == 0 && $encodingID == 0 || $platformID == 3 && $encodingID == 1 || $platformID == 1 && $encodingID == 0)) {
             $this->_debugLog('Unsupported encoding: platformID: %d; encodingID: %d; skipping', $platformID, $encodingID);
             $this->skipBytes(4);
             continue;
         }
         $subtableOffset = $this->readUInt(4);
         if ($subtableOffset < 0) {
             // Sanity check for 4-byte unsigned on 32-bit platform
             $this->_debugLog('Offset 0x%x out of range for platformID: %d; skipping', $subtableOffset, $platformID);
             continue;
         }
         $this->_debugLog('Found subtable; platformID: %d; encodingID: %d; offset: 0x%x (0x%x)', $platformID, $encodingID, $baseOffset + $subtableOffset, $subtableOffset);
         $subtables[$platformID][$encodingID][] = $subtableOffset;
     }
     /* In preferred order, find a subtable to use.
      */
     $offsets = array();
     /* Unicode 2.0 or later semantics
      */
     if (isset($subtables[0][3])) {
         foreach ($subtables[0][3] as $offset) {
             $offsets[] = $offset;
         }
     }
     /* Unicode default semantics
      */
     if (isset($subtables[0][0])) {
         foreach ($subtables[0][0] as $offset) {
             $offsets[] = $offset;
         }
     }
     /* Microsoft Unicode
      */
     if (isset($subtables[3][1])) {
         foreach ($subtables[3][1] as $offset) {
             $offsets[] = $offset;
         }
     }
     /* Mac Roman.
      */
     if (isset($subtables[1][0])) {
         foreach ($subtables[1][0] as $offset) {
             $offsets[] = $offset;
         }
     }
     $cmapType = -1;
     foreach ($offsets as $offset) {
         $cmapOffset = $baseOffset + $offset;
         $this->moveToOffset($cmapOffset);
         $format = $this->readUInt(2);
         $language = -1;
         switch ($format) {
             case 0x0:
                 $cmapLength = $this->readUInt(2);
                 $language = $this->readUInt(2);
                 if ($language != 0) {
                     $this->_debugLog('Type 0 cmap tables must be language-independent;' . ' language: %d; skipping', $language);
                     continue;
                 }
                 break;
             case 0x4:
                 // break intentionally omitted
             // break intentionally omitted
             case 0x6:
                 $cmapLength = $this->readUInt(2);
                 $language = $this->readUInt(2);
                 if ($language != 0) {
                     $this->_debugLog('Warning: cmap tables must be language-independent - this font' . ' may not work properly; language: %d', $language);
                 }
                 break;
             case 0x2:
                 // break intentionally omitted
             // break intentionally omitted
             case 0x8:
                 // break intentionally omitted
             // break intentionally omitted
             case 0xa:
                 // break intentionally omitted
             // break intentionally omitted
             case 0xc:
                 $this->_debugLog('Format: 0x%x currently unsupported; skipping', $format);
                 continue;
                 //$this->skipBytes(2);
                 //$cmapLength = $this->readUInt(4);
                 //$language = $this->readUInt(4);
                 //if ($language != 0) {
                 //    $this->_debugLog('Warning: cmap tables must be language-independent - this font'
                 //                     . ' may not work properly; language: %d', $language);
                 //}
                 //break;
             //$this->skipBytes(2);
             //$cmapLength = $this->readUInt(4);
             //$language = $this->readUInt(4);
             //if ($language != 0) {
             //    $this->_debugLog('Warning: cmap tables must be language-independent - this font'
             //                     . ' may not work properly; language: %d', $language);
             //}
             //break;
             default:
                 $this->_debugLog('Unknown subtable format: 0x%x; skipping', $format);
                 continue;
         }
         $cmapType = $format;
         break;
     }
     if ($cmapType == -1) {
         throw new Zend_Pdf_Exception('Unable to find usable cmap table', Zend_Pdf_Exception::CANT_FIND_GOOD_CMAP);
     }
     /* Now extract the subtable data and create a Zend_Pdf_FontCmap object.
      */
     $this->_debugLog('Using cmap type %d; offset: 0x%x; length: %d', $cmapType, $cmapOffset, $cmapLength);
     $this->moveToOffset($cmapOffset);
     $cmapData = $this->readBytes($cmapLength);
     $this->cmap = Zend_Pdf_Cmap::cmapWithTypeData($cmapType, $cmapData);
 }
示例#4
0
    /**
     * Object constructor
     */
    public function __construct()
    {
        parent::__construct();


        /* Object properties */

        /* The font names are stored internally as Unicode UTF-16BE-encoded
         * strings. Since this information is static, save unnecessary trips
         * through iconv() and just use pre-encoded hexidecimal strings.
         */
        $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] =
          "\x00\x43\x00\x6f\x00\x70\x00\x79\x00\x72\x00\x69\x00\x67\x00\x68\x00"
          . "\x74\x00\x20\x00\x28\x00\x63\x00\x29\x00\x20\x00\x31\x00\x39\x00"
          . "\x38\x00\x35\x00\x2c\x00\x20\x00\x31\x00\x39\x00\x38\x00\x37\x00"
          . "\x2c\x00\x20\x00\x31\x00\x39\x00\x38\x00\x39\x00\x2c\x00\x20\x00"
          . "\x31\x00\x39\x00\x39\x00\x30\x00\x2c\x00\x20\x00\x31\x00\x39\x00"
          . "\x39\x00\x33\x00\x2c\x00\x20\x00\x31\x00\x39\x00\x39\x00\x37\x00"
          . "\x20\x00\x41\x00\x64\x00\x6f\x00\x62\x00\x65\x00\x20\x00\x53\x00"
          . "\x79\x00\x73\x00\x74\x00\x65\x00\x6d\x00\x73\x00\x20\x00\x49\x00"
          . "\x6e\x00\x63\x00\x6f\x00\x72\x00\x70\x00\x6f\x00\x72\x00\x61\x00"
          . "\x74\x00\x65\x00\x64\x00\x2e\x00\x20\x00\x20\x00\x41\x00\x6c\x00"
          . "\x6c\x00\x20\x00\x52\x00\x69\x00\x67\x00\x68\x00\x74\x00\x73\x00"
          . "\x20\x00\x52\x00\x65\x00\x73\x00\x65\x00\x72\x00\x76\x00\x65\x00"
          . "\x64\x00\x2e\x00\x54\x00\x69\x00\x6d\x00\x65\x00\x73\x00\x20\x00"
          . "\x69\x00\x73\x00\x20\x00\x61\x00\x20\x00\x74\x00\x72\x00\x61\x00"
          . "\x64\x00\x65\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x20\x00\x6f\x00"
          . "\x66\x00\x20\x00\x4c\x00\x69\x00\x6e\x00\x6f\x00\x74\x00\x79\x00"
          . "\x70\x00\x65\x00\x2d\x00\x48\x00\x65\x00\x6c\x00\x6c\x00\x20\x00"
          . "\x41\x00\x47\x00\x20\x00\x61\x00\x6e\x00\x64\x00\x2f\x00\x6f\x00"
          . "\x72\x00\x20\x00\x69\x00\x74\x00\x73\x00\x20\x00\x73\x00\x75\x00"
          . "\x62\x00\x73\x00\x69\x00\x64\x00\x69\x00\x61\x00\x72\x00\x69\x00"
          . "\x65\x00\x73\x00\x2e";
        $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] =
          "\x00\x54\x00\x69\x00\x6d\x00\x65\x00\x73";
        $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] =
          "\x00\x42\x00\x6f\x00\x6c\x00\x64";
        $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] =
          "\x00\x34\x00\x33\x00\x30\x00\x36\x00\x35";
        $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] =
          "\x00\x54\x00\x69\x00\x6d\x00\x65\x00\x73\x00\x2d\x00\x42\x00\x6f\x00"
          . "\x6c\x00\x64\x00\x20\x00\x42\x00\x6f\x00\x6c\x00\x64";
        $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] =
          "\x00\x30\x00\x30\x00\x32\x00\x2e\x00\x30\x00\x30\x00\x30";
        $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] =
          "\x00\x54\x00\x69\x00\x6d\x00\x65\x00\x73\x00\x2d\x00\x42\x00\x6f\x00"
          . "\x6c\x00\x64";

        $this->_isBold = true;
        $this->_isItalic = false;
        $this->_isMonospaced = false;

        $this->_underlinePosition = -100;
        $this->_underlineThickness = 50;
        $this->_strikePosition = 225;
        $this->_strikeThickness = 50;

        $this->_unitsPerEm = 1000;

        $this->_ascent  = 683;
        $this->_descent = -217;
        $this->_lineGap = 300;

        /* The glyph numbers assigned here are synthetic; they do not match the
         * actual glyph numbers used by the font. This is not a big deal though
         * since this data never makes it to the PDF file. It is only used
         * internally for layout calculations.
         */
        $this->_glyphWidths = array(
            0x00 => 0x01f4,   0x01 =>   0xfa,   0x02 => 0x014d,   0x03 => 0x022b,
            0x04 => 0x01f4,   0x05 => 0x01f4,   0x06 => 0x03e8,   0x07 => 0x0341,
            0x08 => 0x014d,   0x09 => 0x014d,   0x0a => 0x014d,   0x0b => 0x01f4,
            0x0c => 0x023a,   0x0d =>   0xfa,   0x0e => 0x014d,   0x0f =>   0xfa,
            0x10 => 0x0116,   0x11 => 0x01f4,   0x12 => 0x01f4,   0x13 => 0x01f4,
            0x14 => 0x01f4,   0x15 => 0x01f4,   0x16 => 0x01f4,   0x17 => 0x01f4,
            0x18 => 0x01f4,   0x19 => 0x01f4,   0x1a => 0x01f4,   0x1b => 0x014d,
            0x1c => 0x014d,   0x1d => 0x023a,   0x1e => 0x023a,   0x1f => 0x023a,
            0x20 => 0x01f4,   0x21 => 0x03a2,   0x22 => 0x02d2,   0x23 => 0x029b,
            0x24 => 0x02d2,   0x25 => 0x02d2,   0x26 => 0x029b,   0x27 => 0x0263,
            0x28 => 0x030a,   0x29 => 0x030a,   0x2a => 0x0185,   0x2b => 0x01f4,
            0x2c => 0x030a,   0x2d => 0x029b,   0x2e => 0x03b0,   0x2f => 0x02d2,
            0x30 => 0x030a,   0x31 => 0x0263,   0x32 => 0x030a,   0x33 => 0x02d2,
            0x34 => 0x022c,   0x35 => 0x029b,   0x36 => 0x02d2,   0x37 => 0x02d2,
            0x38 => 0x03e8,   0x39 => 0x02d2,   0x3a => 0x02d2,   0x3b => 0x029b,
            0x3c => 0x014d,   0x3d => 0x0116,   0x3e => 0x014d,   0x3f => 0x0245,
            0x40 => 0x01f4,   0x41 => 0x014d,   0x42 => 0x01f4,   0x43 => 0x022c,
            0x44 => 0x01bc,   0x45 => 0x022c,   0x46 => 0x01bc,   0x47 => 0x014d,
            0x48 => 0x01f4,   0x49 => 0x022c,   0x4a => 0x0116,   0x4b => 0x014d,
            0x4c => 0x022c,   0x4d => 0x0116,   0x4e => 0x0341,   0x4f => 0x022c,
            0x50 => 0x01f4,   0x51 => 0x022c,   0x52 => 0x022c,   0x53 => 0x01bc,
            0x54 => 0x0185,   0x55 => 0x014d,   0x56 => 0x022c,   0x57 => 0x01f4,
            0x58 => 0x02d2,   0x59 => 0x01f4,   0x5a => 0x01f4,   0x5b => 0x01bc,
            0x5c => 0x018a,   0x5d =>   0xdc,   0x5e => 0x018a,   0x5f => 0x0208,
            0x60 => 0x014d,   0x61 => 0x01f4,   0x62 => 0x01f4,   0x63 =>   0xa7,
            0x64 => 0x01f4,   0x65 => 0x01f4,   0x66 => 0x01f4,   0x67 => 0x01f4,
            0x68 => 0x0116,   0x69 => 0x01f4,   0x6a => 0x01f4,   0x6b => 0x014d,
            0x6c => 0x014d,   0x6d => 0x022c,   0x6e => 0x022c,   0x6f => 0x01f4,
            0x70 => 0x01f4,   0x71 => 0x01f4,   0x72 =>   0xfa,   0x73 => 0x021c,
            0x74 => 0x015e,   0x75 => 0x014d,   0x76 => 0x01f4,   0x77 => 0x01f4,
            0x78 => 0x01f4,   0x79 => 0x03e8,   0x7a => 0x03e8,   0x7b => 0x01f4,
            0x7c => 0x014d,   0x7d => 0x014d,   0x7e => 0x014d,   0x7f => 0x014d,
            0x80 => 0x014d,   0x81 => 0x014d,   0x82 => 0x014d,   0x83 => 0x014d,
            0x84 => 0x014d,   0x85 => 0x014d,   0x86 => 0x014d,   0x87 => 0x014d,
            0x88 => 0x014d,   0x89 => 0x03e8,   0x8a => 0x03e8,   0x8b => 0x012c,
            0x8c => 0x029b,   0x8d => 0x030a,   0x8e => 0x03e8,   0x8f => 0x014a,
            0x90 => 0x02d2,   0x91 => 0x0116,   0x92 => 0x0116,   0x93 => 0x01f4,
            0x94 => 0x02d2,   0x95 => 0x022c,   0x96 => 0x0185,   0x97 => 0x01bc,
            0x98 => 0x01f4,   0x99 => 0x022c,   0x9a => 0x01bc,   0x9b => 0x02d2,
            0x9c => 0x023a,   0x9d => 0x02d2,   0x9e => 0x02d2,   0x9f => 0x01f4,
            0xa0 => 0x02d2,   0xa1 => 0x01f4,   0xa2 => 0x0185,   0xa3 => 0x01bc,
            0xa4 => 0x02d2,   0xa5 => 0x02d2,   0xa6 => 0x01f4,   0xa7 => 0x02d2,
            0xa8 => 0x022c,   0xa9 => 0x029b,   0xaa => 0x02d2,   0xab =>   0xfa,
            0xac => 0x02eb,   0xad => 0x029b,   0xae => 0x01bc,   0xaf => 0x01f4,
            0xb0 => 0x02d2,   0xb1 => 0x0116,   0xb2 => 0x01f4,   0xb3 => 0x029b,
            0xb4 => 0x02d2,   0xb5 => 0x01f4,   0xb6 => 0x029b,   0xb7 => 0x0185,
            0xb8 => 0x0185,   0xb9 => 0x0116,   0xba => 0x01ee,   0xbb => 0x02d2,
            0xbc => 0x030a,   0xbd => 0x022c,   0xbe => 0x01f4,   0xbf => 0x02d2,
            0xc0 => 0x01bc,   0xc1 => 0x01bc,   0xc2 => 0x029b,   0xc3 => 0x0263,
            0xc4 => 0x030a,   0xc5 => 0x02d2,   0xc6 => 0x022c,   0xc7 => 0x02a0,
            0xc8 => 0x02d2,   0xc9 => 0x022c,   0xca => 0x012c,   0xcb => 0x030a,
            0xcc => 0x02d2,   0xcd => 0x02d2,   0xce => 0x023a,   0xcf => 0x022c,
            0xd0 => 0x029b,   0xd1 => 0x01ee,   0xd2 => 0x01f4,   0xd3 => 0x02d2,
            0xd4 => 0x0116,   0xd5 => 0x029b,   0xd6 => 0x01f4,   0xd7 => 0x01bc,
            0xd8 => 0x01bc,   0xd9 => 0x022c,   0xda => 0x022c,   0xdb => 0x02d2,
            0xdc => 0x0185,   0xdd => 0x023a,   0xde =>   0xdc,   0xdf => 0x02eb,
            0xe0 => 0x030a,   0xe1 => 0x0185,   0xe2 => 0x0258,   0xe3 => 0x029b,
            0xe4 => 0x01bc,   0xe5 => 0x01f4,   0xe6 => 0x029b,   0xe7 => 0x029b,
            0xe8 => 0x0225,   0xe9 => 0x02d2,   0xea => 0x02d2,   0xeb => 0x0116,
            0xec => 0x01a0,   0xed => 0x01bc,   0xee => 0x02d2,   0xef => 0x02d2,
            0xf0 => 0x02d2,   0xf1 => 0x01bc,   0xf2 => 0x01bc,   0xf3 => 0x0116,
            0xf4 => 0x030a,   0xf5 => 0x01f4,   0xf6 => 0x01f4,   0xf7 => 0x0185,
            0xf8 => 0x0116,   0xf9 => 0x030a,   0xfa => 0x02d2,   0xfb => 0x0264,
            0xfc => 0x022c,   0xfd => 0x012c,   0xfe => 0x030a,   0xff => 0x022c,
          0x0100 => 0x0116, 0x0101 => 0x01f4, 0x0102 => 0x029b, 0x0103 => 0x022c,
          0x0104 => 0x02ee, 0x0105 => 0x022c, 0x0106 => 0x018a, 0x0107 => 0x030a,
          0x0108 => 0x029b, 0x0109 => 0x03e8, 0x010a => 0x01bc, 0x010b => 0x0185,
          0x010c => 0x0185, 0x010d => 0x029b, 0x010e => 0x02ee, 0x010f => 0x0225,
          0x0110 => 0x01f4, 0x0111 => 0x022c, 0x0112 => 0x02d2, 0x0113 => 0x029b,
          0x0114 => 0x01bc, 0x0115 => 0x01f4, 0x0116 => 0x02ee, 0x0117 => 0x022c,
          0x0118 => 0x022c, 0x0119 => 0x030a, 0x011a => 0x0190, 0x011b => 0x01f4,
          0x011c => 0x02d2, 0x011d => 0x022c, 0x011e => 0x0225, 0x011f => 0x02d2,
          0x0120 => 0x01bc, 0x0121 => 0x02d2, 0x0122 => 0x01f4, 0x0123 => 0x02d2,
          0x0124 => 0x029b, 0x0125 => 0x02d2, 0x0126 => 0x02d2, 0x0127 => 0x02d2,
          0x0128 => 0x030a, 0x0129 => 0x01bc, 0x012a => 0x029b, 0x012b => 0x0185,
          0x012c => 0x022c, 0x012d => 0x023a, 0x012e => 0x0185, 0x012f => 0x022c,
          0x0130 => 0x014d, 0x0131 => 0x023a, 0x0132 => 0x01f4, 0x0133 => 0x022c,
          0x0134 => 0x0225, 0x0135 => 0x01f4, 0x0136 => 0x01f4, 0x0137 => 0x01bc,
          0x0138 => 0x022c, 0x0139 => 0x012c, 0x013a => 0x0116, 0x013b => 0x01f4,
        );

        /* The cmap table is similarly synthesized.
         */
        $cmapData = array(
            0x20 =>   0x01,   0x21 =>   0x02,   0x22 =>   0x03,   0x23 =>   0x04,
            0x24 =>   0x05,   0x25 =>   0x06,   0x26 =>   0x07, 0x2019 =>   0x08,
            0x28 =>   0x09,   0x29 =>   0x0a,   0x2a =>   0x0b,   0x2b =>   0x0c,
            0x2c =>   0x0d,   0x2d =>   0x0e,   0x2e =>   0x0f,   0x2f =>   0x10,
            0x30 =>   0x11,   0x31 =>   0x12,   0x32 =>   0x13,   0x33 =>   0x14,
            0x34 =>   0x15,   0x35 =>   0x16,   0x36 =>   0x17,   0x37 =>   0x18,
            0x38 =>   0x19,   0x39 =>   0x1a,   0x3a =>   0x1b,   0x3b =>   0x1c,
            0x3c =>   0x1d,   0x3d =>   0x1e,   0x3e =>   0x1f,   0x3f =>   0x20,
            0x40 =>   0x21,   0x41 =>   0x22,   0x42 =>   0x23,   0x43 =>   0x24,
            0x44 =>   0x25,   0x45 =>   0x26,   0x46 =>   0x27,   0x47 =>   0x28,
            0x48 =>   0x29,   0x49 =>   0x2a,   0x4a =>   0x2b,   0x4b =>   0x2c,
            0x4c =>   0x2d,   0x4d =>   0x2e,   0x4e =>   0x2f,   0x4f =>   0x30,
            0x50 =>   0x31,   0x51 =>   0x32,   0x52 =>   0x33,   0x53 =>   0x34,
            0x54 =>   0x35,   0x55 =>   0x36,   0x56 =>   0x37,   0x57 =>   0x38,
            0x58 =>   0x39,   0x59 =>   0x3a,   0x5a =>   0x3b,   0x5b =>   0x3c,
            0x5c =>   0x3d,   0x5d =>   0x3e,   0x5e =>   0x3f,   0x5f =>   0x40,
          0x2018 =>   0x41,   0x61 =>   0x42,   0x62 =>   0x43,   0x63 =>   0x44,
            0x64 =>   0x45,   0x65 =>   0x46,   0x66 =>   0x47,   0x67 =>   0x48,
            0x68 =>   0x49,   0x69 =>   0x4a,   0x6a =>   0x4b,   0x6b =>   0x4c,
            0x6c =>   0x4d,   0x6d =>   0x4e,   0x6e =>   0x4f,   0x6f =>   0x50,
            0x70 =>   0x51,   0x71 =>   0x52,   0x72 =>   0x53,   0x73 =>   0x54,
            0x74 =>   0x55,   0x75 =>   0x56,   0x76 =>   0x57,   0x77 =>   0x58,
            0x78 =>   0x59,   0x79 =>   0x5a,   0x7a =>   0x5b,   0x7b =>   0x5c,
            0x7c =>   0x5d,   0x7d =>   0x5e,   0x7e =>   0x5f,   0xa1 =>   0x60,
            0xa2 =>   0x61,   0xa3 =>   0x62, 0x2044 =>   0x63,   0xa5 =>   0x64,
          0x0192 =>   0x65,   0xa7 =>   0x66,   0xa4 =>   0x67,   0x27 =>   0x68,
          0x201c =>   0x69,   0xab =>   0x6a, 0x2039 =>   0x6b, 0x203a =>   0x6c,
          0xfb01 =>   0x6d, 0xfb02 =>   0x6e, 0x2013 =>   0x6f, 0x2020 =>   0x70,
          0x2021 =>   0x71,   0xb7 =>   0x72,   0xb6 =>   0x73, 0x2022 =>   0x74,
          0x201a =>   0x75, 0x201e =>   0x76, 0x201d =>   0x77,   0xbb =>   0x78,
          0x2026 =>   0x79, 0x2030 =>   0x7a,   0xbf =>   0x7b,   0x60 =>   0x7c,
            0xb4 =>   0x7d, 0x02c6 =>   0x7e, 0x02dc =>   0x7f,   0xaf =>   0x80,
          0x02d8 =>   0x81, 0x02d9 =>   0x82,   0xa8 =>   0x83, 0x02da =>   0x84,
            0xb8 =>   0x85, 0x02dd =>   0x86, 0x02db =>   0x87, 0x02c7 =>   0x88,
          0x2014 =>   0x89,   0xc6 =>   0x8a,   0xaa =>   0x8b, 0x0141 =>   0x8c,
            0xd8 =>   0x8d, 0x0152 =>   0x8e,   0xba =>   0x8f,   0xe6 =>   0x90,
          0x0131 =>   0x91, 0x0142 =>   0x92,   0xf8 =>   0x93, 0x0153 =>   0x94,
            0xdf =>   0x95,   0xcf =>   0x96,   0xe9 =>   0x97, 0x0103 =>   0x98,
          0x0171 =>   0x99, 0x011b =>   0x9a, 0x0178 =>   0x9b,   0xf7 =>   0x9c,
            0xdd =>   0x9d,   0xc2 =>   0x9e,   0xe1 =>   0x9f,   0xdb =>   0xa0,
            0xfd =>   0xa1, 0x0219 =>   0xa2,   0xea =>   0xa3, 0x016e =>   0xa4,
            0xdc =>   0xa5, 0x0105 =>   0xa6,   0xda =>   0xa7, 0x0173 =>   0xa8,
            0xcb =>   0xa9, 0x0110 =>   0xaa, 0xf6c3 =>   0xab,   0xa9 =>   0xac,
          0x0112 =>   0xad, 0x010d =>   0xae,   0xe5 =>   0xaf, 0x0145 =>   0xb0,
          0x013a =>   0xb1,   0xe0 =>   0xb2, 0x0162 =>   0xb3, 0x0106 =>   0xb4,
            0xe3 =>   0xb5, 0x0116 =>   0xb6, 0x0161 =>   0xb7, 0x015f =>   0xb8,
            0xed =>   0xb9, 0x25ca =>   0xba, 0x0158 =>   0xbb, 0x0122 =>   0xbc,
            0xfb =>   0xbd,   0xe2 =>   0xbe, 0x0100 =>   0xbf, 0x0159 =>   0xc0,
            0xe7 =>   0xc1, 0x017b =>   0xc2,   0xde =>   0xc3, 0x014c =>   0xc4,
          0x0154 =>   0xc5, 0x015a =>   0xc6, 0x010f =>   0xc7, 0x016a =>   0xc8,
          0x016f =>   0xc9,   0xb3 =>   0xca,   0xd2 =>   0xcb,   0xc0 =>   0xcc,
          0x0102 =>   0xcd,   0xd7 =>   0xce,   0xfa =>   0xcf, 0x0164 =>   0xd0,
          0x2202 =>   0xd1,   0xff =>   0xd2, 0x0143 =>   0xd3,   0xee =>   0xd4,
            0xca =>   0xd5,   0xe4 =>   0xd6,   0xeb =>   0xd7, 0x0107 =>   0xd8,
          0x0144 =>   0xd9, 0x016b =>   0xda, 0x0147 =>   0xdb,   0xcd =>   0xdc,
            0xb1 =>   0xdd,   0xa6 =>   0xde,   0xae =>   0xdf, 0x011e =>   0xe0,
          0x0130 =>   0xe1, 0x2211 =>   0xe2,   0xc8 =>   0xe3, 0x0155 =>   0xe4,
          0x014d =>   0xe5, 0x0179 =>   0xe6, 0x017d =>   0xe7, 0x2265 =>   0xe8,
            0xd0 =>   0xe9,   0xc7 =>   0xea, 0x013c =>   0xeb, 0x0165 =>   0xec,
          0x0119 =>   0xed, 0x0172 =>   0xee,   0xc1 =>   0xef,   0xc4 =>   0xf0,
            0xe8 =>   0xf1, 0x017a =>   0xf2, 0x012f =>   0xf3,   0xd3 =>   0xf4,
            0xf3 =>   0xf5, 0x0101 =>   0xf6, 0x015b =>   0xf7,   0xef =>   0xf8,
            0xd4 =>   0xf9,   0xd9 =>   0xfa, 0x2206 =>   0xfb,   0xfe =>   0xfc,
            0xb2 =>   0xfd,   0xd6 =>   0xfe,   0xb5 =>   0xff,   0xec => 0x0100,
          0x0151 => 0x0101, 0x0118 => 0x0102, 0x0111 => 0x0103,   0xbe => 0x0104,
          0x015e => 0x0105, 0x013e => 0x0106, 0x0136 => 0x0107, 0x0139 => 0x0108,
          0x2122 => 0x0109, 0x0117 => 0x010a,   0xcc => 0x010b, 0x012a => 0x010c,
          0x013d => 0x010d,   0xbd => 0x010e, 0x2264 => 0x010f,   0xf4 => 0x0110,
            0xf1 => 0x0111, 0x0170 => 0x0112,   0xc9 => 0x0113, 0x0113 => 0x0114,
          0x011f => 0x0115,   0xbc => 0x0116, 0x0160 => 0x0117, 0x0218 => 0x0118,
          0x0150 => 0x0119,   0xb0 => 0x011a,   0xf2 => 0x011b, 0x010c => 0x011c,
            0xf9 => 0x011d, 0x221a => 0x011e, 0x010e => 0x011f, 0x0157 => 0x0120,
            0xd1 => 0x0121,   0xf5 => 0x0122, 0x0156 => 0x0123, 0x013b => 0x0124,
            0xc3 => 0x0125, 0x0104 => 0x0126,   0xc5 => 0x0127,   0xd5 => 0x0128,
          0x017c => 0x0129, 0x011a => 0x012a, 0x012e => 0x012b, 0x0137 => 0x012c,
          0x2212 => 0x012d,   0xce => 0x012e, 0x0148 => 0x012f, 0x0163 => 0x0130,
            0xac => 0x0131,   0xf6 => 0x0132,   0xfc => 0x0133, 0x2260 => 0x0134,
          0x0123 => 0x0135,   0xf0 => 0x0136, 0x017e => 0x0137, 0x0146 => 0x0138,
            0xb9 => 0x0139, 0x012b => 0x013a, 0x20ac => 0x013b);
        require_once 'Zend/Pdf/Cmap.php';
        $this->_cmap = Zend_Pdf_Cmap::cmapWithTypeData(
            Zend_Pdf_Cmap::TYPE_BYTE_ENCODING_STATIC, $cmapData);


        /* Resource dictionary */

        /* The resource dictionary for the standard fonts is sparse because PDF
         * viewers already have all of the metrics data. We only need to provide
         * the font name and encoding method.
         */
        $this->_resource->BaseFont = new Zend_Pdf_Element_Name('Times-Bold');
    }
示例#5
0
 /**
  * Object constructor
  *
  * @param Zend_Pdf_FileParser_Font_OpenType $fontParser Font parser object
  *   containing OpenType file.
  * @param integer $embeddingOptions Options for font embedding.
  * @throws Zend_Pdf_Exception
  */
 public function __construct(Zend_Pdf_FileParser_Font_OpenType $fontParser)
 {
     parent::__construct();
     $fontParser->parse();
     /* Object properties */
     $this->_fontNames = $fontParser->names;
     $this->_isBold = $fontParser->isBold;
     $this->_isItalic = $fontParser->isItalic;
     $this->_isMonospaced = $fontParser->isMonospaced;
     $this->_underlinePosition = $fontParser->underlinePosition;
     $this->_underlineThickness = $fontParser->underlineThickness;
     $this->_strikePosition = $fontParser->strikePosition;
     $this->_strikeThickness = $fontParser->strikeThickness;
     $this->_unitsPerEm = $fontParser->unitsPerEm;
     $this->_ascent = $fontParser->ascent;
     $this->_descent = $fontParser->descent;
     $this->_lineGap = $fontParser->lineGap;
     $this->_cmap = $fontParser->cmap;
     /* Resource dictionary */
     $baseFont = $this->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT, 'en', 'UTF-8');
     $this->_resource->BaseFont = new Zend_Pdf_Element_Name($baseFont);
     /**
      * Prepare widths array.
      */
     /* Constract characters widths array using font CMap and glyphs widths array */
     $glyphWidths = $fontParser->glyphWidths;
     $charGlyphs = $this->_cmap->getCoveredCharactersGlyphs();
     $charWidths = array();
     foreach ($charGlyphs as $charCode => $glyph) {
         if (isset($glyphWidths[$glyph]) && !is_null($glyphWidths[$glyph])) {
             $charWidths[$charCode] = $glyphWidths[$glyph];
         }
     }
     $this->_charWidths = $charWidths;
     $this->_missingCharWidth = $glyphWidths[0];
     /* Width array optimization. Step1: extract default value */
     $widthFrequencies = array_count_values($charWidths);
     $defaultWidth = null;
     $defaultWidthFrequency = -1;
     foreach ($widthFrequencies as $width => $frequency) {
         if ($frequency > $defaultWidthFrequency) {
             $defaultWidth = $width;
             $defaultWidthFrequency = $frequency;
         }
     }
     // Store default value in the font dictionary
     $this->_resource->DW = new Zend_Pdf_Element_Numeric($this->toEmSpace($defaultWidth));
     // Remove characters which corresponds to default width from the widths array
     $defWidthChars = array_keys($charWidths, $defaultWidth);
     foreach ($defWidthChars as $charCode) {
         unset($charWidths[$charCode]);
     }
     // Order cheracter widths aray by character codes
     ksort($charWidths, SORT_NUMERIC);
     /* Width array optimization. Step2: Compact character codes sequences */
     $lastCharCode = -1;
     $widthsSequences = array();
     foreach ($charWidths as $charCode => $width) {
         if ($lastCharCode == -1) {
             $charCodesSequense = array();
             $sequenceStartCode = $charCode;
         } else {
             if ($charCode != $lastCharCode + 1) {
                 // New chracters sequence detected
                 $widthsSequences[$sequenceStartCode] = $charCodesSequense;
                 $charCodesSequense = array();
                 $sequenceStartCode = $charCode;
             }
         }
         $charCodesSequense[] = $width;
         $lastCharCode = $charCode;
     }
     // Save last sequence, if widths array is not empty (it may happens for monospaced fonts)
     if (count($charWidths) != 0) {
         $widthsSequences[$sequenceStartCode] = $charCodesSequense;
     }
     $pdfCharsWidths = array();
     foreach ($widthsSequences as $startCode => $widthsSequence) {
         /* Width array optimization. Step3: Compact widths sequences */
         $pdfWidths = array();
         $lastWidth = -1;
         $widthsInSequence = 0;
         foreach ($widthsSequence as $width) {
             if ($lastWidth != $width) {
                 // New width is detected
                 if ($widthsInSequence != 0) {
                     // Previous width value was a part of the widths sequence. Save it as 'c_1st c_last w'.
                     $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($startCode);
                     // First character code
                     $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($startCode + $widthsInSequence - 1);
                     // Last character code
                     $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($this->toEmSpace($lastWidth));
                     // Width
                     // Reset widths sequence
                     $startCode = $startCode + $widthsInSequence;
                     $widthsInSequence = 0;
                 }
                 // Collect new width
                 $pdfWidths[] = new Zend_Pdf_Element_Numeric($this->toEmSpace($width));
                 $lastWidth = $width;
             } else {
                 // Width is equal to previous
                 if (count($pdfWidths) != 0) {
                     // We already have some widths collected
                     // So, we've just detected new widths sequence
                     // Remove last element from widths list, since it's a part of widths sequence
                     array_pop($pdfWidths);
                     // and write the rest if it's not empty
                     if (count($pdfWidths) != 0) {
                         // Save it as 'c_1st [w1 w2 ... wn]'.
                         $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($startCode);
                         // First character code
                         $pdfCharsWidths[] = new Zend_Pdf_Element_Array($pdfWidths);
                         // Widths array
                         // Reset widths collection
                         $startCode += count($pdfWidths);
                         $pdfWidths = array();
                     }
                     $widthsInSequence = 2;
                 } else {
                     // Continue widths sequence
                     $widthsInSequence++;
                 }
             }
         }
         // Check if we have widths collection or widths sequence to wite it down
         if (count($pdfWidths) != 0) {
             // We have some widths collected
             // Save it as 'c_1st [w1 w2 ... wn]'.
             $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($startCode);
             // First character code
             $pdfCharsWidths[] = new Zend_Pdf_Element_Array($pdfWidths);
             // Widths array
         } else {
             if ($widthsInSequence != 0) {
                 // We have widths sequence
                 // Save it as 'c_1st c_last w'.
                 $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($startCode);
                 // First character code
                 $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($startCode + $widthsInSequence - 1);
                 // Last character code
                 $pdfCharsWidths[] = new Zend_Pdf_Element_Numeric($this->toEmSpace($lastWidth));
                 // Width
             }
         }
     }
     /* Create the Zend_Pdf_Element_Array object and add it to the font's
      * object factory and resource dictionary.
      */
     $widthsArrayElement = new Zend_Pdf_Element_Array($pdfCharsWidths);
     $widthsObject = $this->_objectFactory->newObject($widthsArrayElement);
     $this->_resource->W = $widthsObject;
     /* CIDSystemInfo dictionary */
     $cidSystemInfo = new Zend_Pdf_Element_Dictionary();
     $cidSystemInfo->Registry = new Zend_Pdf_Element_String('Adobe');
     $cidSystemInfo->Ordering = new Zend_Pdf_Element_String('UCS');
     $cidSystemInfo->Supplement = new Zend_Pdf_Element_Numeric(0);
     $cidSystemInfoObject = $this->_objectFactory->newObject($cidSystemInfo);
     $this->_resource->CIDSystemInfo = $cidSystemInfoObject;
 }
示例#6
0
 /**
  * Object constructor
  */
 public function __construct()
 {
     parent::__construct();
     /* Object properties */
     $this->_fontType = Zend_Pdf_Font::TYPE_STANDARD;
     /* The font names are stored internally as Unicode UTF-16BE-encoded
      * strings. Since this information is static, save unnecessary trips
      * through iconv() and just use pre-encoded hexidecimal strings.
      */
     $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] = "Copyrigh" . "t (c) 19" . "85, 1987" . ", 1989, " . "1990, 19" . "97 Adobe" . " Systems" . " Incorpo" . "rated. A" . "ll right" . "s reserv" . "ed.";
     $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] = "Symbol";
     $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] = "Medium";
     $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] = "43064";
     $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] = "Symbol M" . "edium";
     $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] = "001.008";
     $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] = "Symbol";
     $this->_isBold = false;
     $this->_isItalic = false;
     $this->_isMonospaced = false;
     $this->_underlinePosition = -100;
     $this->_underlineThickness = 50;
     $this->_strikePosition = 225;
     $this->_strikeThickness = 50;
     $this->_unitsPerEm = 1000;
     $this->_ascent = 1000;
     $this->_descent = 0;
     $this->_lineGap = 200;
     /* The glyph numbers assigned here are synthetic; they do not match the
      * actual glyph numbers used by the font. This is not a big deal though
      * since this data never makes it to the PDF file. It is only used
      * internally for layout calculations.
      */
     $this->_glyphWidths = array(0x0 => 0x1f4, 0x1 => 0xfa, 0x2 => 0x14d, 0x3 => 0x2c9, 0x4 => 0x1f4, 0x5 => 0x225, 0x6 => 0x341, 0x7 => 0x30a, 0x8 => 0x1b7, 0x9 => 0x14d, 0xa => 0x14d, 0xb => 0x1f4, 0xc => 0x225, 0xd => 0xfa, 0xe => 0x225, 0xf => 0xfa, 0x10 => 0x116, 0x11 => 0x1f4, 0x12 => 0x1f4, 0x13 => 0x1f4, 0x14 => 0x1f4, 0x15 => 0x1f4, 0x16 => 0x1f4, 0x17 => 0x1f4, 0x18 => 0x1f4, 0x19 => 0x1f4, 0x1a => 0x1f4, 0x1b => 0x116, 0x1c => 0x116, 0x1d => 0x225, 0x1e => 0x225, 0x1f => 0x225, 0x20 => 0x1bc, 0x21 => 0x225, 0x22 => 0x2d2, 0x23 => 0x29b, 0x24 => 0x2d2, 0x25 => 0x264, 0x26 => 0x263, 0x27 => 0x2fb, 0x28 => 0x25b, 0x29 => 0x2d2, 0x2a => 0x14d, 0x2b => 0x277, 0x2c => 0x2d2, 0x2d => 0x2ae, 0x2e => 0x379, 0x2f => 0x2d2, 0x30 => 0x2d2, 0x31 => 0x300, 0x32 => 0x2e5, 0x33 => 0x22c, 0x34 => 0x250, 0x35 => 0x263, 0x36 => 0x2b2, 0x37 => 0x1b7, 0x38 => 0x300, 0x39 => 0x285, 0x3a => 0x31b, 0x3b => 0x263, 0x3c => 0x14d, 0x3d => 0x35f, 0x3e => 0x14d, 0x3f => 0x292, 0x40 => 0x1f4, 0x41 => 0x1f4, 0x42 => 0x277, 0x43 => 0x225, 0x44 => 0x225, 0x45 => 0x1ee, 0x46 => 0x1b7, 0x47 => 0x209, 0x48 => 0x19b, 0x49 => 0x25b, 0x4a => 0x149, 0x4b => 0x25b, 0x4c => 0x225, 0x4d => 0x225, 0x4e => 0x240, 0x4f => 0x209, 0x50 => 0x225, 0x51 => 0x225, 0x52 => 0x209, 0x53 => 0x225, 0x54 => 0x25b, 0x55 => 0x1b7, 0x56 => 0x240, 0x57 => 0x2c9, 0x58 => 0x2ae, 0x59 => 0x1ed, 0x5a => 0x2ae, 0x5b => 0x1ee, 0x5c => 0x1e0, 0x5d => 0xc8, 0x5e => 0x1e0, 0x5f => 0x225, 0x60 => 0x2ee, 0x61 => 0x26c, 0x62 => 0xf7, 0x63 => 0x225, 0x64 => 0xa7, 0x65 => 0x2c9, 0x66 => 0x1f4, 0x67 => 0x2f1, 0x68 => 0x2f1, 0x69 => 0x2f1, 0x6a => 0x2f1, 0x6b => 0x412, 0x6c => 0x3db, 0x6d => 0x25b, 0x6e => 0x3db, 0x6f => 0x25b, 0x70 => 0x190, 0x71 => 0x225, 0x72 => 0x19b, 0x73 => 0x225, 0x74 => 0x225, 0x75 => 0x2c9, 0x76 => 0x1ee, 0x77 => 0x1cc, 0x78 => 0x225, 0x79 => 0x225, 0x7a => 0x225, 0x7b => 0x225, 0x7c => 0x3e8, 0x7d => 0x25b, 0x7e => 0x3e8, 0x7f => 0x292, 0x80 => 0x337, 0x81 => 0x2ae, 0x82 => 0x31b, 0x83 => 0x3db, 0x84 => 0x300, 0x85 => 0x300, 0x86 => 0x337, 0x87 => 0x300, 0x88 => 0x300, 0x89 => 0x2c9, 0x8a => 0x2c9, 0x8b => 0x2c9, 0x8c => 0x2c9, 0x8d => 0x2c9, 0x8e => 0x2c9, 0x8f => 0x2c9, 0x90 => 0x300, 0x91 => 0x2c9, 0x92 => 0x316, 0x93 => 0x316, 0x94 => 0x37a, 0x95 => 0x337, 0x96 => 0x225, 0x97 => 0xfa, 0x98 => 0x2c9, 0x99 => 0x25b, 0x9a => 0x25b, 0x9b => 0x412, 0x9c => 0x3db, 0x9d => 0x25b, 0x9e => 0x3db, 0x9f => 0x25b, 0xa0 => 0x1ee, 0xa1 => 0x149, 0xa2 => 0x316, 0xa3 => 0x316, 0xa4 => 0x312, 0xa5 => 0x2c9, 0xa6 => 0x180, 0xa7 => 0x180, 0xa8 => 0x180, 0xa9 => 0x180, 0xaa => 0x180, 0xab => 0x180, 0xac => 0x1ee, 0xad => 0x1ee, 0xae => 0x1ee, 0xaf => 0x1ee, 0xb0 => 0x149, 0xb1 => 0x112, 0xb2 => 0x2ae, 0xb3 => 0x2ae, 0xb4 => 0x2ae, 0xb5 => 0x180, 0xb6 => 0x180, 0xb7 => 0x180, 0xb8 => 0x180, 0xb9 => 0x180, 0xba => 0x180, 0xbb => 0x1ee, 0xbc => 0x1ee, 0xbd => 0x1ee, 0xbe => 0x316);
     $this->_glyphMaxIndex = 190;
     /* The cmap table is similarly synthesized.
      */
     $cmapData = array(0x20 => 0x1, 0x21 => 0x2, 0x2200 => 0x3, 0x23 => 0x4, 0x2203 => 0x5, 0x25 => 0x6, 0x26 => 0x7, 0x220b => 0x8, 0x28 => 0x9, 0x29 => 0xa, 0x2217 => 0xb, 0x2b => 0xc, 0x2c => 0xd, 0x2212 => 0xe, 0x2e => 0xf, 0x2f => 0x10, 0x30 => 0x11, 0x31 => 0x12, 0x32 => 0x13, 0x33 => 0x14, 0x34 => 0x15, 0x35 => 0x16, 0x36 => 0x17, 0x37 => 0x18, 0x38 => 0x19, 0x39 => 0x1a, 0x3a => 0x1b, 0x3b => 0x1c, 0x3c => 0x1d, 0x3d => 0x1e, 0x3e => 0x1f, 0x3f => 0x20, 0x2245 => 0x21, 0x391 => 0x22, 0x392 => 0x23, 0x3a7 => 0x24, 0x2206 => 0x25, 0x395 => 0x26, 0x3a6 => 0x27, 0x393 => 0x28, 0x397 => 0x29, 0x399 => 0x2a, 0x3d1 => 0x2b, 0x39a => 0x2c, 0x39b => 0x2d, 0x39c => 0x2e, 0x39d => 0x2f, 0x39f => 0x30, 0x3a0 => 0x31, 0x398 => 0x32, 0x3a1 => 0x33, 0x3a3 => 0x34, 0x3a4 => 0x35, 0x3a5 => 0x36, 0x3c2 => 0x37, 0x2126 => 0x38, 0x39e => 0x39, 0x3a8 => 0x3a, 0x396 => 0x3b, 0x5b => 0x3c, 0x2234 => 0x3d, 0x5d => 0x3e, 0x22a5 => 0x3f, 0x5f => 0x40, 0xf8e5 => 0x41, 0x3b1 => 0x42, 0x3b2 => 0x43, 0x3c7 => 0x44, 0x3b4 => 0x45, 0x3b5 => 0x46, 0x3c6 => 0x47, 0x3b3 => 0x48, 0x3b7 => 0x49, 0x3b9 => 0x4a, 0x3d5 => 0x4b, 0x3ba => 0x4c, 0x3bb => 0x4d, 0xb5 => 0x4e, 0x3bd => 0x4f, 0x3bf => 0x50, 0x3c0 => 0x51, 0x3b8 => 0x52, 0x3c1 => 0x53, 0x3c3 => 0x54, 0x3c4 => 0x55, 0x3c5 => 0x56, 0x3d6 => 0x57, 0x3c9 => 0x58, 0x3be => 0x59, 0x3c8 => 0x5a, 0x3b6 => 0x5b, 0x7b => 0x5c, 0x7c => 0x5d, 0x7d => 0x5e, 0x223c => 0x5f, 0x20ac => 0x60, 0x3d2 => 0x61, 0x2032 => 0x62, 0x2264 => 0x63, 0x2044 => 0x64, 0x221e => 0x65, 0x192 => 0x66, 0x2663 => 0x67, 0x2666 => 0x68, 0x2665 => 0x69, 0x2660 => 0x6a, 0x2194 => 0x6b, 0x2190 => 0x6c, 0x2191 => 0x6d, 0x2192 => 0x6e, 0x2193 => 0x6f, 0xb0 => 0x70, 0xb1 => 0x71, 0x2033 => 0x72, 0x2265 => 0x73, 0xd7 => 0x74, 0x221d => 0x75, 0x2202 => 0x76, 0x2022 => 0x77, 0xf7 => 0x78, 0x2260 => 0x79, 0x2261 => 0x7a, 0x2248 => 0x7b, 0x2026 => 0x7c, 0xf8e6 => 0x7d, 0xf8e7 => 0x7e, 0x21b5 => 0x7f, 0x2135 => 0x80, 0x2111 => 0x81, 0x211c => 0x82, 0x2118 => 0x83, 0x2297 => 0x84, 0x2295 => 0x85, 0x2205 => 0x86, 0x2229 => 0x87, 0x222a => 0x88, 0x2283 => 0x89, 0x2287 => 0x8a, 0x2284 => 0x8b, 0x2282 => 0x8c, 0x2286 => 0x8d, 0x2208 => 0x8e, 0x2209 => 0x8f, 0x2220 => 0x90, 0x2207 => 0x91, 0xf6da => 0x92, 0xf6d9 => 0x93, 0xf6db => 0x94, 0x220f => 0x95, 0x221a => 0x96, 0x22c5 => 0x97, 0xac => 0x98, 0x2227 => 0x99, 0x2228 => 0x9a, 0x21d4 => 0x9b, 0x21d0 => 0x9c, 0x21d1 => 0x9d, 0x21d2 => 0x9e, 0x21d3 => 0x9f, 0x25ca => 0xa0, 0x2329 => 0xa1, 0xf8e8 => 0xa2, 0xf8e9 => 0xa3, 0xf8ea => 0xa4, 0x2211 => 0xa5, 0xf8eb => 0xa6, 0xf8ec => 0xa7, 0xf8ed => 0xa8, 0xf8ee => 0xa9, 0xf8ef => 0xaa, 0xf8f0 => 0xab, 0xf8f1 => 0xac, 0xf8f2 => 0xad, 0xf8f3 => 0xae, 0xf8f4 => 0xaf, 0x232a => 0xb0, 0x222b => 0xb1, 0x2320 => 0xb2, 0xf8f5 => 0xb3, 0x2321 => 0xb4, 0xf8f6 => 0xb5, 0xf8f7 => 0xb6, 0xf8f8 => 0xb7, 0xf8f9 => 0xb8, 0xf8fa => 0xb9, 0xf8fb => 0xba, 0xf8fc => 0xbb, 0xf8fd => 0xbc, 0xf8fe => 0xbd, 0xf8ff => 0xbe);
     $this->cmap = Zend_Pdf_Cmap::cmapWithTypeData(Zend_Pdf_Cmap::TYPE_BYTE_ENCODING_STATIC, $cmapData);
     /* Resource dictionary */
     /* The resource dictionary for the standard fonts is sparse because PDF
      * viewers already have all of the metrics data. We only need to provide
      * the font name and encoding method.
      */
     $this->_resource->BaseFont = new Zend_Pdf_Element_Name('Symbol');
     /* This font has a built-in custom character encoding method. Don't
      * override with WinAnsi like the other built-in fonts or else it will
      * not work as expected.
      */
 }
示例#7
0
 /**
  * Object constructor
  */
 public function __construct()
 {
     parent::__construct();
     /* Object properties */
     /* The font names are stored internally as Unicode UTF-16BE-encoded
      * strings. Since this information is static, save unnecessary trips
      * through iconv() and just use pre-encoded hexidecimal strings.
      */
     $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] = "Copyrigh" . "t (c) 19" . "85, 1987" . ", 1988, " . "1989, 19" . "97 Adobe" . " Systems" . " Incorpo" . "rated. A" . "ll Right" . "s Reserv" . "ed.ITC Z" . "apf Ding" . "bats is " . "a regist" . "ered tra" . "demark o" . "f Intern" . "ational " . "Typeface" . " Corpora" . "tion.";
     $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] = "ZapfDing" . "bats";
     $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] = "Medium";
     $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] = "43082";
     $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] = "ZapfDing" . "bats Med" . "ium";
     $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] = "002.000";
     $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] = "ZapfDing" . "bats";
     $this->_isBold = false;
     $this->_isItalic = false;
     $this->_isMonospaced = false;
     $this->_underlinePosition = -100;
     $this->_underlineThickness = 50;
     $this->_strikePosition = 225;
     $this->_strikeThickness = 50;
     $this->_unitsPerEm = 1000;
     $this->_ascent = 1000;
     $this->_descent = 0;
     $this->_lineGap = 200;
     /* The glyph numbers assigned here are synthetic; they do not match the
      * actual glyph numbers used by the font. This is not a big deal though
      * since this data never makes it to the PDF file. It is only used
      * internally for layout calculations.
      */
     $this->_glyphWidths = array(0x0 => 0x1f4, 0x1 => 0x116, 0x2 => 0x3ce, 0x3 => 0x3c1, 0x4 => 0x3ce, 0x5 => 0x3d4, 0x6 => 0x2cf, 0x7 => 0x315, 0x8 => 0x316, 0x9 => 0x317, 0xa => 0x2b2, 0xb => 0x3c0, 0xc => 0x3ab, 0xd => 0x225, 0xe => 0x357, 0xf => 0x38f, 0x10 => 0x3a5, 0x11 => 0x38f, 0x12 => 0x3b1, 0x13 => 0x3ce, 0x14 => 0x2f3, 0x15 => 0x34e, 0x16 => 0x2fa, 0x17 => 0x2f9, 0x18 => 0x23b, 0x19 => 0x2a5, 0x1a => 0x2fb, 0x1b => 0x2f8, 0x1c => 0x2f7, 0x1d => 0x2f2, 0x1e => 0x1ee, 0x1f => 0x228, 0x20 => 0x219, 0x21 => 0x241, 0x22 => 0x2b4, 0x23 => 0x312, 0x24 => 0x314, 0x25 => 0x314, 0x26 => 0x316, 0x27 => 0x319, 0x28 => 0x31a, 0x29 => 0x330, 0x2a => 0x337, 0x2b => 0x315, 0x2c => 0x349, 0x2d => 0x337, 0x2e => 0x341, 0x2f => 0x330, 0x30 => 0x33f, 0x31 => 0x39b, 0x32 => 0x2e8, 0x33 => 0x2d3, 0x34 => 0x2ed, 0x35 => 0x316, 0x36 => 0x318, 0x37 => 0x2b7, 0x38 => 0x308, 0x39 => 0x300, 0x3a => 0x318, 0x3b => 0x2f7, 0x3c => 0x2c3, 0x3d => 0x2c4, 0x3e => 0x2aa, 0x3f => 0x2bd, 0x40 => 0x33a, 0x41 => 0x32f, 0x42 => 0x315, 0x43 => 0x315, 0x44 => 0x2c3, 0x45 => 0x2af, 0x46 => 0x2b8, 0x47 => 0x2b1, 0x48 => 0x312, 0x49 => 0x313, 0x4a => 0x2c9, 0x4b => 0x317, 0x4c => 0x311, 0x4d => 0x317, 0x4e => 0x369, 0x4f => 0x2f9, 0x50 => 0x2fa, 0x51 => 0x2fa, 0x52 => 0x2f7, 0x53 => 0x2f7, 0x54 => 0x37c, 0x55 => 0x37c, 0x56 => 0x314, 0x57 => 0x310, 0x58 => 0x1b6, 0x59 => 0x8a, 0x5a => 0x115, 0x5b => 0x19f, 0x5c => 0x188, 0x5d => 0x188, 0x5e => 0x29c, 0x5f => 0x29c, 0x60 => 0x186, 0x61 => 0x186, 0x62 => 0x13d, 0x63 => 0x13d, 0x64 => 0x114, 0x65 => 0x114, 0x66 => 0x1fd, 0x67 => 0x1fd, 0x68 => 0x19a, 0x69 => 0x19a, 0x6a => 0xea, 0x6b => 0xea, 0x6c => 0x14e, 0x6d => 0x14e, 0x6e => 0x2dc, 0x6f => 0x220, 0x70 => 0x220, 0x71 => 0x38e, 0x72 => 0x29b, 0x73 => 0x2f8, 0x74 => 0x2f8, 0x75 => 0x308, 0x76 => 0x253, 0x77 => 0x2b6, 0x78 => 0x272, 0x79 => 0x314, 0x7a => 0x314, 0x7b => 0x314, 0x7c => 0x314, 0x7d => 0x314, 0x7e => 0x314, 0x7f => 0x314, 0x80 => 0x314, 0x81 => 0x314, 0x82 => 0x314, 0x83 => 0x314, 0x84 => 0x314, 0x85 => 0x314, 0x86 => 0x314, 0x87 => 0x314, 0x88 => 0x314, 0x89 => 0x314, 0x8a => 0x314, 0x8b => 0x314, 0x8c => 0x314, 0x8d => 0x314, 0x8e => 0x314, 0x8f => 0x314, 0x90 => 0x314, 0x91 => 0x314, 0x92 => 0x314, 0x93 => 0x314, 0x94 => 0x314, 0x95 => 0x314, 0x96 => 0x314, 0x97 => 0x314, 0x98 => 0x314, 0x99 => 0x314, 0x9a => 0x314, 0x9b => 0x314, 0x9c => 0x314, 0x9d => 0x314, 0x9e => 0x314, 0x9f => 0x314, 0xa0 => 0x314, 0xa1 => 0x37e, 0xa2 => 0x346, 0xa3 => 0x3f8, 0xa4 => 0x1ca, 0xa5 => 0x2ec, 0xa6 => 0x39c, 0xa7 => 0x2ec, 0xa8 => 0x396, 0xa9 => 0x39f, 0xaa => 0x3a0, 0xab => 0x3a0, 0xac => 0x342, 0xad => 0x369, 0xae => 0x33c, 0xaf => 0x39c, 0xb0 => 0x39c, 0xb1 => 0x395, 0xb2 => 0x3a2, 0xb3 => 0x3a3, 0xb4 => 0x1cf, 0xb5 => 0x373, 0xb6 => 0x344, 0xb7 => 0x344, 0xb8 => 0x363, 0xb9 => 0x363, 0xba => 0x2b8, 0xbb => 0x2b8, 0xbc => 0x36a, 0xbd => 0x36a, 0xbe => 0x2f8, 0xbf => 0x3b2, 0xc0 => 0x303, 0xc1 => 0x361, 0xc2 => 0x303, 0xc3 => 0x378, 0xc4 => 0x3c7, 0xc5 => 0x378, 0xc6 => 0x33f, 0xc7 => 0x369, 0xc8 => 0x39f, 0xc9 => 0x3ca, 0xca => 0x396);
     /* The cmap table is similarly synthesized.
      */
     $cmapData = array(0x20 => 0x1, 0x2701 => 0x2, 0x2702 => 0x3, 0x2703 => 0x4, 0x2704 => 0x5, 0x260e => 0x6, 0x2706 => 0x7, 0x2707 => 0x8, 0x2708 => 0x9, 0x2709 => 0xa, 0x261b => 0xb, 0x261e => 0xc, 0x270c => 0xd, 0x270d => 0xe, 0x270e => 0xf, 0x270f => 0x10, 0x2710 => 0x11, 0x2711 => 0x12, 0x2712 => 0x13, 0x2713 => 0x14, 0x2714 => 0x15, 0x2715 => 0x16, 0x2716 => 0x17, 0x2717 => 0x18, 0x2718 => 0x19, 0x2719 => 0x1a, 0x271a => 0x1b, 0x271b => 0x1c, 0x271c => 0x1d, 0x271d => 0x1e, 0x271e => 0x1f, 0x271f => 0x20, 0x2720 => 0x21, 0x2721 => 0x22, 0x2722 => 0x23, 0x2723 => 0x24, 0x2724 => 0x25, 0x2725 => 0x26, 0x2726 => 0x27, 0x2727 => 0x28, 0x2605 => 0x29, 0x2729 => 0x2a, 0x272a => 0x2b, 0x272b => 0x2c, 0x272c => 0x2d, 0x272d => 0x2e, 0x272e => 0x2f, 0x272f => 0x30, 0x2730 => 0x31, 0x2731 => 0x32, 0x2732 => 0x33, 0x2733 => 0x34, 0x2734 => 0x35, 0x2735 => 0x36, 0x2736 => 0x37, 0x2737 => 0x38, 0x2738 => 0x39, 0x2739 => 0x3a, 0x273a => 0x3b, 0x273b => 0x3c, 0x273c => 0x3d, 0x273d => 0x3e, 0x273e => 0x3f, 0x273f => 0x40, 0x2740 => 0x41, 0x2741 => 0x42, 0x2742 => 0x43, 0x2743 => 0x44, 0x2744 => 0x45, 0x2745 => 0x46, 0x2746 => 0x47, 0x2747 => 0x48, 0x2748 => 0x49, 0x2749 => 0x4a, 0x274a => 0x4b, 0x274b => 0x4c, 0x25cf => 0x4d, 0x274d => 0x4e, 0x25a0 => 0x4f, 0x274f => 0x50, 0x2750 => 0x51, 0x2751 => 0x52, 0x2752 => 0x53, 0x25b2 => 0x54, 0x25bc => 0x55, 0x25c6 => 0x56, 0x2756 => 0x57, 0x25d7 => 0x58, 0x2758 => 0x59, 0x2759 => 0x5a, 0x275a => 0x5b, 0x275b => 0x5c, 0x275c => 0x5d, 0x275d => 0x5e, 0x275e => 0x5f, 0x2768 => 0x60, 0x2769 => 0x61, 0x276a => 0x62, 0x276b => 0x63, 0x276c => 0x64, 0x276d => 0x65, 0x276e => 0x66, 0x276f => 0x67, 0x2770 => 0x68, 0x2771 => 0x69, 0x2772 => 0x6a, 0x2773 => 0x6b, 0x2774 => 0x6c, 0x2775 => 0x6d, 0x2761 => 0x6e, 0x2762 => 0x6f, 0x2763 => 0x70, 0x2764 => 0x71, 0x2765 => 0x72, 0x2766 => 0x73, 0x2767 => 0x74, 0x2663 => 0x75, 0x2666 => 0x76, 0x2665 => 0x77, 0x2660 => 0x78, 0x2460 => 0x79, 0x2461 => 0x7a, 0x2462 => 0x7b, 0x2463 => 0x7c, 0x2464 => 0x7d, 0x2465 => 0x7e, 0x2466 => 0x7f, 0x2467 => 0x80, 0x2468 => 0x81, 0x2469 => 0x82, 0x2776 => 0x83, 0x2777 => 0x84, 0x2778 => 0x85, 0x2779 => 0x86, 0x277a => 0x87, 0x277b => 0x88, 0x277c => 0x89, 0x277d => 0x8a, 0x277e => 0x8b, 0x277f => 0x8c, 0x2780 => 0x8d, 0x2781 => 0x8e, 0x2782 => 0x8f, 0x2783 => 0x90, 0x2784 => 0x91, 0x2785 => 0x92, 0x2786 => 0x93, 0x2787 => 0x94, 0x2788 => 0x95, 0x2789 => 0x96, 0x278a => 0x97, 0x278b => 0x98, 0x278c => 0x99, 0x278d => 0x9a, 0x278e => 0x9b, 0x278f => 0x9c, 0x2790 => 0x9d, 0x2791 => 0x9e, 0x2792 => 0x9f, 0x2793 => 0xa0, 0x2794 => 0xa1, 0x2192 => 0xa2, 0x2194 => 0xa3, 0x2195 => 0xa4, 0x2798 => 0xa5, 0x2799 => 0xa6, 0x279a => 0xa7, 0x279b => 0xa8, 0x279c => 0xa9, 0x279d => 0xaa, 0x279e => 0xab, 0x279f => 0xac, 0x27a0 => 0xad, 0x27a1 => 0xae, 0x27a2 => 0xaf, 0x27a3 => 0xb0, 0x27a4 => 0xb1, 0x27a5 => 0xb2, 0x27a6 => 0xb3, 0x27a7 => 0xb4, 0x27a8 => 0xb5, 0x27a9 => 0xb6, 0x27aa => 0xb7, 0x27ab => 0xb8, 0x27ac => 0xb9, 0x27ad => 0xba, 0x27ae => 0xbb, 0x27af => 0xbc, 0x27b1 => 0xbd, 0x27b2 => 0xbe, 0x27b3 => 0xbf, 0x27b4 => 0xc0, 0x27b5 => 0xc1, 0x27b6 => 0xc2, 0x27b7 => 0xc3, 0x27b8 => 0xc4, 0x27b9 => 0xc5, 0x27ba => 0xc6, 0x27bb => 0xc7, 0x27bc => 0xc8, 0x27bd => 0xc9, 0x27be => 0xca);
     require_once 'Zend/Pdf/Cmap.php';
     $this->_cmap = Zend_Pdf_Cmap::cmapWithTypeData(Zend_Pdf_Cmap::TYPE_BYTE_ENCODING_STATIC, $cmapData);
     /* Resource dictionary */
     /* The resource dictionary for the standard fonts is sparse because PDF
      * viewers already have all of the metrics data. We only need to provide
      * the font name and encoding method.
      */
     $this->_resource->BaseFont = new Zend_Pdf_Element_Name('ZapfDingbats');
     /* This font has a built-in custom character encoding method. Don't
      * override with WinAnsi like the other built-in fonts or else it will
      * not work as expected.
      */
     $this->_resource->Encoding = null;
 }
示例#8
0
 public function __construct()
 {
     parent::__construct();
     $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] = "Copyrigh" . "t (c) 19" . "89, 1990" . ", 1991, " . "1992, 19" . "93, 1997" . " Adobe S" . "ystems I" . "ncorpora" . "ted.  Al" . "l Rights" . " Reserve" . "d.";
     $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] = "Courier";
     $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] = "Medium";
     $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] = "43051";
     $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] = "Courier-" . "Oblique " . "Medium";
     $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] = "003.000";
     $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] = "Courier-" . "Oblique";
     $this->_isBold = false;
     $this->_isItalic = true;
     $this->_isMonospaced = true;
     $this->_underlinePosition = -100;
     $this->_underlineThickness = 50;
     $this->_strikePosition = 225;
     $this->_strikeThickness = 50;
     $this->_unitsPerEm = 1000;
     $this->_ascent = 629;
     $this->_descent = -157;
     $this->_lineGap = 414;
     $this->_glyphWidths = array(0x0 => 0x1f4, 0x1 => 0x258, 0x2 => 0x258, 0x3 => 0x258, 0x4 => 0x258, 0x5 => 0x258, 0x6 => 0x258, 0x7 => 0x258, 0x8 => 0x258, 0x9 => 0x258, 0xa => 0x258, 0xb => 0x258, 0xc => 0x258, 0xd => 0x258, 0xe => 0x258, 0xf => 0x258, 0x10 => 0x258, 0x11 => 0x258, 0x12 => 0x258, 0x13 => 0x258, 0x14 => 0x258, 0x15 => 0x258, 0x16 => 0x258, 0x17 => 0x258, 0x18 => 0x258, 0x19 => 0x258, 0x1a => 0x258, 0x1b => 0x258, 0x1c => 0x258, 0x1d => 0x258, 0x1e => 0x258, 0x1f => 0x258, 0x20 => 0x258, 0x21 => 0x258, 0x22 => 0x258, 0x23 => 0x258, 0x24 => 0x258, 0x25 => 0x258, 0x26 => 0x258, 0x27 => 0x258, 0x28 => 0x258, 0x29 => 0x258, 0x2a => 0x258, 0x2b => 0x258, 0x2c => 0x258, 0x2d => 0x258, 0x2e => 0x258, 0x2f => 0x258, 0x30 => 0x258, 0x31 => 0x258, 0x32 => 0x258, 0x33 => 0x258, 0x34 => 0x258, 0x35 => 0x258, 0x36 => 0x258, 0x37 => 0x258, 0x38 => 0x258, 0x39 => 0x258, 0x3a => 0x258, 0x3b => 0x258, 0x3c => 0x258, 0x3d => 0x258, 0x3e => 0x258, 0x3f => 0x258, 0x40 => 0x258, 0x41 => 0x258, 0x42 => 0x258, 0x43 => 0x258, 0x44 => 0x258, 0x45 => 0x258, 0x46 => 0x258, 0x47 => 0x258, 0x48 => 0x258, 0x49 => 0x258, 0x4a => 0x258, 0x4b => 0x258, 0x4c => 0x258, 0x4d => 0x258, 0x4e => 0x258, 0x4f => 0x258, 0x50 => 0x258, 0x51 => 0x258, 0x52 => 0x258, 0x53 => 0x258, 0x54 => 0x258, 0x55 => 0x258, 0x56 => 0x258, 0x57 => 0x258, 0x58 => 0x258, 0x59 => 0x258, 0x5a => 0x258, 0x5b => 0x258, 0x5c => 0x258, 0x5d => 0x258, 0x5e => 0x258, 0x5f => 0x258, 0x60 => 0x258, 0x61 => 0x258, 0x62 => 0x258, 0x63 => 0x258, 0x64 => 0x258, 0x65 => 0x258, 0x66 => 0x258, 0x67 => 0x258, 0x68 => 0x258, 0x69 => 0x258, 0x6a => 0x258, 0x6b => 0x258, 0x6c => 0x258, 0x6d => 0x258, 0x6e => 0x258, 0x6f => 0x258, 0x70 => 0x258, 0x71 => 0x258, 0x72 => 0x258, 0x73 => 0x258, 0x74 => 0x258, 0x75 => 0x258, 0x76 => 0x258, 0x77 => 0x258, 0x78 => 0x258, 0x79 => 0x258, 0x7a => 0x258, 0x7b => 0x258, 0x7c => 0x258, 0x7d => 0x258, 0x7e => 0x258, 0x7f => 0x258, 0x80 => 0x258, 0x81 => 0x258, 0x82 => 0x258, 0x83 => 0x258, 0x84 => 0x258, 0x85 => 0x258, 0x86 => 0x258, 0x87 => 0x258, 0x88 => 0x258, 0x89 => 0x258, 0x8a => 0x258, 0x8b => 0x258, 0x8c => 0x258, 0x8d => 0x258, 0x8e => 0x258, 0x8f => 0x258, 0x90 => 0x258, 0x91 => 0x258, 0x92 => 0x258, 0x93 => 0x258, 0x94 => 0x258, 0x95 => 0x258, 0x96 => 0x258, 0x97 => 0x258, 0x98 => 0x258, 0x99 => 0x258, 0x9a => 0x258, 0x9b => 0x258, 0x9c => 0x258, 0x9d => 0x258, 0x9e => 0x258, 0x9f => 0x258, 0xa0 => 0x258, 0xa1 => 0x258, 0xa2 => 0x258, 0xa3 => 0x258, 0xa4 => 0x258, 0xa5 => 0x258, 0xa6 => 0x258, 0xa7 => 0x258, 0xa8 => 0x258, 0xa9 => 0x258, 0xaa => 0x258, 0xab => 0x258, 0xac => 0x258, 0xad => 0x258, 0xae => 0x258, 0xaf => 0x258, 0xb0 => 0x258, 0xb1 => 0x258, 0xb2 => 0x258, 0xb3 => 0x258, 0xb4 => 0x258, 0xb5 => 0x258, 0xb6 => 0x258, 0xb7 => 0x258, 0xb8 => 0x258, 0xb9 => 0x258, 0xba => 0x258, 0xbb => 0x258, 0xbc => 0x258, 0xbd => 0x258, 0xbe => 0x258, 0xbf => 0x258, 0xc0 => 0x258, 0xc1 => 0x258, 0xc2 => 0x258, 0xc3 => 0x258, 0xc4 => 0x258, 0xc5 => 0x258, 0xc6 => 0x258, 0xc7 => 0x258, 0xc8 => 0x258, 0xc9 => 0x258, 0xca => 0x258, 0xcb => 0x258, 0xcc => 0x258, 0xcd => 0x258, 0xce => 0x258, 0xcf => 0x258, 0xd0 => 0x258, 0xd1 => 0x258, 0xd2 => 0x258, 0xd3 => 0x258, 0xd4 => 0x258, 0xd5 => 0x258, 0xd6 => 0x258, 0xd7 => 0x258, 0xd8 => 0x258, 0xd9 => 0x258, 0xda => 0x258, 0xdb => 0x258, 0xdc => 0x258, 0xdd => 0x258, 0xde => 0x258, 0xdf => 0x258, 0xe0 => 0x258, 0xe1 => 0x258, 0xe2 => 0x258, 0xe3 => 0x258, 0xe4 => 0x258, 0xe5 => 0x258, 0xe6 => 0x258, 0xe7 => 0x258, 0xe8 => 0x258, 0xe9 => 0x258, 0xea => 0x258, 0xeb => 0x258, 0xec => 0x258, 0xed => 0x258, 0xee => 0x258, 0xef => 0x258, 0xf0 => 0x258, 0xf1 => 0x258, 0xf2 => 0x258, 0xf3 => 0x258, 0xf4 => 0x258, 0xf5 => 0x258, 0xf6 => 0x258, 0xf7 => 0x258, 0xf8 => 0x258, 0xf9 => 0x258, 0xfa => 0x258, 0xfb => 0x258, 0xfc => 0x258, 0xfd => 0x258, 0xfe => 0x258, 0xff => 0x258, 0x100 => 0x258, 0x101 => 0x258, 0x102 => 0x258, 0x103 => 0x258, 0x104 => 0x258, 0x105 => 0x258, 0x106 => 0x258, 0x107 => 0x258, 0x108 => 0x258, 0x109 => 0x258, 0x10a => 0x258, 0x10b => 0x258, 0x10c => 0x258, 0x10d => 0x258, 0x10e => 0x258, 0x10f => 0x258, 0x110 => 0x258, 0x111 => 0x258, 0x112 => 0x258, 0x113 => 0x258, 0x114 => 0x258, 0x115 => 0x258, 0x116 => 0x258, 0x117 => 0x258, 0x118 => 0x258, 0x119 => 0x258, 0x11a => 0x258, 0x11b => 0x258, 0x11c => 0x258, 0x11d => 0x258, 0x11e => 0x258, 0x11f => 0x258, 0x120 => 0x258, 0x121 => 0x258, 0x122 => 0x258, 0x123 => 0x258, 0x124 => 0x258, 0x125 => 0x258, 0x126 => 0x258, 0x127 => 0x258, 0x128 => 0x258, 0x129 => 0x258, 0x12a => 0x258, 0x12b => 0x258, 0x12c => 0x258, 0x12d => 0x258, 0x12e => 0x258, 0x12f => 0x258, 0x130 => 0x258, 0x131 => 0x258, 0x132 => 0x258, 0x133 => 0x258, 0x134 => 0x258, 0x135 => 0x258, 0x136 => 0x258, 0x137 => 0x258, 0x138 => 0x258, 0x139 => 0x258, 0x13a => 0x258, 0x13b => 0x258);
     $cmapData = array(0x20 => 0x1, 0x21 => 0x2, 0x22 => 0x3, 0x23 => 0x4, 0x24 => 0x5, 0x25 => 0x6, 0x26 => 0x7, 0x2019 => 0x8, 0x28 => 0x9, 0x29 => 0xa, 0x2a => 0xb, 0x2b => 0xc, 0x2c => 0xd, 0x2d => 0xe, 0x2e => 0xf, 0x2f => 0x10, 0x30 => 0x11, 0x31 => 0x12, 0x32 => 0x13, 0x33 => 0x14, 0x34 => 0x15, 0x35 => 0x16, 0x36 => 0x17, 0x37 => 0x18, 0x38 => 0x19, 0x39 => 0x1a, 0x3a => 0x1b, 0x3b => 0x1c, 0x3c => 0x1d, 0x3d => 0x1e, 0x3e => 0x1f, 0x3f => 0x20, 0x40 => 0x21, 0x41 => 0x22, 0x42 => 0x23, 0x43 => 0x24, 0x44 => 0x25, 0x45 => 0x26, 0x46 => 0x27, 0x47 => 0x28, 0x48 => 0x29, 0x49 => 0x2a, 0x4a => 0x2b, 0x4b => 0x2c, 0x4c => 0x2d, 0x4d => 0x2e, 0x4e => 0x2f, 0x4f => 0x30, 0x50 => 0x31, 0x51 => 0x32, 0x52 => 0x33, 0x53 => 0x34, 0x54 => 0x35, 0x55 => 0x36, 0x56 => 0x37, 0x57 => 0x38, 0x58 => 0x39, 0x59 => 0x3a, 0x5a => 0x3b, 0x5b => 0x3c, 0x5c => 0x3d, 0x5d => 0x3e, 0x5e => 0x3f, 0x5f => 0x40, 0x2018 => 0x41, 0x61 => 0x42, 0x62 => 0x43, 0x63 => 0x44, 0x64 => 0x45, 0x65 => 0x46, 0x66 => 0x47, 0x67 => 0x48, 0x68 => 0x49, 0x69 => 0x4a, 0x6a => 0x4b, 0x6b => 0x4c, 0x6c => 0x4d, 0x6d => 0x4e, 0x6e => 0x4f, 0x6f => 0x50, 0x70 => 0x51, 0x71 => 0x52, 0x72 => 0x53, 0x73 => 0x54, 0x74 => 0x55, 0x75 => 0x56, 0x76 => 0x57, 0x77 => 0x58, 0x78 => 0x59, 0x79 => 0x5a, 0x7a => 0x5b, 0x7b => 0x5c, 0x7c => 0x5d, 0x7d => 0x5e, 0x7e => 0x5f, 0xa1 => 0x60, 0xa2 => 0x61, 0xa3 => 0x62, 0x2044 => 0x63, 0xa5 => 0x64, 0x192 => 0x65, 0xa7 => 0x66, 0xa4 => 0x67, 0x27 => 0x68, 0x201c => 0x69, 0xab => 0x6a, 0x2039 => 0x6b, 0x203a => 0x6c, 0xfb01 => 0x6d, 0xfb02 => 0x6e, 0x2013 => 0x6f, 0x2020 => 0x70, 0x2021 => 0x71, 0xb7 => 0x72, 0xb6 => 0x73, 0x2022 => 0x74, 0x201a => 0x75, 0x201e => 0x76, 0x201d => 0x77, 0xbb => 0x78, 0x2026 => 0x79, 0x2030 => 0x7a, 0xbf => 0x7b, 0x60 => 0x7c, 0xb4 => 0x7d, 0x2c6 => 0x7e, 0x2dc => 0x7f, 0xaf => 0x80, 0x2d8 => 0x81, 0x2d9 => 0x82, 0xa8 => 0x83, 0x2da => 0x84, 0xb8 => 0x85, 0x2dd => 0x86, 0x2db => 0x87, 0x2c7 => 0x88, 0x2014 => 0x89, 0xc6 => 0x8a, 0xaa => 0x8b, 0x141 => 0x8c, 0xd8 => 0x8d, 0x152 => 0x8e, 0xba => 0x8f, 0xe6 => 0x90, 0x131 => 0x91, 0x142 => 0x92, 0xf8 => 0x93, 0x153 => 0x94, 0xdf => 0x95, 0xcf => 0x96, 0xe9 => 0x97, 0x103 => 0x98, 0x171 => 0x99, 0x11b => 0x9a, 0x178 => 0x9b, 0xf7 => 0x9c, 0xdd => 0x9d, 0xc2 => 0x9e, 0xe1 => 0x9f, 0xdb => 0xa0, 0xfd => 0xa1, 0x219 => 0xa2, 0xea => 0xa3, 0x16e => 0xa4, 0xdc => 0xa5, 0x105 => 0xa6, 0xda => 0xa7, 0x173 => 0xa8, 0xcb => 0xa9, 0x110 => 0xaa, 0xf6c3 => 0xab, 0xa9 => 0xac, 0x112 => 0xad, 0x10d => 0xae, 0xe5 => 0xaf, 0x145 => 0xb0, 0x13a => 0xb1, 0xe0 => 0xb2, 0x162 => 0xb3, 0x106 => 0xb4, 0xe3 => 0xb5, 0x116 => 0xb6, 0x161 => 0xb7, 0x15f => 0xb8, 0xed => 0xb9, 0x25ca => 0xba, 0x158 => 0xbb, 0x122 => 0xbc, 0xfb => 0xbd, 0xe2 => 0xbe, 0x100 => 0xbf, 0x159 => 0xc0, 0xe7 => 0xc1, 0x17b => 0xc2, 0xde => 0xc3, 0x14c => 0xc4, 0x154 => 0xc5, 0x15a => 0xc6, 0x10f => 0xc7, 0x16a => 0xc8, 0x16f => 0xc9, 0xb3 => 0xca, 0xd2 => 0xcb, 0xc0 => 0xcc, 0x102 => 0xcd, 0xd7 => 0xce, 0xfa => 0xcf, 0x164 => 0xd0, 0x2202 => 0xd1, 0xff => 0xd2, 0x143 => 0xd3, 0xee => 0xd4, 0xca => 0xd5, 0xe4 => 0xd6, 0xeb => 0xd7, 0x107 => 0xd8, 0x144 => 0xd9, 0x16b => 0xda, 0x147 => 0xdb, 0xcd => 0xdc, 0xb1 => 0xdd, 0xa6 => 0xde, 0xae => 0xdf, 0x11e => 0xe0, 0x130 => 0xe1, 0x2211 => 0xe2, 0xc8 => 0xe3, 0x155 => 0xe4, 0x14d => 0xe5, 0x179 => 0xe6, 0x17d => 0xe7, 0x2265 => 0xe8, 0xd0 => 0xe9, 0xc7 => 0xea, 0x13c => 0xeb, 0x165 => 0xec, 0x119 => 0xed, 0x172 => 0xee, 0xc1 => 0xef, 0xc4 => 0xf0, 0xe8 => 0xf1, 0x17a => 0xf2, 0x12f => 0xf3, 0xd3 => 0xf4, 0xf3 => 0xf5, 0x101 => 0xf6, 0x15b => 0xf7, 0xef => 0xf8, 0xd4 => 0xf9, 0xd9 => 0xfa, 0x2206 => 0xfb, 0xfe => 0xfc, 0xb2 => 0xfd, 0xd6 => 0xfe, 0xb5 => 0xff, 0xec => 0x100, 0x151 => 0x101, 0x118 => 0x102, 0x111 => 0x103, 0xbe => 0x104, 0x15e => 0x105, 0x13e => 0x106, 0x136 => 0x107, 0x139 => 0x108, 0x2122 => 0x109, 0x117 => 0x10a, 0xcc => 0x10b, 0x12a => 0x10c, 0x13d => 0x10d, 0xbd => 0x10e, 0x2264 => 0x10f, 0xf4 => 0x110, 0xf1 => 0x111, 0x170 => 0x112, 0xc9 => 0x113, 0x113 => 0x114, 0x11f => 0x115, 0xbc => 0x116, 0x160 => 0x117, 0x218 => 0x118, 0x150 => 0x119, 0xb0 => 0x11a, 0xf2 => 0x11b, 0x10c => 0x11c, 0xf9 => 0x11d, 0x221a => 0x11e, 0x10e => 0x11f, 0x157 => 0x120, 0xd1 => 0x121, 0xf5 => 0x122, 0x156 => 0x123, 0x13b => 0x124, 0xc3 => 0x125, 0x104 => 0x126, 0xc5 => 0x127, 0xd5 => 0x128, 0x17c => 0x129, 0x11a => 0x12a, 0x12e => 0x12b, 0x137 => 0x12c, 0x2212 => 0x12d, 0xce => 0x12e, 0x148 => 0x12f, 0x163 => 0x130, 0xac => 0x131, 0xf6 => 0x132, 0xfc => 0x133, 0x2260 => 0x134, 0x123 => 0x135, 0xf0 => 0x136, 0x17e => 0x137, 0x146 => 0x138, 0xb9 => 0x139, 0x12b => 0x13a, 0x20ac => 0x13b);
     $this->_cmap = Zend_Pdf_Cmap::cmapWithTypeData(Zend_Pdf_Cmap::TYPE_BYTE_ENCODING_STATIC, $cmapData);
     $this->_resource->BaseFont = new Zend_Pdf_Element_Name('Courier-Oblique');
 }