Файл: library/Zend/Pdf/Resource/Font/Simple/Standard/Symbol.php
Строк: 455
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Pdf
* @subpackage Fonts
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Symbol.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
/** Internally used classes */
require_once 'Zend/Pdf/Element/Name.php';
/** Zend_Pdf_Resource_Font_Simple_Standard */
require_once 'Zend/Pdf/Resource/Font/Simple/Standard.php';
/**
* Implementation for the standard PDF font Symbol.
*
* This class was generated automatically using the font information and metric
* data contained in the Adobe Font Metric (AFM) files, available here:
* {@link http://partners.adobe.com/public/developer/en/pdf/Core14_AFMs.zip}
*
* The PHP script used to generate this class can be found in the /tools
* directory of the framework distribution. If you need to make modifications to
* this class, chances are the same modifications are needed for the rest of the
* standard fonts. You should modify the script and regenerate the classes
* instead of changing this class file by hand.
*
* @package Zend_Pdf
* @subpackage Fonts
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Pdf_Resource_Font_Simple_Standard_Symbol extends Zend_Pdf_Resource_Font_Simple_Standard
{
/**** Instance Variables ****/
/**
* Array for conversion from local encoding to special font encoding.
* See {@link encodeString()}.
* @var array
*/
protected $_toFontEncoding = array(
0x20 => "x20", 0x21 => "x21", 0x2200 => "x22", 0x23 => "x23",
0x2203 => "x24", 0x25 => "x25", 0x26 => "x26", 0x220b => "x27",
0x28 => "x28", 0x29 => "x29", 0x2217 => "x2a", 0x2b => "x2b",
0x2c => "x2c", 0x2212 => "x2d", 0x2e => "x2e", 0x2f => "x2f",
0x30 => "x30", 0x31 => "x31", 0x32 => "x32", 0x33 => "x33",
0x34 => "x34", 0x35 => "x35", 0x36 => "x36", 0x37 => "x37",
0x38 => "x38", 0x39 => "x39", 0x3a => "x3a", 0x3b => "x3b",
0x3c => "x3c", 0x3d => "x3d", 0x3e => "x3e", 0x3f => "x3f",
0x2245 => "x40", 0x0391 => "x41", 0x0392 => "x42", 0x03a7 => "x43",
0x2206 => "x44", 0x0395 => "x45", 0x03a6 => "x46", 0x0393 => "x47",
0x0397 => "x48", 0x0399 => "x49", 0x03d1 => "x4a", 0x039a => "x4b",
0x039b => "x4c", 0x039c => "x4d", 0x039d => "x4e", 0x039f => "x4f",
0x03a0 => "x50", 0x0398 => "x51", 0x03a1 => "x52", 0x03a3 => "x53",
0x03a4 => "x54", 0x03a5 => "x55", 0x03c2 => "x56", 0x2126 => "x57",
0x039e => "x58", 0x03a8 => "x59", 0x0396 => "x5a", 0x5b => "x5b",
0x2234 => "x5c", 0x5d => "x5d", 0x22a5 => "x5e", 0x5f => "x5f",
0xf8e5 => "x60", 0x03b1 => "x61", 0x03b2 => "x62", 0x03c7 => "x63",
0x03b4 => "x64", 0x03b5 => "x65", 0x03c6 => "x66", 0x03b3 => "x67",
0x03b7 => "x68", 0x03b9 => "x69", 0x03d5 => "x6a", 0x03ba => "x6b",
0x03bb => "x6c", 0xb5 => "x6d", 0x03bd => "x6e", 0x03bf => "x6f",
0x03c0 => "x70", 0x03b8 => "x71", 0x03c1 => "x72", 0x03c3 => "x73",
0x03c4 => "x74", 0x03c5 => "x75", 0x03d6 => "x76", 0x03c9 => "x77",
0x03be => "x78", 0x03c8 => "x79", 0x03b6 => "x7a", 0x7b => "x7b",
0x7c => "x7c", 0x7d => "x7d", 0x223c => "x7e", 0x20ac => "xa0",
0x03d2 => "xa1", 0x2032 => "xa2", 0x2264 => "xa3", 0x2044 => "xa4",
0x221e => "xa5", 0x0192 => "xa6", 0x2663 => "xa7", 0x2666 => "xa8",
0x2665 => "xa9", 0x2660 => "xaa", 0x2194 => "xab", 0x2190 => "xac",
0x2191 => "xad", 0x2192 => "xae", 0x2193 => "xaf", 0xb0 => "xb0",
0xb1 => "xb1", 0x2033 => "xb2", 0x2265 => "xb3", 0xd7 => "xb4",
0x221d => "xb5", 0x2202 => "xb6", 0x2022 => "xb7", 0xf7 => "xb8",
0x2260 => "xb9", 0x2261 => "xba", 0x2248 => "xbb", 0x2026 => "xbc",
0xf8e6 => "xbd", 0xf8e7 => "xbe", 0x21b5 => "xbf", 0x2135 => "xc0",
0x2111 => "xc1", 0x211c => "xc2", 0x2118 => "xc3", 0x2297 => "xc4",
0x2295 => "xc5", 0x2205 => "xc6", 0x2229 => "xc7", 0x222a => "xc8",
0x2283 => "xc9", 0x2287 => "xca", 0x2284 => "xcb", 0x2282 => "xcc",
0x2286 => "xcd", 0x2208 => "xce", 0x2209 => "xcf", 0x2220 => "xd0",
0x2207 => "xd1", 0xf6da => "xd2", 0xf6d9 => "xd3", 0xf6db => "xd4",
0x220f => "xd5", 0x221a => "xd6", 0x22c5 => "xd7", 0xac => "xd8",
0x2227 => "xd9", 0x2228 => "xda", 0x21d4 => "xdb", 0x21d0 => "xdc",
0x21d1 => "xdd", 0x21d2 => "xde", 0x21d3 => "xdf", 0x25ca => "xe0",
0x2329 => "xe1", 0xf8e8 => "xe2", 0xf8e9 => "xe3", 0xf8ea => "xe4",
0x2211 => "xe5", 0xf8eb => "xe6", 0xf8ec => "xe7", 0xf8ed => "xe8",
0xf8ee => "xe9", 0xf8ef => "xea", 0xf8f0 => "xeb", 0xf8f1 => "xec",
0xf8f2 => "xed", 0xf8f3 => "xee", 0xf8f4 => "xef", 0x232a => "xf1",
0x222b => "xf2", 0x2320 => "xf3", 0xf8f5 => "xf4", 0x2321 => "xf5",
0xf8f6 => "xf6", 0xf8f7 => "xf7", 0xf8f8 => "xf8", 0xf8f9 => "xf9",
0xf8fa => "xfa", 0xf8fb => "xfb", 0xf8fc => "xfc", 0xf8fd => "xfd",
0xf8fe => "xfe");
/**
* Array for conversion from special font encoding to local encoding.
* See {@link decodeString()}.
* @var array
*/
protected $_fromFontEncoding = array(
0x20 => "x00x20", 0x21 => "x00x21", 0x22 => "x22x00",
0x23 => "x00x23", 0x24 => "x22x03", 0x25 => "x00x25",
0x26 => "x00x26", 0x27 => "x22x0b", 0x28 => "x00x28",
0x29 => "x00x29", 0x2a => "x22x17", 0x2b => "x00x2b",
0x2c => "x00x2c", 0x2d => "x22x12", 0x2e => "x00x2e",
0x2f => "x00x2f", 0x30 => "x00x30", 0x31 => "x00x31",
0x32 => "x00x32", 0x33 => "x00x33", 0x34 => "x00x34",
0x35 => "x00x35", 0x36 => "x00x36", 0x37 => "x00x37",
0x38 => "x00x38", 0x39 => "x00x39", 0x3a => "x00x3a",
0x3b => "x00x3b", 0x3c => "x00x3c", 0x3d => "x00x3d",
0x3e => "x00x3e", 0x3f => "x00x3f", 0x40 => "x22x45",
0x41 => "x03x91", 0x42 => "x03x92", 0x43 => "x03xa7",
0x44 => "x22x06", 0x45 => "x03x95", 0x46 => "x03xa6",
0x47 => "x03x93", 0x48 => "x03x97", 0x49 => "x03x99",
0x4a => "x03xd1", 0x4b => "x03x9a", 0x4c => "x03x9b",
0x4d => "x03x9c", 0x4e => "x03x9d", 0x4f => "x03x9f",
0x50 => "x03xa0", 0x51 => "x03x98", 0x52 => "x03xa1",
0x53 => "x03xa3", 0x54 => "x03xa4", 0x55 => "x03xa5",
0x56 => "x03xc2", 0x57 => "x21x26", 0x58 => "x03x9e",
0x59 => "x03xa8", 0x5a => "x03x96", 0x5b => "x00x5b",
0x5c => "x22x34", 0x5d => "x00x5d", 0x5e => "x22xa5",
0x5f => "x00x5f", 0x60 => "xf8xe5", 0x61 => "x03xb1",
0x62 => "x03xb2", 0x63 => "x03xc7", 0x64 => "x03xb4",
0x65 => "x03xb5", 0x66 => "x03xc6", 0x67 => "x03xb3",
0x68 => "x03xb7", 0x69 => "x03xb9", 0x6a => "x03xd5",
0x6b => "x03xba", 0x6c => "x03xbb", 0x6d => "x00xb5",
0x6e => "x03xbd", 0x6f => "x03xbf", 0x70 => "x03xc0",
0x71 => "x03xb8", 0x72 => "x03xc1", 0x73 => "x03xc3",
0x74 => "x03xc4", 0x75 => "x03xc5", 0x76 => "x03xd6",
0x77 => "x03xc9", 0x78 => "x03xbe", 0x79 => "x03xc8",
0x7a => "x03xb6", 0x7b => "x00x7b", 0x7c => "x00x7c",
0x7d => "x00x7d", 0x7e => "x22x3c", 0xa0 => "x20xac",
0xa1 => "x03xd2", 0xa2 => "x20x32", 0xa3 => "x22x64",
0xa4 => "x20x44", 0xa5 => "x22x1e", 0xa6 => "x01x92",
0xa7 => "x26x63", 0xa8 => "x26x66", 0xa9 => "x26x65",
0xaa => "x26x60", 0xab => "x21x94", 0xac => "x21x90",
0xad => "x21x91", 0xae => "x21x92", 0xaf => "x21x93",
0xb0 => "x00xb0", 0xb1 => "x00xb1", 0xb2 => "x20x33",
0xb3 => "x22x65", 0xb4 => "x00xd7", 0xb5 => "x22x1d",
0xb6 => "x22x02", 0xb7 => "x20x22", 0xb8 => "x00xf7",
0xb9 => "x22x60", 0xba => "x22x61", 0xbb => "x22x48",
0xbc => "x20x26", 0xbd => "xf8xe6", 0xbe => "xf8xe7",
0xbf => "x21xb5", 0xc0 => "x21x35", 0xc1 => "x21x11",
0xc2 => "x21x1c", 0xc3 => "x21x18", 0xc4 => "x22x97",
0xc5 => "x22x95", 0xc6 => "x22x05", 0xc7 => "x22x29",
0xc8 => "x22x2a", 0xc9 => "x22x83", 0xca => "x22x87",
0xcb => "x22x84", 0xcc => "x22x82", 0xcd => "x22x86",
0xce => "x22x08", 0xcf => "x22x09", 0xd0 => "x22x20",
0xd1 => "x22x07", 0xd2 => "xf6xda", 0xd3 => "xf6xd9",
0xd4 => "xf6xdb", 0xd5 => "x22x0f", 0xd6 => "x22x1a",
0xd7 => "x22xc5", 0xd8 => "x00xac", 0xd9 => "x22x27",
0xda => "x22x28", 0xdb => "x21xd4", 0xdc => "x21xd0",
0xdd => "x21xd1", 0xde => "x21xd2", 0xdf => "x21xd3",
0xe0 => "x25xca", 0xe1 => "x23x29", 0xe2 => "xf8xe8",
0xe3 => "xf8xe9", 0xe4 => "xf8xea", 0xe5 => "x22x11",
0xe6 => "xf8xeb", 0xe7 => "xf8xec", 0xe8 => "xf8xed",
0xe9 => "xf8xee", 0xea => "xf8xef", 0xeb => "xf8xf0",
0xec => "xf8xf1", 0xed => "xf8xf2", 0xee => "xf8xf3",
0xef => "xf8xf4", 0xf1 => "x23x2a", 0xf2 => "x22x2b",
0xf3 => "x23x20", 0xf4 => "xf8xf5", 0xf5 => "x23x21",
0xf6 => "xf8xf6", 0xf7 => "xf8xf7", 0xf8 => "xf8xf8",
0xf9 => "xf8xf9", 0xfa => "xf8xfa", 0xfb => "xf8xfb",
0xfc => "xf8xfc", 0xfd => "xf8xfd", 0xfe => "xf8xfe",
);
/**** Public Interface ****/
/* Object Lifecycle */
/**
* 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'] =
"x00x43x00x6fx00x70x00x79x00x72x00x69x00x67x00x68x00"
. "x74x00x20x00x28x00x63x00x29x00x20x00x31x00x39x00"
. "x38x00x35x00x2cx00x20x00x31x00x39x00x38x00x37x00"
. "x2cx00x20x00x31x00x39x00x38x00x39x00x2cx00x20x00"
. "x31x00x39x00x39x00x30x00x2cx00x20x00x31x00x39x00"
. "x39x00x37x00x20x00x41x00x64x00x6fx00x62x00x65x00"
. "x20x00x53x00x79x00x73x00x74x00x65x00x6dx00x73x00"
. "x20x00x49x00x6ex00x63x00x6fx00x72x00x70x00x6fx00"
. "x72x00x61x00x74x00x65x00x64x00x2ex00x20x00x41x00"
. "x6cx00x6cx00x20x00x72x00x69x00x67x00x68x00x74x00"
. "x73x00x20x00x72x00x65x00x73x00x65x00x72x00x76x00"
. "x65x00x64x00x2e";
$this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] =
"x00x53x00x79x00x6dx00x62x00x6fx00x6c";
$this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] =
"x00x4dx00x65x00x64x00x69x00x75x00x6d";
$this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] =
"x00x34x00x33x00x30x00x36x00x34";
$this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] =
"x00x53x00x79x00x6dx00x62x00x6fx00x6cx00x20x00x4dx00"
. "x65x00x64x00x69x00x75x00x6d";
$this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] =
"x00x30x00x30x00x31x00x2ex00x30x00x30x00x38";
$this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] =
"x00x53x00x79x00x6dx00x62x00x6fx00x6c";
$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(
0x00 => 0x01f4, 0x01 => 0xfa, 0x02 => 0x014d, 0x03 => 0x02c9,
0x04 => 0x01f4, 0x05 => 0x0225, 0x06 => 0x0341, 0x07 => 0x030a,
0x08 => 0x01b7, 0x09 => 0x014d, 0x0a => 0x014d, 0x0b => 0x01f4,
0x0c => 0x0225, 0x0d => 0xfa, 0x0e => 0x0225, 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 => 0x0116,
0x1c => 0x0116, 0x1d => 0x0225, 0x1e => 0x0225, 0x1f => 0x0225,
0x20 => 0x01bc, 0x21 => 0x0225, 0x22 => 0x02d2, 0x23 => 0x029b,
0x24 => 0x02d2, 0x25 => 0x0264, 0x26 => 0x0263, 0x27 => 0x02fb,
0x28 => 0x025b, 0x29 => 0x02d2, 0x2a => 0x014d, 0x2b => 0x0277,
0x2c => 0x02d2, 0x2d => 0x02ae, 0x2e => 0x0379, 0x2f => 0x02d2,
0x30 => 0x02d2, 0x31 => 0x0300, 0x32 => 0x02e5, 0x33 => 0x022c,
0x34 => 0x0250, 0x35 => 0x0263, 0x36 => 0x02b2, 0x37 => 0x01b7,
0x38 => 0x0300, 0x39 => 0x0285, 0x3a => 0x031b, 0x3b => 0x0263,
0x3c => 0x014d, 0x3d => 0x035f, 0x3e => 0x014d, 0x3f => 0x0292,
0x40 => 0x01f4, 0x41 => 0x01f4, 0x42 => 0x0277, 0x43 => 0x0225,
0x44 => 0x0225, 0x45 => 0x01ee, 0x46 => 0x01b7, 0x47 => 0x0209,
0x48 => 0x019b, 0x49 => 0x025b, 0x4a => 0x0149, 0x4b => 0x025b,
0x4c => 0x0225, 0x4d => 0x0225, 0x4e => 0x0240, 0x4f => 0x0209,
0x50 => 0x0225, 0x51 => 0x0225, 0x52 => 0x0209, 0x53 => 0x0225,
0x54 => 0x025b, 0x55 => 0x01b7, 0x56 => 0x0240, 0x57 => 0x02c9,
0x58 => 0x02ae, 0x59 => 0x01ed, 0x5a => 0x02ae, 0x5b => 0x01ee,
0x5c => 0x01e0, 0x5d => 0xc8, 0x5e => 0x01e0, 0x5f => 0x0225,
0x60 => 0x02ee, 0x61 => 0x026c, 0x62 => 0xf7, 0x63 => 0x0225,
0x64 => 0xa7, 0x65 => 0x02c9, 0x66 => 0x01f4, 0x67 => 0x02f1,
0x68 => 0x02f1, 0x69 => 0x02f1, 0x6a => 0x02f1, 0x6b => 0x0412,
0x6c => 0x03db, 0x6d => 0x025b, 0x6e => 0x03db, 0x6f => 0x025b,
0x70 => 0x0190, 0x71 => 0x0225, 0x72 => 0x019b, 0x73 => 0x0225,
0x74 => 0x0225, 0x75 => 0x02c9, 0x76 => 0x01ee, 0x77 => 0x01cc,
0x78 => 0x0225, 0x79 => 0x0225, 0x7a => 0x0225, 0x7b => 0x0225,
0x7c => 0x03e8, 0x7d => 0x025b, 0x7e => 0x03e8, 0x7f => 0x0292,
0x80 => 0x0337, 0x81 => 0x02ae, 0x82 => 0x031b, 0x83 => 0x03db,
0x84 => 0x0300, 0x85 => 0x0300, 0x86 => 0x0337, 0x87 => 0x0300,
0x88 => 0x0300, 0x89 => 0x02c9, 0x8a => 0x02c9, 0x8b => 0x02c9,
0x8c => 0x02c9, 0x8d => 0x02c9, 0x8e => 0x02c9, 0x8f => 0x02c9,
0x90 => 0x0300, 0x91 => 0x02c9, 0x92 => 0x0316, 0x93 => 0x0316,
0x94 => 0x037a, 0x95 => 0x0337, 0x96 => 0x0225, 0x97 => 0xfa,
0x98 => 0x02c9, 0x99 => 0x025b, 0x9a => 0x025b, 0x9b => 0x0412,
0x9c => 0x03db, 0x9d => 0x025b, 0x9e => 0x03db, 0x9f => 0x025b,
0xa0 => 0x01ee, 0xa1 => 0x0149, 0xa2 => 0x0316, 0xa3 => 0x0316,
0xa4 => 0x0312, 0xa5 => 0x02c9, 0xa6 => 0x0180, 0xa7 => 0x0180,
0xa8 => 0x0180, 0xa9 => 0x0180, 0xaa => 0x0180, 0xab => 0x0180,
0xac => 0x01ee, 0xad => 0x01ee, 0xae => 0x01ee, 0xaf => 0x01ee,
0xb0 => 0x0149, 0xb1 => 0x0112, 0xb2 => 0x02ae, 0xb3 => 0x02ae,
0xb4 => 0x02ae, 0xb5 => 0x0180, 0xb6 => 0x0180, 0xb7 => 0x0180,
0xb8 => 0x0180, 0xb9 => 0x0180, 0xba => 0x0180, 0xbb => 0x01ee,
0xbc => 0x01ee, 0xbd => 0x01ee, 0xbe => 0x0316);
/* The cmap table is similarly synthesized.
*/
$cmapData = array(
0x20 => 0x01, 0x21 => 0x02, 0x2200 => 0x03, 0x23 => 0x04,
0x2203 => 0x05, 0x25 => 0x06, 0x26 => 0x07, 0x220b => 0x08,
0x28 => 0x09, 0x29 => 0x0a, 0x2217 => 0x0b, 0x2b => 0x0c,
0x2c => 0x0d, 0x2212 => 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,
0x2245 => 0x21, 0x0391 => 0x22, 0x0392 => 0x23, 0x03a7 => 0x24,
0x2206 => 0x25, 0x0395 => 0x26, 0x03a6 => 0x27, 0x0393 => 0x28,
0x0397 => 0x29, 0x0399 => 0x2a, 0x03d1 => 0x2b, 0x039a => 0x2c,
0x039b => 0x2d, 0x039c => 0x2e, 0x039d => 0x2f, 0x039f => 0x30,
0x03a0 => 0x31, 0x0398 => 0x32, 0x03a1 => 0x33, 0x03a3 => 0x34,
0x03a4 => 0x35, 0x03a5 => 0x36, 0x03c2 => 0x37, 0x2126 => 0x38,
0x039e => 0x39, 0x03a8 => 0x3a, 0x0396 => 0x3b, 0x5b => 0x3c,
0x2234 => 0x3d, 0x5d => 0x3e, 0x22a5 => 0x3f, 0x5f => 0x40,
0xf8e5 => 0x41, 0x03b1 => 0x42, 0x03b2 => 0x43, 0x03c7 => 0x44,
0x03b4 => 0x45, 0x03b5 => 0x46, 0x03c6 => 0x47, 0x03b3 => 0x48,
0x03b7 => 0x49, 0x03b9 => 0x4a, 0x03d5 => 0x4b, 0x03ba => 0x4c,
0x03bb => 0x4d, 0xb5 => 0x4e, 0x03bd => 0x4f, 0x03bf => 0x50,
0x03c0 => 0x51, 0x03b8 => 0x52, 0x03c1 => 0x53, 0x03c3 => 0x54,
0x03c4 => 0x55, 0x03c5 => 0x56, 0x03d6 => 0x57, 0x03c9 => 0x58,
0x03be => 0x59, 0x03c8 => 0x5a, 0x03b6 => 0x5b, 0x7b => 0x5c,
0x7c => 0x5d, 0x7d => 0x5e, 0x223c => 0x5f, 0x20ac => 0x60,
0x03d2 => 0x61, 0x2032 => 0x62, 0x2264 => 0x63, 0x2044 => 0x64,
0x221e => 0x65, 0x0192 => 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);
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('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.
*/
$this->_resource->Encoding = null;
}
/* Information and Conversion Methods */
/**
* Convert string encoding from local encoding to font encoding. Overridden
* to defeat the conversion behavior for this ornamental font.
*
* @param string $string
* @param string $charEncoding Character encoding of source text.
* @return string
*/
public function encodeString($string, $charEncoding)
{
/* This isn't the optimal time to perform this conversion, but it must
* live here until the remainder of the layout code is completed. This,
* and the $charEncoding parameter, will go away soon...
*/
if ($charEncoding != 'UTF-16BE') {
$string = iconv($charEncoding, 'UTF-16BE', $string);
}
/**
* @todo Properly handle characters encoded as surrogate pairs.
*/
$encodedString = '';
for ($i = 0; $i < strlen($string); $i++) {
$characterCode = (ord($string[$i++]) << 8) | ord($string[$i]);
if (isset($this->_toFontEncoding[$characterCode])) {
$encodedString .= $this->_toFontEncoding[$characterCode];
} else {
/* For now, mimic the behavior in Zend_Pdf_Font::encodeString()
* where unknown characters are removed completely. This is not
* perfect, but we should be consistent. In a future revision,
* we will use the well-known substitution character 0x1a
* (Control-Z).
*/
}
}
return $encodedString;
}
/**
* Convert string encoding from font encoding to local encoding. Overridden
* to defeat the conversion behavior for this ornamental font.
*
* @param string $string
* @param string $charEncoding Character encoding of resulting text.
* @return string
*/
public function decodeString($string, $charEncoding)
{
$decodedString = '';
for ($i = 0; $i < strlen($string); $i++) {
$characterCode = ord($string[$i]);
if (isset($this->_fromFontEncoding[$characterCode])) {
$decodedString .= $this->_fromFontEncoding[$characterCode];
} else {
/* For now, mimic the behavior in Zend_Pdf_Font::encodeString()
* where unknown characters are removed completely. This is not
* perfect, but we should be consistent. In a future revision,
* we will use the Unicode substitution character (U+FFFD).
*/
}
}
if ($charEncoding != 'UTF-16BE') {
$decodedString = iconv('UTF-16BE', $charEncoding, $decodedString);
}
return $decodedString;
}
/**
* Converts a Latin-encoded string that fakes the font's internal encoding
* to the proper Unicode characters, in UTF-16BE encoding.
*
* Used to maintain backwards compatibility with the 20 year-old legacy
* method of using this font, which is still employed by recent versions of
* some popular word processors.
*
* Note that using this method adds overhead due to the additional
* character conversion. Don't use this for new code; it is more efficient
* to use the appropriate Unicode characters directly.
*
* @param string $string
* @param string $charEncoding (optional) Character encoding of source
* string. Defaults to current locale.
* @return string
*/
public function toUnicode($string, $charEncoding = '')
{
/* When using these faked strings, the closest match to the font's
* internal encoding is ISO-8859-1.
*/
if ($charEncoding != 'ISO-8859-1') {
$string = iconv($charEncoding, 'ISO-8859-1', $string);
}
return $this->decodeString($string, 'UTF-16BE');
}
}