Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Symbol.php
Go to the documentation of this file.
1 <?php
25 #require_once 'Zend/Pdf/Element/Name.php';
26 
27 
29 #require_once 'Zend/Pdf/Resource/Font/Simple/Standard.php';
30 
50 {
51  /**** Instance Variables ****/
52 
53 
59  protected $_toFontEncoding = array(
60  0x20 => "\x20", 0x21 => "\x21", 0x2200 => "\x22", 0x23 => "\x23",
61  0x2203 => "\x24", 0x25 => "\x25", 0x26 => "\x26", 0x220b => "\x27",
62  0x28 => "\x28", 0x29 => "\x29", 0x2217 => "\x2a", 0x2b => "\x2b",
63  0x2c => "\x2c", 0x2212 => "\x2d", 0x2e => "\x2e", 0x2f => "\x2f",
64  0x30 => "\x30", 0x31 => "\x31", 0x32 => "\x32", 0x33 => "\x33",
65  0x34 => "\x34", 0x35 => "\x35", 0x36 => "\x36", 0x37 => "\x37",
66  0x38 => "\x38", 0x39 => "\x39", 0x3a => "\x3a", 0x3b => "\x3b",
67  0x3c => "\x3c", 0x3d => "\x3d", 0x3e => "\x3e", 0x3f => "\x3f",
68  0x2245 => "\x40", 0x0391 => "\x41", 0x0392 => "\x42", 0x03a7 => "\x43",
69  0x2206 => "\x44", 0x0395 => "\x45", 0x03a6 => "\x46", 0x0393 => "\x47",
70  0x0397 => "\x48", 0x0399 => "\x49", 0x03d1 => "\x4a", 0x039a => "\x4b",
71  0x039b => "\x4c", 0x039c => "\x4d", 0x039d => "\x4e", 0x039f => "\x4f",
72  0x03a0 => "\x50", 0x0398 => "\x51", 0x03a1 => "\x52", 0x03a3 => "\x53",
73  0x03a4 => "\x54", 0x03a5 => "\x55", 0x03c2 => "\x56", 0x2126 => "\x57",
74  0x039e => "\x58", 0x03a8 => "\x59", 0x0396 => "\x5a", 0x5b => "\x5b",
75  0x2234 => "\x5c", 0x5d => "\x5d", 0x22a5 => "\x5e", 0x5f => "\x5f",
76  0xf8e5 => "\x60", 0x03b1 => "\x61", 0x03b2 => "\x62", 0x03c7 => "\x63",
77  0x03b4 => "\x64", 0x03b5 => "\x65", 0x03c6 => "\x66", 0x03b3 => "\x67",
78  0x03b7 => "\x68", 0x03b9 => "\x69", 0x03d5 => "\x6a", 0x03ba => "\x6b",
79  0x03bb => "\x6c", 0xb5 => "\x6d", 0x03bd => "\x6e", 0x03bf => "\x6f",
80  0x03c0 => "\x70", 0x03b8 => "\x71", 0x03c1 => "\x72", 0x03c3 => "\x73",
81  0x03c4 => "\x74", 0x03c5 => "\x75", 0x03d6 => "\x76", 0x03c9 => "\x77",
82  0x03be => "\x78", 0x03c8 => "\x79", 0x03b6 => "\x7a", 0x7b => "\x7b",
83  0x7c => "\x7c", 0x7d => "\x7d", 0x223c => "\x7e", 0x20ac => "\xa0",
84  0x03d2 => "\xa1", 0x2032 => "\xa2", 0x2264 => "\xa3", 0x2044 => "\xa4",
85  0x221e => "\xa5", 0x0192 => "\xa6", 0x2663 => "\xa7", 0x2666 => "\xa8",
86  0x2665 => "\xa9", 0x2660 => "\xaa", 0x2194 => "\xab", 0x2190 => "\xac",
87  0x2191 => "\xad", 0x2192 => "\xae", 0x2193 => "\xaf", 0xb0 => "\xb0",
88  0xb1 => "\xb1", 0x2033 => "\xb2", 0x2265 => "\xb3", 0xd7 => "\xb4",
89  0x221d => "\xb5", 0x2202 => "\xb6", 0x2022 => "\xb7", 0xf7 => "\xb8",
90  0x2260 => "\xb9", 0x2261 => "\xba", 0x2248 => "\xbb", 0x2026 => "\xbc",
91  0xf8e6 => "\xbd", 0xf8e7 => "\xbe", 0x21b5 => "\xbf", 0x2135 => "\xc0",
92  0x2111 => "\xc1", 0x211c => "\xc2", 0x2118 => "\xc3", 0x2297 => "\xc4",
93  0x2295 => "\xc5", 0x2205 => "\xc6", 0x2229 => "\xc7", 0x222a => "\xc8",
94  0x2283 => "\xc9", 0x2287 => "\xca", 0x2284 => "\xcb", 0x2282 => "\xcc",
95  0x2286 => "\xcd", 0x2208 => "\xce", 0x2209 => "\xcf", 0x2220 => "\xd0",
96  0x2207 => "\xd1", 0xf6da => "\xd2", 0xf6d9 => "\xd3", 0xf6db => "\xd4",
97  0x220f => "\xd5", 0x221a => "\xd6", 0x22c5 => "\xd7", 0xac => "\xd8",
98  0x2227 => "\xd9", 0x2228 => "\xda", 0x21d4 => "\xdb", 0x21d0 => "\xdc",
99  0x21d1 => "\xdd", 0x21d2 => "\xde", 0x21d3 => "\xdf", 0x25ca => "\xe0",
100  0x2329 => "\xe1", 0xf8e8 => "\xe2", 0xf8e9 => "\xe3", 0xf8ea => "\xe4",
101  0x2211 => "\xe5", 0xf8eb => "\xe6", 0xf8ec => "\xe7", 0xf8ed => "\xe8",
102  0xf8ee => "\xe9", 0xf8ef => "\xea", 0xf8f0 => "\xeb", 0xf8f1 => "\xec",
103  0xf8f2 => "\xed", 0xf8f3 => "\xee", 0xf8f4 => "\xef", 0x232a => "\xf1",
104  0x222b => "\xf2", 0x2320 => "\xf3", 0xf8f5 => "\xf4", 0x2321 => "\xf5",
105  0xf8f6 => "\xf6", 0xf8f7 => "\xf7", 0xf8f8 => "\xf8", 0xf8f9 => "\xf9",
106  0xf8fa => "\xfa", 0xf8fb => "\xfb", 0xf8fc => "\xfc", 0xf8fd => "\xfd",
107  0xf8fe => "\xfe");
108 
114  protected $_fromFontEncoding = array(
115  0x20 => "\x00\x20", 0x21 => "\x00\x21", 0x22 => "\x22\x00",
116  0x23 => "\x00\x23", 0x24 => "\x22\x03", 0x25 => "\x00\x25",
117  0x26 => "\x00\x26", 0x27 => "\x22\x0b", 0x28 => "\x00\x28",
118  0x29 => "\x00\x29", 0x2a => "\x22\x17", 0x2b => "\x00\x2b",
119  0x2c => "\x00\x2c", 0x2d => "\x22\x12", 0x2e => "\x00\x2e",
120  0x2f => "\x00\x2f", 0x30 => "\x00\x30", 0x31 => "\x00\x31",
121  0x32 => "\x00\x32", 0x33 => "\x00\x33", 0x34 => "\x00\x34",
122  0x35 => "\x00\x35", 0x36 => "\x00\x36", 0x37 => "\x00\x37",
123  0x38 => "\x00\x38", 0x39 => "\x00\x39", 0x3a => "\x00\x3a",
124  0x3b => "\x00\x3b", 0x3c => "\x00\x3c", 0x3d => "\x00\x3d",
125  0x3e => "\x00\x3e", 0x3f => "\x00\x3f", 0x40 => "\x22\x45",
126  0x41 => "\x03\x91", 0x42 => "\x03\x92", 0x43 => "\x03\xa7",
127  0x44 => "\x22\x06", 0x45 => "\x03\x95", 0x46 => "\x03\xa6",
128  0x47 => "\x03\x93", 0x48 => "\x03\x97", 0x49 => "\x03\x99",
129  0x4a => "\x03\xd1", 0x4b => "\x03\x9a", 0x4c => "\x03\x9b",
130  0x4d => "\x03\x9c", 0x4e => "\x03\x9d", 0x4f => "\x03\x9f",
131  0x50 => "\x03\xa0", 0x51 => "\x03\x98", 0x52 => "\x03\xa1",
132  0x53 => "\x03\xa3", 0x54 => "\x03\xa4", 0x55 => "\x03\xa5",
133  0x56 => "\x03\xc2", 0x57 => "\x21\x26", 0x58 => "\x03\x9e",
134  0x59 => "\x03\xa8", 0x5a => "\x03\x96", 0x5b => "\x00\x5b",
135  0x5c => "\x22\x34", 0x5d => "\x00\x5d", 0x5e => "\x22\xa5",
136  0x5f => "\x00\x5f", 0x60 => "\xf8\xe5", 0x61 => "\x03\xb1",
137  0x62 => "\x03\xb2", 0x63 => "\x03\xc7", 0x64 => "\x03\xb4",
138  0x65 => "\x03\xb5", 0x66 => "\x03\xc6", 0x67 => "\x03\xb3",
139  0x68 => "\x03\xb7", 0x69 => "\x03\xb9", 0x6a => "\x03\xd5",
140  0x6b => "\x03\xba", 0x6c => "\x03\xbb", 0x6d => "\x00\xb5",
141  0x6e => "\x03\xbd", 0x6f => "\x03\xbf", 0x70 => "\x03\xc0",
142  0x71 => "\x03\xb8", 0x72 => "\x03\xc1", 0x73 => "\x03\xc3",
143  0x74 => "\x03\xc4", 0x75 => "\x03\xc5", 0x76 => "\x03\xd6",
144  0x77 => "\x03\xc9", 0x78 => "\x03\xbe", 0x79 => "\x03\xc8",
145  0x7a => "\x03\xb6", 0x7b => "\x00\x7b", 0x7c => "\x00\x7c",
146  0x7d => "\x00\x7d", 0x7e => "\x22\x3c", 0xa0 => "\x20\xac",
147  0xa1 => "\x03\xd2", 0xa2 => "\x20\x32", 0xa3 => "\x22\x64",
148  0xa4 => "\x20\x44", 0xa5 => "\x22\x1e", 0xa6 => "\x01\x92",
149  0xa7 => "\x26\x63", 0xa8 => "\x26\x66", 0xa9 => "\x26\x65",
150  0xaa => "\x26\x60", 0xab => "\x21\x94", 0xac => "\x21\x90",
151  0xad => "\x21\x91", 0xae => "\x21\x92", 0xaf => "\x21\x93",
152  0xb0 => "\x00\xb0", 0xb1 => "\x00\xb1", 0xb2 => "\x20\x33",
153  0xb3 => "\x22\x65", 0xb4 => "\x00\xd7", 0xb5 => "\x22\x1d",
154  0xb6 => "\x22\x02", 0xb7 => "\x20\x22", 0xb8 => "\x00\xf7",
155  0xb9 => "\x22\x60", 0xba => "\x22\x61", 0xbb => "\x22\x48",
156  0xbc => "\x20\x26", 0xbd => "\xf8\xe6", 0xbe => "\xf8\xe7",
157  0xbf => "\x21\xb5", 0xc0 => "\x21\x35", 0xc1 => "\x21\x11",
158  0xc2 => "\x21\x1c", 0xc3 => "\x21\x18", 0xc4 => "\x22\x97",
159  0xc5 => "\x22\x95", 0xc6 => "\x22\x05", 0xc7 => "\x22\x29",
160  0xc8 => "\x22\x2a", 0xc9 => "\x22\x83", 0xca => "\x22\x87",
161  0xcb => "\x22\x84", 0xcc => "\x22\x82", 0xcd => "\x22\x86",
162  0xce => "\x22\x08", 0xcf => "\x22\x09", 0xd0 => "\x22\x20",
163  0xd1 => "\x22\x07", 0xd2 => "\xf6\xda", 0xd3 => "\xf6\xd9",
164  0xd4 => "\xf6\xdb", 0xd5 => "\x22\x0f", 0xd6 => "\x22\x1a",
165  0xd7 => "\x22\xc5", 0xd8 => "\x00\xac", 0xd9 => "\x22\x27",
166  0xda => "\x22\x28", 0xdb => "\x21\xd4", 0xdc => "\x21\xd0",
167  0xdd => "\x21\xd1", 0xde => "\x21\xd2", 0xdf => "\x21\xd3",
168  0xe0 => "\x25\xca", 0xe1 => "\x23\x29", 0xe2 => "\xf8\xe8",
169  0xe3 => "\xf8\xe9", 0xe4 => "\xf8\xea", 0xe5 => "\x22\x11",
170  0xe6 => "\xf8\xeb", 0xe7 => "\xf8\xec", 0xe8 => "\xf8\xed",
171  0xe9 => "\xf8\xee", 0xea => "\xf8\xef", 0xeb => "\xf8\xf0",
172  0xec => "\xf8\xf1", 0xed => "\xf8\xf2", 0xee => "\xf8\xf3",
173  0xef => "\xf8\xf4", 0xf1 => "\x23\x2a", 0xf2 => "\x22\x2b",
174  0xf3 => "\x23\x20", 0xf4 => "\xf8\xf5", 0xf5 => "\x23\x21",
175  0xf6 => "\xf8\xf6", 0xf7 => "\xf8\xf7", 0xf8 => "\xf8\xf8",
176  0xf9 => "\xf8\xf9", 0xfa => "\xf8\xfa", 0xfb => "\xf8\xfb",
177  0xfc => "\xf8\xfc", 0xfd => "\xf8\xfd", 0xfe => "\xf8\xfe",
178  );
179 
180 
181 
182  /**** Public Interface ****/
183 
184 
185  /* Object Lifecycle */
186 
190  public function __construct()
191  {
192  parent::__construct();
193 
194 
195  /* Object properties */
196 
197  /* The font names are stored internally as Unicode UTF-16BE-encoded
198  * strings. Since this information is static, save unnecessary trips
199  * through iconv() and just use pre-encoded hexidecimal strings.
200  */
201  $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] =
202  "\x00\x43\x00\x6f\x00\x70\x00\x79\x00\x72\x00\x69\x00\x67\x00\x68\x00"
203  . "\x74\x00\x20\x00\x28\x00\x63\x00\x29\x00\x20\x00\x31\x00\x39\x00"
204  . "\x38\x00\x35\x00\x2c\x00\x20\x00\x31\x00\x39\x00\x38\x00\x37\x00"
205  . "\x2c\x00\x20\x00\x31\x00\x39\x00\x38\x00\x39\x00\x2c\x00\x20\x00"
206  . "\x31\x00\x39\x00\x39\x00\x30\x00\x2c\x00\x20\x00\x31\x00\x39\x00"
207  . "\x39\x00\x37\x00\x20\x00\x41\x00\x64\x00\x6f\x00\x62\x00\x65\x00"
208  . "\x20\x00\x53\x00\x79\x00\x73\x00\x74\x00\x65\x00\x6d\x00\x73\x00"
209  . "\x20\x00\x49\x00\x6e\x00\x63\x00\x6f\x00\x72\x00\x70\x00\x6f\x00"
210  . "\x72\x00\x61\x00\x74\x00\x65\x00\x64\x00\x2e\x00\x20\x00\x41\x00"
211  . "\x6c\x00\x6c\x00\x20\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00"
212  . "\x73\x00\x20\x00\x72\x00\x65\x00\x73\x00\x65\x00\x72\x00\x76\x00"
213  . "\x65\x00\x64\x00\x2e";
214  $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] =
215  "\x00\x53\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c";
216  $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] =
217  "\x00\x4d\x00\x65\x00\x64\x00\x69\x00\x75\x00\x6d";
218  $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] =
219  "\x00\x34\x00\x33\x00\x30\x00\x36\x00\x34";
220  $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] =
221  "\x00\x53\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x20\x00\x4d\x00"
222  . "\x65\x00\x64\x00\x69\x00\x75\x00\x6d";
223  $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] =
224  "\x00\x30\x00\x30\x00\x31\x00\x2e\x00\x30\x00\x30\x00\x38";
225  $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] =
226  "\x00\x53\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c";
227 
228  $this->_isBold = false;
229  $this->_isItalic = false;
230  $this->_isMonospaced = false;
231 
232  $this->_underlinePosition = -100;
233  $this->_underlineThickness = 50;
234  $this->_strikePosition = 225;
235  $this->_strikeThickness = 50;
236 
237  $this->_unitsPerEm = 1000;
238 
239  $this->_ascent = 1000;
240  $this->_descent = 0;
241  $this->_lineGap = 200;
242 
243  /* The glyph numbers assigned here are synthetic; they do not match the
244  * actual glyph numbers used by the font. This is not a big deal though
245  * since this data never makes it to the PDF file. It is only used
246  * internally for layout calculations.
247  */
248  $this->_glyphWidths = array(
249  0x00 => 0x01f4, 0x01 => 0xfa, 0x02 => 0x014d, 0x03 => 0x02c9,
250  0x04 => 0x01f4, 0x05 => 0x0225, 0x06 => 0x0341, 0x07 => 0x030a,
251  0x08 => 0x01b7, 0x09 => 0x014d, 0x0a => 0x014d, 0x0b => 0x01f4,
252  0x0c => 0x0225, 0x0d => 0xfa, 0x0e => 0x0225, 0x0f => 0xfa,
253  0x10 => 0x0116, 0x11 => 0x01f4, 0x12 => 0x01f4, 0x13 => 0x01f4,
254  0x14 => 0x01f4, 0x15 => 0x01f4, 0x16 => 0x01f4, 0x17 => 0x01f4,
255  0x18 => 0x01f4, 0x19 => 0x01f4, 0x1a => 0x01f4, 0x1b => 0x0116,
256  0x1c => 0x0116, 0x1d => 0x0225, 0x1e => 0x0225, 0x1f => 0x0225,
257  0x20 => 0x01bc, 0x21 => 0x0225, 0x22 => 0x02d2, 0x23 => 0x029b,
258  0x24 => 0x02d2, 0x25 => 0x0264, 0x26 => 0x0263, 0x27 => 0x02fb,
259  0x28 => 0x025b, 0x29 => 0x02d2, 0x2a => 0x014d, 0x2b => 0x0277,
260  0x2c => 0x02d2, 0x2d => 0x02ae, 0x2e => 0x0379, 0x2f => 0x02d2,
261  0x30 => 0x02d2, 0x31 => 0x0300, 0x32 => 0x02e5, 0x33 => 0x022c,
262  0x34 => 0x0250, 0x35 => 0x0263, 0x36 => 0x02b2, 0x37 => 0x01b7,
263  0x38 => 0x0300, 0x39 => 0x0285, 0x3a => 0x031b, 0x3b => 0x0263,
264  0x3c => 0x014d, 0x3d => 0x035f, 0x3e => 0x014d, 0x3f => 0x0292,
265  0x40 => 0x01f4, 0x41 => 0x01f4, 0x42 => 0x0277, 0x43 => 0x0225,
266  0x44 => 0x0225, 0x45 => 0x01ee, 0x46 => 0x01b7, 0x47 => 0x0209,
267  0x48 => 0x019b, 0x49 => 0x025b, 0x4a => 0x0149, 0x4b => 0x025b,
268  0x4c => 0x0225, 0x4d => 0x0225, 0x4e => 0x0240, 0x4f => 0x0209,
269  0x50 => 0x0225, 0x51 => 0x0225, 0x52 => 0x0209, 0x53 => 0x0225,
270  0x54 => 0x025b, 0x55 => 0x01b7, 0x56 => 0x0240, 0x57 => 0x02c9,
271  0x58 => 0x02ae, 0x59 => 0x01ed, 0x5a => 0x02ae, 0x5b => 0x01ee,
272  0x5c => 0x01e0, 0x5d => 0xc8, 0x5e => 0x01e0, 0x5f => 0x0225,
273  0x60 => 0x02ee, 0x61 => 0x026c, 0x62 => 0xf7, 0x63 => 0x0225,
274  0x64 => 0xa7, 0x65 => 0x02c9, 0x66 => 0x01f4, 0x67 => 0x02f1,
275  0x68 => 0x02f1, 0x69 => 0x02f1, 0x6a => 0x02f1, 0x6b => 0x0412,
276  0x6c => 0x03db, 0x6d => 0x025b, 0x6e => 0x03db, 0x6f => 0x025b,
277  0x70 => 0x0190, 0x71 => 0x0225, 0x72 => 0x019b, 0x73 => 0x0225,
278  0x74 => 0x0225, 0x75 => 0x02c9, 0x76 => 0x01ee, 0x77 => 0x01cc,
279  0x78 => 0x0225, 0x79 => 0x0225, 0x7a => 0x0225, 0x7b => 0x0225,
280  0x7c => 0x03e8, 0x7d => 0x025b, 0x7e => 0x03e8, 0x7f => 0x0292,
281  0x80 => 0x0337, 0x81 => 0x02ae, 0x82 => 0x031b, 0x83 => 0x03db,
282  0x84 => 0x0300, 0x85 => 0x0300, 0x86 => 0x0337, 0x87 => 0x0300,
283  0x88 => 0x0300, 0x89 => 0x02c9, 0x8a => 0x02c9, 0x8b => 0x02c9,
284  0x8c => 0x02c9, 0x8d => 0x02c9, 0x8e => 0x02c9, 0x8f => 0x02c9,
285  0x90 => 0x0300, 0x91 => 0x02c9, 0x92 => 0x0316, 0x93 => 0x0316,
286  0x94 => 0x037a, 0x95 => 0x0337, 0x96 => 0x0225, 0x97 => 0xfa,
287  0x98 => 0x02c9, 0x99 => 0x025b, 0x9a => 0x025b, 0x9b => 0x0412,
288  0x9c => 0x03db, 0x9d => 0x025b, 0x9e => 0x03db, 0x9f => 0x025b,
289  0xa0 => 0x01ee, 0xa1 => 0x0149, 0xa2 => 0x0316, 0xa3 => 0x0316,
290  0xa4 => 0x0312, 0xa5 => 0x02c9, 0xa6 => 0x0180, 0xa7 => 0x0180,
291  0xa8 => 0x0180, 0xa9 => 0x0180, 0xaa => 0x0180, 0xab => 0x0180,
292  0xac => 0x01ee, 0xad => 0x01ee, 0xae => 0x01ee, 0xaf => 0x01ee,
293  0xb0 => 0x0149, 0xb1 => 0x0112, 0xb2 => 0x02ae, 0xb3 => 0x02ae,
294  0xb4 => 0x02ae, 0xb5 => 0x0180, 0xb6 => 0x0180, 0xb7 => 0x0180,
295  0xb8 => 0x0180, 0xb9 => 0x0180, 0xba => 0x0180, 0xbb => 0x01ee,
296  0xbc => 0x01ee, 0xbd => 0x01ee, 0xbe => 0x0316);
297 
298  /* The cmap table is similarly synthesized.
299  */
300  $cmapData = array(
301  0x20 => 0x01, 0x21 => 0x02, 0x2200 => 0x03, 0x23 => 0x04,
302  0x2203 => 0x05, 0x25 => 0x06, 0x26 => 0x07, 0x220b => 0x08,
303  0x28 => 0x09, 0x29 => 0x0a, 0x2217 => 0x0b, 0x2b => 0x0c,
304  0x2c => 0x0d, 0x2212 => 0x0e, 0x2e => 0x0f, 0x2f => 0x10,
305  0x30 => 0x11, 0x31 => 0x12, 0x32 => 0x13, 0x33 => 0x14,
306  0x34 => 0x15, 0x35 => 0x16, 0x36 => 0x17, 0x37 => 0x18,
307  0x38 => 0x19, 0x39 => 0x1a, 0x3a => 0x1b, 0x3b => 0x1c,
308  0x3c => 0x1d, 0x3d => 0x1e, 0x3e => 0x1f, 0x3f => 0x20,
309  0x2245 => 0x21, 0x0391 => 0x22, 0x0392 => 0x23, 0x03a7 => 0x24,
310  0x2206 => 0x25, 0x0395 => 0x26, 0x03a6 => 0x27, 0x0393 => 0x28,
311  0x0397 => 0x29, 0x0399 => 0x2a, 0x03d1 => 0x2b, 0x039a => 0x2c,
312  0x039b => 0x2d, 0x039c => 0x2e, 0x039d => 0x2f, 0x039f => 0x30,
313  0x03a0 => 0x31, 0x0398 => 0x32, 0x03a1 => 0x33, 0x03a3 => 0x34,
314  0x03a4 => 0x35, 0x03a5 => 0x36, 0x03c2 => 0x37, 0x2126 => 0x38,
315  0x039e => 0x39, 0x03a8 => 0x3a, 0x0396 => 0x3b, 0x5b => 0x3c,
316  0x2234 => 0x3d, 0x5d => 0x3e, 0x22a5 => 0x3f, 0x5f => 0x40,
317  0xf8e5 => 0x41, 0x03b1 => 0x42, 0x03b2 => 0x43, 0x03c7 => 0x44,
318  0x03b4 => 0x45, 0x03b5 => 0x46, 0x03c6 => 0x47, 0x03b3 => 0x48,
319  0x03b7 => 0x49, 0x03b9 => 0x4a, 0x03d5 => 0x4b, 0x03ba => 0x4c,
320  0x03bb => 0x4d, 0xb5 => 0x4e, 0x03bd => 0x4f, 0x03bf => 0x50,
321  0x03c0 => 0x51, 0x03b8 => 0x52, 0x03c1 => 0x53, 0x03c3 => 0x54,
322  0x03c4 => 0x55, 0x03c5 => 0x56, 0x03d6 => 0x57, 0x03c9 => 0x58,
323  0x03be => 0x59, 0x03c8 => 0x5a, 0x03b6 => 0x5b, 0x7b => 0x5c,
324  0x7c => 0x5d, 0x7d => 0x5e, 0x223c => 0x5f, 0x20ac => 0x60,
325  0x03d2 => 0x61, 0x2032 => 0x62, 0x2264 => 0x63, 0x2044 => 0x64,
326  0x221e => 0x65, 0x0192 => 0x66, 0x2663 => 0x67, 0x2666 => 0x68,
327  0x2665 => 0x69, 0x2660 => 0x6a, 0x2194 => 0x6b, 0x2190 => 0x6c,
328  0x2191 => 0x6d, 0x2192 => 0x6e, 0x2193 => 0x6f, 0xb0 => 0x70,
329  0xb1 => 0x71, 0x2033 => 0x72, 0x2265 => 0x73, 0xd7 => 0x74,
330  0x221d => 0x75, 0x2202 => 0x76, 0x2022 => 0x77, 0xf7 => 0x78,
331  0x2260 => 0x79, 0x2261 => 0x7a, 0x2248 => 0x7b, 0x2026 => 0x7c,
332  0xf8e6 => 0x7d, 0xf8e7 => 0x7e, 0x21b5 => 0x7f, 0x2135 => 0x80,
333  0x2111 => 0x81, 0x211c => 0x82, 0x2118 => 0x83, 0x2297 => 0x84,
334  0x2295 => 0x85, 0x2205 => 0x86, 0x2229 => 0x87, 0x222a => 0x88,
335  0x2283 => 0x89, 0x2287 => 0x8a, 0x2284 => 0x8b, 0x2282 => 0x8c,
336  0x2286 => 0x8d, 0x2208 => 0x8e, 0x2209 => 0x8f, 0x2220 => 0x90,
337  0x2207 => 0x91, 0xf6da => 0x92, 0xf6d9 => 0x93, 0xf6db => 0x94,
338  0x220f => 0x95, 0x221a => 0x96, 0x22c5 => 0x97, 0xac => 0x98,
339  0x2227 => 0x99, 0x2228 => 0x9a, 0x21d4 => 0x9b, 0x21d0 => 0x9c,
340  0x21d1 => 0x9d, 0x21d2 => 0x9e, 0x21d3 => 0x9f, 0x25ca => 0xa0,
341  0x2329 => 0xa1, 0xf8e8 => 0xa2, 0xf8e9 => 0xa3, 0xf8ea => 0xa4,
342  0x2211 => 0xa5, 0xf8eb => 0xa6, 0xf8ec => 0xa7, 0xf8ed => 0xa8,
343  0xf8ee => 0xa9, 0xf8ef => 0xaa, 0xf8f0 => 0xab, 0xf8f1 => 0xac,
344  0xf8f2 => 0xad, 0xf8f3 => 0xae, 0xf8f4 => 0xaf, 0x232a => 0xb0,
345  0x222b => 0xb1, 0x2320 => 0xb2, 0xf8f5 => 0xb3, 0x2321 => 0xb4,
346  0xf8f6 => 0xb5, 0xf8f7 => 0xb6, 0xf8f8 => 0xb7, 0xf8f9 => 0xb8,
347  0xf8fa => 0xb9, 0xf8fb => 0xba, 0xf8fc => 0xbb, 0xf8fd => 0xbc,
348  0xf8fe => 0xbd, 0xf8ff => 0xbe);
349  #require_once 'Zend/Pdf/Cmap.php';
350  $this->_cmap = Zend_Pdf_Cmap::cmapWithTypeData(
352 
353 
354  /* Resource dictionary */
355 
356  /* The resource dictionary for the standard fonts is sparse because PDF
357  * viewers already have all of the metrics data. We only need to provide
358  * the font name and encoding method.
359  */
360  $this->_resource->BaseFont = new Zend_Pdf_Element_Name('Symbol');
361 
362  /* This font has a built-in custom character encoding method. Don't
363  * override with WinAnsi like the other built-in fonts or else it will
364  * not work as expected.
365  */
366  $this->_resource->Encoding = null;
367  }
368 
369 
370  /* Information and Conversion Methods */
371 
380  public function encodeString($string, $charEncoding)
381  {
382  /* This isn't the optimal time to perform this conversion, but it must
383  * live here until the remainder of the layout code is completed. This,
384  * and the $charEncoding parameter, will go away soon...
385  */
386  if ($charEncoding != 'UTF-16BE') {
387  $string = iconv($charEncoding, 'UTF-16BE', $string);
388  }
392  $encodedString = '';
393  for ($i = 0; $i < strlen($string); $i++) {
394  $characterCode = (ord($string[$i++]) << 8) | ord($string[$i]);
395  if (isset($this->_toFontEncoding[$characterCode])) {
396  $encodedString .= $this->_toFontEncoding[$characterCode];
397  } else {
398  /* For now, mimic the behavior in Zend_Pdf_Font::encodeString()
399  * where unknown characters are removed completely. This is not
400  * perfect, but we should be consistent. In a future revision,
401  * we will use the well-known substitution character 0x1a
402  * (Control-Z).
403  */
404  }
405  }
406  return $encodedString;
407  }
408 
417  public function decodeString($string, $charEncoding)
418  {
419  $decodedString = '';
420  for ($i = 0; $i < strlen($string); $i++) {
421  $characterCode = ord($string[$i]);
422  if (isset($this->_fromFontEncoding[$characterCode])) {
423  $decodedString .= $this->_fromFontEncoding[$characterCode];
424  } else {
425  /* For now, mimic the behavior in Zend_Pdf_Font::encodeString()
426  * where unknown characters are removed completely. This is not
427  * perfect, but we should be consistent. In a future revision,
428  * we will use the Unicode substitution character (U+FFFD).
429  */
430  }
431  }
432  if ($charEncoding != 'UTF-16BE') {
433  $decodedString = iconv('UTF-16BE', $charEncoding, $decodedString);
434  }
435  return $decodedString;
436  }
437 
455  public function toUnicode($string, $charEncoding = '')
456  {
457  /* When using these faked strings, the closest match to the font's
458  * internal encoding is ISO-8859-1.
459  */
460  if ($charEncoding != 'ISO-8859-1') {
461  $string = iconv($charEncoding, 'ISO-8859-1', $string);
462  }
463  return $this->decodeString($string, 'UTF-16BE');
464  }
465 }
const NAME_FULL
Definition: Font.php:213
const NAME_VERSION
Definition: Font.php:218
const TYPE_BYTE_ENCODING_STATIC
Definition: Cmap.php:99
const NAME_COPYRIGHT
Definition: Font.php:192
const NAME_STYLE
Definition: Font.php:202
decodeString($string, $charEncoding)
Definition: Symbol.php:417
static cmapWithTypeData($cmapType, $cmapData)
Definition: Cmap.php:145
const NAME_POSTSCRIPT
Definition: Font.php:224
toUnicode($string, $charEncoding='')
Definition: Symbol.php:455
encodeString($string, $charEncoding)
Definition: Symbol.php:380
const NAME_ID
Definition: Font.php:207
$i
Definition: gallery.phtml:31
const NAME_FAMILY
Definition: Font.php:197