File indexing completed on 2024-06-30 05:58:32

0001 <?php
0002 /**
0003  * Zend Framework
0004  *
0005  * LICENSE
0006  *
0007  * This source file is subject to the new BSD license that is bundled
0008  * with this package in the file LICENSE.txt.
0009  * It is also available through the world-wide-web at this URL:
0010  * http://framework.zend.com/license/new-bsd
0011  * If you did not receive a copy of the license and are unable to
0012  * obtain it through the world-wide-web, please send an email
0013  * to license@zend.com so we can send you a copy immediately.
0014  *
0015  * @category   Zend
0016  * @package    Zend_Pdf
0017  * @subpackage Fonts
0018  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0019  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0020  * @version    $Id$
0021  */
0022 
0023 
0024 /** Internally used classes */
0025 // require_once 'Zend/Pdf/Element/Name.php';
0026 
0027 
0028 /** Zend_Pdf_Resource_Font_Simple_Standard */
0029 // require_once 'Zend/Pdf/Resource/Font/Simple/Standard.php';
0030 
0031 /**
0032  * Implementation for the standard PDF font ZapfDingbats.
0033  *
0034  * This class was generated automatically using the font information and metric
0035  * data contained in the Adobe Font Metric (AFM) files, available here:
0036  * {@link http://partners.adobe.com/public/developer/en/pdf/Core14_AFMs.zip}
0037  *
0038  * The PHP script used to generate this class can be found in the /tools
0039  * directory of the framework distribution. If you need to make modifications to
0040  * this class, chances are the same modifications are needed for the rest of the
0041  * standard fonts. You should modify the script and regenerate the classes
0042  * instead of changing this class file by hand.
0043  *
0044  * @package    Zend_Pdf
0045  * @subpackage Fonts
0046  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0047  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0048  */
0049 class Zend_Pdf_Resource_Font_Simple_Standard_ZapfDingbats extends Zend_Pdf_Resource_Font_Simple_Standard
0050 {
0051   /**** Instance Variables ****/
0052 
0053 
0054     /**
0055      * Array for conversion from local encoding to special font encoding.
0056      * See {@link encodeString()}.
0057      * @var array
0058      */
0059     protected $_toFontEncoding = array(
0060             0x20 => "\x20", 0x2701 => "\x21", 0x2702 => "\x22", 0x2703 => "\x23",
0061           0x2704 => "\x24", 0x260e => "\x25", 0x2706 => "\x26", 0x2707 => "\x27",
0062           0x2708 => "\x28", 0x2709 => "\x29", 0x261b => "\x2a", 0x261e => "\x2b",
0063           0x270c => "\x2c", 0x270d => "\x2d", 0x270e => "\x2e", 0x270f => "\x2f",
0064           0x2710 => "\x30", 0x2711 => "\x31", 0x2712 => "\x32", 0x2713 => "\x33",
0065           0x2714 => "\x34", 0x2715 => "\x35", 0x2716 => "\x36", 0x2717 => "\x37",
0066           0x2718 => "\x38", 0x2719 => "\x39", 0x271a => "\x3a", 0x271b => "\x3b",
0067           0x271c => "\x3c", 0x271d => "\x3d", 0x271e => "\x3e", 0x271f => "\x3f",
0068           0x2720 => "\x40", 0x2721 => "\x41", 0x2722 => "\x42", 0x2723 => "\x43",
0069           0x2724 => "\x44", 0x2725 => "\x45", 0x2726 => "\x46", 0x2727 => "\x47",
0070           0x2605 => "\x48", 0x2729 => "\x49", 0x272a => "\x4a", 0x272b => "\x4b",
0071           0x272c => "\x4c", 0x272d => "\x4d", 0x272e => "\x4e", 0x272f => "\x4f",
0072           0x2730 => "\x50", 0x2731 => "\x51", 0x2732 => "\x52", 0x2733 => "\x53",
0073           0x2734 => "\x54", 0x2735 => "\x55", 0x2736 => "\x56", 0x2737 => "\x57",
0074           0x2738 => "\x58", 0x2739 => "\x59", 0x273a => "\x5a", 0x273b => "\x5b",
0075           0x273c => "\x5c", 0x273d => "\x5d", 0x273e => "\x5e", 0x273f => "\x5f",
0076           0x2740 => "\x60", 0x2741 => "\x61", 0x2742 => "\x62", 0x2743 => "\x63",
0077           0x2744 => "\x64", 0x2745 => "\x65", 0x2746 => "\x66", 0x2747 => "\x67",
0078           0x2748 => "\x68", 0x2749 => "\x69", 0x274a => "\x6a", 0x274b => "\x6b",
0079           0x25cf => "\x6c", 0x274d => "\x6d", 0x25a0 => "\x6e", 0x274f => "\x6f",
0080           0x2750 => "\x70", 0x2751 => "\x71", 0x2752 => "\x72", 0x25b2 => "\x73",
0081           0x25bc => "\x74", 0x25c6 => "\x75", 0x2756 => "\x76", 0x25d7 => "\x77",
0082           0x2758 => "\x78", 0x2759 => "\x79", 0x275a => "\x7a", 0x275b => "\x7b",
0083           0x275c => "\x7c", 0x275d => "\x7d", 0x275e => "\x7e", 0x2768 => "\x80",
0084           0x2769 => "\x81", 0x276a => "\x82", 0x276b => "\x83", 0x276c => "\x84",
0085           0x276d => "\x85", 0x276e => "\x86", 0x276f => "\x87", 0x2770 => "\x88",
0086           0x2771 => "\x89", 0x2772 => "\x8a", 0x2773 => "\x8b", 0x2774 => "\x8c",
0087           0x2775 => "\x8d", 0x2761 => "\xa1", 0x2762 => "\xa2", 0x2763 => "\xa3",
0088           0x2764 => "\xa4", 0x2765 => "\xa5", 0x2766 => "\xa6", 0x2767 => "\xa7",
0089           0x2663 => "\xa8", 0x2666 => "\xa9", 0x2665 => "\xaa", 0x2660 => "\xab",
0090           0x2460 => "\xac", 0x2461 => "\xad", 0x2462 => "\xae", 0x2463 => "\xaf",
0091           0x2464 => "\xb0", 0x2465 => "\xb1", 0x2466 => "\xb2", 0x2467 => "\xb3",
0092           0x2468 => "\xb4", 0x2469 => "\xb5", 0x2776 => "\xb6", 0x2777 => "\xb7",
0093           0x2778 => "\xb8", 0x2779 => "\xb9", 0x277a => "\xba", 0x277b => "\xbb",
0094           0x277c => "\xbc", 0x277d => "\xbd", 0x277e => "\xbe", 0x277f => "\xbf",
0095           0x2780 => "\xc0", 0x2781 => "\xc1", 0x2782 => "\xc2", 0x2783 => "\xc3",
0096           0x2784 => "\xc4", 0x2785 => "\xc5", 0x2786 => "\xc6", 0x2787 => "\xc7",
0097           0x2788 => "\xc8", 0x2789 => "\xc9", 0x278a => "\xca", 0x278b => "\xcb",
0098           0x278c => "\xcc", 0x278d => "\xcd", 0x278e => "\xce", 0x278f => "\xcf",
0099           0x2790 => "\xd0", 0x2791 => "\xd1", 0x2792 => "\xd2", 0x2793 => "\xd3",
0100           0x2794 => "\xd4", 0x2192 => "\xd5", 0x2194 => "\xd6", 0x2195 => "\xd7",
0101           0x2798 => "\xd8", 0x2799 => "\xd9", 0x279a => "\xda", 0x279b => "\xdb",
0102           0x279c => "\xdc", 0x279d => "\xdd", 0x279e => "\xde", 0x279f => "\xdf",
0103           0x27a0 => "\xe0", 0x27a1 => "\xe1", 0x27a2 => "\xe2", 0x27a3 => "\xe3",
0104           0x27a4 => "\xe4", 0x27a5 => "\xe5", 0x27a6 => "\xe6", 0x27a7 => "\xe7",
0105           0x27a8 => "\xe8", 0x27a9 => "\xe9", 0x27aa => "\xea", 0x27ab => "\xeb",
0106           0x27ac => "\xec", 0x27ad => "\xed", 0x27ae => "\xee", 0x27af => "\xef",
0107           0x27b1 => "\xf1", 0x27b2 => "\xf2", 0x27b3 => "\xf3", 0x27b4 => "\xf4",
0108           0x27b5 => "\xf5", 0x27b6 => "\xf6", 0x27b7 => "\xf7", 0x27b8 => "\xf8",
0109           0x27b9 => "\xf9", 0x27ba => "\xfa", 0x27bb => "\xfb", 0x27bc => "\xfc",
0110           0x27bd => "\xfd", 0x27be => "\xfe");
0111 
0112     /**
0113      * Array for conversion from special font encoding to local encoding.
0114      * See {@link decodeString()}.
0115      * @var array
0116      */
0117     protected $_fromFontEncoding = array(
0118             0x20 => "\x00\x20",   0x21 => "\x27\x01",   0x22 => "\x27\x02",
0119             0x23 => "\x27\x03",   0x24 => "\x27\x04",   0x25 => "\x26\x0e",
0120             0x26 => "\x27\x06",   0x27 => "\x27\x07",   0x28 => "\x27\x08",
0121             0x29 => "\x27\x09",   0x2a => "\x26\x1b",   0x2b => "\x26\x1e",
0122             0x2c => "\x27\x0c",   0x2d => "\x27\x0d",   0x2e => "\x27\x0e",
0123             0x2f => "\x27\x0f",   0x30 => "\x27\x10",   0x31 => "\x27\x11",
0124             0x32 => "\x27\x12",   0x33 => "\x27\x13",   0x34 => "\x27\x14",
0125             0x35 => "\x27\x15",   0x36 => "\x27\x16",   0x37 => "\x27\x17",
0126             0x38 => "\x27\x18",   0x39 => "\x27\x19",   0x3a => "\x27\x1a",
0127             0x3b => "\x27\x1b",   0x3c => "\x27\x1c",   0x3d => "\x27\x1d",
0128             0x3e => "\x27\x1e",   0x3f => "\x27\x1f",   0x40 => "\x27\x20",
0129             0x41 => "\x27\x21",   0x42 => "\x27\x22",   0x43 => "\x27\x23",
0130             0x44 => "\x27\x24",   0x45 => "\x27\x25",   0x46 => "\x27\x26",
0131             0x47 => "\x27\x27",   0x48 => "\x26\x05",   0x49 => "\x27\x29",
0132             0x4a => "\x27\x2a",   0x4b => "\x27\x2b",   0x4c => "\x27\x2c",
0133             0x4d => "\x27\x2d",   0x4e => "\x27\x2e",   0x4f => "\x27\x2f",
0134             0x50 => "\x27\x30",   0x51 => "\x27\x31",   0x52 => "\x27\x32",
0135             0x53 => "\x27\x33",   0x54 => "\x27\x34",   0x55 => "\x27\x35",
0136             0x56 => "\x27\x36",   0x57 => "\x27\x37",   0x58 => "\x27\x38",
0137             0x59 => "\x27\x39",   0x5a => "\x27\x3a",   0x5b => "\x27\x3b",
0138             0x5c => "\x27\x3c",   0x5d => "\x27\x3d",   0x5e => "\x27\x3e",
0139             0x5f => "\x27\x3f",   0x60 => "\x27\x40",   0x61 => "\x27\x41",
0140             0x62 => "\x27\x42",   0x63 => "\x27\x43",   0x64 => "\x27\x44",
0141             0x65 => "\x27\x45",   0x66 => "\x27\x46",   0x67 => "\x27\x47",
0142             0x68 => "\x27\x48",   0x69 => "\x27\x49",   0x6a => "\x27\x4a",
0143             0x6b => "\x27\x4b",   0x6c => "\x25\xcf",   0x6d => "\x27\x4d",
0144             0x6e => "\x25\xa0",   0x6f => "\x27\x4f",   0x70 => "\x27\x50",
0145             0x71 => "\x27\x51",   0x72 => "\x27\x52",   0x73 => "\x25\xb2",
0146             0x74 => "\x25\xbc",   0x75 => "\x25\xc6",   0x76 => "\x27\x56",
0147             0x77 => "\x25\xd7",   0x78 => "\x27\x58",   0x79 => "\x27\x59",
0148             0x7a => "\x27\x5a",   0x7b => "\x27\x5b",   0x7c => "\x27\x5c",
0149             0x7d => "\x27\x5d",   0x7e => "\x27\x5e",   0x80 => "\x27\x68",
0150             0x81 => "\x27\x69",   0x82 => "\x27\x6a",   0x83 => "\x27\x6b",
0151             0x84 => "\x27\x6c",   0x85 => "\x27\x6d",   0x86 => "\x27\x6e",
0152             0x87 => "\x27\x6f",   0x88 => "\x27\x70",   0x89 => "\x27\x71",
0153             0x8a => "\x27\x72",   0x8b => "\x27\x73",   0x8c => "\x27\x74",
0154             0x8d => "\x27\x75",   0xa1 => "\x27\x61",   0xa2 => "\x27\x62",
0155             0xa3 => "\x27\x63",   0xa4 => "\x27\x64",   0xa5 => "\x27\x65",
0156             0xa6 => "\x27\x66",   0xa7 => "\x27\x67",   0xa8 => "\x26\x63",
0157             0xa9 => "\x26\x66",   0xaa => "\x26\x65",   0xab => "\x26\x60",
0158             0xac => "\x24\x60",   0xad => "\x24\x61",   0xae => "\x24\x62",
0159             0xaf => "\x24\x63",   0xb0 => "\x24\x64",   0xb1 => "\x24\x65",
0160             0xb2 => "\x24\x66",   0xb3 => "\x24\x67",   0xb4 => "\x24\x68",
0161             0xb5 => "\x24\x69",   0xb6 => "\x27\x76",   0xb7 => "\x27\x77",
0162             0xb8 => "\x27\x78",   0xb9 => "\x27\x79",   0xba => "\x27\x7a",
0163             0xbb => "\x27\x7b",   0xbc => "\x27\x7c",   0xbd => "\x27\x7d",
0164             0xbe => "\x27\x7e",   0xbf => "\x27\x7f",   0xc0 => "\x27\x80",
0165             0xc1 => "\x27\x81",   0xc2 => "\x27\x82",   0xc3 => "\x27\x83",
0166             0xc4 => "\x27\x84",   0xc5 => "\x27\x85",   0xc6 => "\x27\x86",
0167             0xc7 => "\x27\x87",   0xc8 => "\x27\x88",   0xc9 => "\x27\x89",
0168             0xca => "\x27\x8a",   0xcb => "\x27\x8b",   0xcc => "\x27\x8c",
0169             0xcd => "\x27\x8d",   0xce => "\x27\x8e",   0xcf => "\x27\x8f",
0170             0xd0 => "\x27\x90",   0xd1 => "\x27\x91",   0xd2 => "\x27\x92",
0171             0xd3 => "\x27\x93",   0xd4 => "\x27\x94",   0xd5 => "\x21\x92",
0172             0xd6 => "\x21\x94",   0xd7 => "\x21\x95",   0xd8 => "\x27\x98",
0173             0xd9 => "\x27\x99",   0xda => "\x27\x9a",   0xdb => "\x27\x9b",
0174             0xdc => "\x27\x9c",   0xdd => "\x27\x9d",   0xde => "\x27\x9e",
0175             0xdf => "\x27\x9f",   0xe0 => "\x27\xa0",   0xe1 => "\x27\xa1",
0176             0xe2 => "\x27\xa2",   0xe3 => "\x27\xa3",   0xe4 => "\x27\xa4",
0177             0xe5 => "\x27\xa5",   0xe6 => "\x27\xa6",   0xe7 => "\x27\xa7",
0178             0xe8 => "\x27\xa8",   0xe9 => "\x27\xa9",   0xea => "\x27\xaa",
0179             0xeb => "\x27\xab",   0xec => "\x27\xac",   0xed => "\x27\xad",
0180             0xee => "\x27\xae",   0xef => "\x27\xaf",   0xf1 => "\x27\xb1",
0181             0xf2 => "\x27\xb2",   0xf3 => "\x27\xb3",   0xf4 => "\x27\xb4",
0182             0xf5 => "\x27\xb5",   0xf6 => "\x27\xb6",   0xf7 => "\x27\xb7",
0183             0xf8 => "\x27\xb8",   0xf9 => "\x27\xb9",   0xfa => "\x27\xba",
0184             0xfb => "\x27\xbb",   0xfc => "\x27\xbc",   0xfd => "\x27\xbd",
0185             0xfe => "\x27\xbe");
0186 
0187 
0188 
0189   /**** Public Interface ****/
0190 
0191 
0192   /* Object Lifecycle */
0193 
0194     /**
0195      * Object constructor
0196      */
0197     public function __construct()
0198     {
0199         parent::__construct();
0200 
0201 
0202         /* Object properties */
0203 
0204         /* The font names are stored internally as Unicode UTF-16BE-encoded
0205          * strings. Since this information is static, save unnecessary trips
0206          * through iconv() and just use pre-encoded hexidecimal strings.
0207          */
0208         $this->_fontNames[Zend_Pdf_Font::NAME_COPYRIGHT]['en'] =
0209           "\x00\x43\x00\x6f\x00\x70\x00\x79\x00\x72\x00\x69\x00\x67\x00\x68\x00"
0210           . "\x74\x00\x20\x00\x28\x00\x63\x00\x29\x00\x20\x00\x31\x00\x39\x00"
0211           . "\x38\x00\x35\x00\x2c\x00\x20\x00\x31\x00\x39\x00\x38\x00\x37\x00"
0212           . "\x2c\x00\x20\x00\x31\x00\x39\x00\x38\x00\x38\x00\x2c\x00\x20\x00"
0213           . "\x31\x00\x39\x00\x38\x00\x39\x00\x2c\x00\x20\x00\x31\x00\x39\x00"
0214           . "\x39\x00\x37\x00\x20\x00\x41\x00\x64\x00\x6f\x00\x62\x00\x65\x00"
0215           . "\x20\x00\x53\x00\x79\x00\x73\x00\x74\x00\x65\x00\x6d\x00\x73\x00"
0216           . "\x20\x00\x49\x00\x6e\x00\x63\x00\x6f\x00\x72\x00\x70\x00\x6f\x00"
0217           . "\x72\x00\x61\x00\x74\x00\x65\x00\x64\x00\x2e\x00\x20\x00\x41\x00"
0218           . "\x6c\x00\x6c\x00\x20\x00\x52\x00\x69\x00\x67\x00\x68\x00\x74\x00"
0219           . "\x73\x00\x20\x00\x52\x00\x65\x00\x73\x00\x65\x00\x72\x00\x76\x00"
0220           . "\x65\x00\x64\x00\x2e\x00\x49\x00\x54\x00\x43\x00\x20\x00\x5a\x00"
0221           . "\x61\x00\x70\x00\x66\x00\x20\x00\x44\x00\x69\x00\x6e\x00\x67\x00"
0222           . "\x62\x00\x61\x00\x74\x00\x73\x00\x20\x00\x69\x00\x73\x00\x20\x00"
0223           . "\x61\x00\x20\x00\x72\x00\x65\x00\x67\x00\x69\x00\x73\x00\x74\x00"
0224           . "\x65\x00\x72\x00\x65\x00\x64\x00\x20\x00\x74\x00\x72\x00\x61\x00"
0225           . "\x64\x00\x65\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x20\x00\x6f\x00"
0226           . "\x66\x00\x20\x00\x49\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\x00"
0227           . "\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\x00\x6c\x00\x20\x00"
0228           . "\x54\x00\x79\x00\x70\x00\x65\x00\x66\x00\x61\x00\x63\x00\x65\x00"
0229           . "\x20\x00\x43\x00\x6f\x00\x72\x00\x70\x00\x6f\x00\x72\x00\x61\x00"
0230           . "\x74\x00\x69\x00\x6f\x00\x6e\x00\x2e";
0231         $this->_fontNames[Zend_Pdf_Font::NAME_FAMILY]['en'] =
0232           "\x00\x5a\x00\x61\x00\x70\x00\x66\x00\x44\x00\x69\x00\x6e\x00\x67\x00"
0233           . "\x62\x00\x61\x00\x74\x00\x73";
0234         $this->_fontNames[Zend_Pdf_Font::NAME_STYLE]['en'] =
0235           "\x00\x4d\x00\x65\x00\x64\x00\x69\x00\x75\x00\x6d";
0236         $this->_fontNames[Zend_Pdf_Font::NAME_ID]['en'] =
0237           "\x00\x34\x00\x33\x00\x30\x00\x38\x00\x32";
0238         $this->_fontNames[Zend_Pdf_Font::NAME_FULL]['en'] =
0239           "\x00\x5a\x00\x61\x00\x70\x00\x66\x00\x44\x00\x69\x00\x6e\x00\x67\x00"
0240           . "\x62\x00\x61\x00\x74\x00\x73\x00\x20\x00\x4d\x00\x65\x00\x64\x00"
0241           . "\x69\x00\x75\x00\x6d";
0242         $this->_fontNames[Zend_Pdf_Font::NAME_VERSION]['en'] =
0243           "\x00\x30\x00\x30\x00\x32\x00\x2e\x00\x30\x00\x30\x00\x30";
0244         $this->_fontNames[Zend_Pdf_Font::NAME_POSTSCRIPT]['en'] =
0245           "\x00\x5a\x00\x61\x00\x70\x00\x66\x00\x44\x00\x69\x00\x6e\x00\x67\x00"
0246           . "\x62\x00\x61\x00\x74\x00\x73";
0247 
0248         $this->_isBold = false;
0249         $this->_isItalic = false;
0250         $this->_isMonospaced = false;
0251 
0252         $this->_underlinePosition = -100;
0253         $this->_underlineThickness = 50;
0254         $this->_strikePosition = 225;
0255         $this->_strikeThickness = 50;
0256 
0257         $this->_unitsPerEm = 1000;
0258 
0259         $this->_ascent  = 1000;
0260         $this->_descent = 0;
0261         $this->_lineGap = 200;
0262 
0263         /* The glyph numbers assigned here are synthetic; they do not match the
0264          * actual glyph numbers used by the font. This is not a big deal though
0265          * since this data never makes it to the PDF file. It is only used
0266          * internally for layout calculations.
0267          */
0268         $this->_glyphWidths = array(
0269             0x00 => 0x01f4,   0x01 => 0x0116,   0x02 => 0x03ce,   0x03 => 0x03c1,
0270             0x04 => 0x03ce,   0x05 => 0x03d4,   0x06 => 0x02cf,   0x07 => 0x0315,
0271             0x08 => 0x0316,   0x09 => 0x0317,   0x0a => 0x02b2,   0x0b => 0x03c0,
0272             0x0c => 0x03ab,   0x0d => 0x0225,   0x0e => 0x0357,   0x0f => 0x038f,
0273             0x10 => 0x03a5,   0x11 => 0x038f,   0x12 => 0x03b1,   0x13 => 0x03ce,
0274             0x14 => 0x02f3,   0x15 => 0x034e,   0x16 => 0x02fa,   0x17 => 0x02f9,
0275             0x18 => 0x023b,   0x19 => 0x02a5,   0x1a => 0x02fb,   0x1b => 0x02f8,
0276             0x1c => 0x02f7,   0x1d => 0x02f2,   0x1e => 0x01ee,   0x1f => 0x0228,
0277             0x20 => 0x0219,   0x21 => 0x0241,   0x22 => 0x02b4,   0x23 => 0x0312,
0278             0x24 => 0x0314,   0x25 => 0x0314,   0x26 => 0x0316,   0x27 => 0x0319,
0279             0x28 => 0x031a,   0x29 => 0x0330,   0x2a => 0x0337,   0x2b => 0x0315,
0280             0x2c => 0x0349,   0x2d => 0x0337,   0x2e => 0x0341,   0x2f => 0x0330,
0281             0x30 => 0x033f,   0x31 => 0x039b,   0x32 => 0x02e8,   0x33 => 0x02d3,
0282             0x34 => 0x02ed,   0x35 => 0x0316,   0x36 => 0x0318,   0x37 => 0x02b7,
0283             0x38 => 0x0308,   0x39 => 0x0300,   0x3a => 0x0318,   0x3b => 0x02f7,
0284             0x3c => 0x02c3,   0x3d => 0x02c4,   0x3e => 0x02aa,   0x3f => 0x02bd,
0285             0x40 => 0x033a,   0x41 => 0x032f,   0x42 => 0x0315,   0x43 => 0x0315,
0286             0x44 => 0x02c3,   0x45 => 0x02af,   0x46 => 0x02b8,   0x47 => 0x02b1,
0287             0x48 => 0x0312,   0x49 => 0x0313,   0x4a => 0x02c9,   0x4b => 0x0317,
0288             0x4c => 0x0311,   0x4d => 0x0317,   0x4e => 0x0369,   0x4f => 0x02f9,
0289             0x50 => 0x02fa,   0x51 => 0x02fa,   0x52 => 0x02f7,   0x53 => 0x02f7,
0290             0x54 => 0x037c,   0x55 => 0x037c,   0x56 => 0x0314,   0x57 => 0x0310,
0291             0x58 => 0x01b6,   0x59 =>   0x8a,   0x5a => 0x0115,   0x5b => 0x019f,
0292             0x5c => 0x0188,   0x5d => 0x0188,   0x5e => 0x029c,   0x5f => 0x029c,
0293             0x60 => 0x0186,   0x61 => 0x0186,   0x62 => 0x013d,   0x63 => 0x013d,
0294             0x64 => 0x0114,   0x65 => 0x0114,   0x66 => 0x01fd,   0x67 => 0x01fd,
0295             0x68 => 0x019a,   0x69 => 0x019a,   0x6a =>   0xea,   0x6b =>   0xea,
0296             0x6c => 0x014e,   0x6d => 0x014e,   0x6e => 0x02dc,   0x6f => 0x0220,
0297             0x70 => 0x0220,   0x71 => 0x038e,   0x72 => 0x029b,   0x73 => 0x02f8,
0298             0x74 => 0x02f8,   0x75 => 0x0308,   0x76 => 0x0253,   0x77 => 0x02b6,
0299             0x78 => 0x0272,   0x79 => 0x0314,   0x7a => 0x0314,   0x7b => 0x0314,
0300             0x7c => 0x0314,   0x7d => 0x0314,   0x7e => 0x0314,   0x7f => 0x0314,
0301             0x80 => 0x0314,   0x81 => 0x0314,   0x82 => 0x0314,   0x83 => 0x0314,
0302             0x84 => 0x0314,   0x85 => 0x0314,   0x86 => 0x0314,   0x87 => 0x0314,
0303             0x88 => 0x0314,   0x89 => 0x0314,   0x8a => 0x0314,   0x8b => 0x0314,
0304             0x8c => 0x0314,   0x8d => 0x0314,   0x8e => 0x0314,   0x8f => 0x0314,
0305             0x90 => 0x0314,   0x91 => 0x0314,   0x92 => 0x0314,   0x93 => 0x0314,
0306             0x94 => 0x0314,   0x95 => 0x0314,   0x96 => 0x0314,   0x97 => 0x0314,
0307             0x98 => 0x0314,   0x99 => 0x0314,   0x9a => 0x0314,   0x9b => 0x0314,
0308             0x9c => 0x0314,   0x9d => 0x0314,   0x9e => 0x0314,   0x9f => 0x0314,
0309             0xa0 => 0x0314,   0xa1 => 0x037e,   0xa2 => 0x0346,   0xa3 => 0x03f8,
0310             0xa4 => 0x01ca,   0xa5 => 0x02ec,   0xa6 => 0x039c,   0xa7 => 0x02ec,
0311             0xa8 => 0x0396,   0xa9 => 0x039f,   0xaa => 0x03a0,   0xab => 0x03a0,
0312             0xac => 0x0342,   0xad => 0x0369,   0xae => 0x033c,   0xaf => 0x039c,
0313             0xb0 => 0x039c,   0xb1 => 0x0395,   0xb2 => 0x03a2,   0xb3 => 0x03a3,
0314             0xb4 => 0x01cf,   0xb5 => 0x0373,   0xb6 => 0x0344,   0xb7 => 0x0344,
0315             0xb8 => 0x0363,   0xb9 => 0x0363,   0xba => 0x02b8,   0xbb => 0x02b8,
0316             0xbc => 0x036a,   0xbd => 0x036a,   0xbe => 0x02f8,   0xbf => 0x03b2,
0317             0xc0 => 0x0303,   0xc1 => 0x0361,   0xc2 => 0x0303,   0xc3 => 0x0378,
0318             0xc4 => 0x03c7,   0xc5 => 0x0378,   0xc6 => 0x033f,   0xc7 => 0x0369,
0319             0xc8 => 0x039f,   0xc9 => 0x03ca,   0xca => 0x0396);
0320 
0321         /* The cmap table is similarly synthesized.
0322          */
0323         $cmapData = array(
0324             0x20 =>   0x01, 0x2701 =>   0x02, 0x2702 =>   0x03, 0x2703 =>   0x04,
0325           0x2704 =>   0x05, 0x260e =>   0x06, 0x2706 =>   0x07, 0x2707 =>   0x08,
0326           0x2708 =>   0x09, 0x2709 =>   0x0a, 0x261b =>   0x0b, 0x261e =>   0x0c,
0327           0x270c =>   0x0d, 0x270d =>   0x0e, 0x270e =>   0x0f, 0x270f =>   0x10,
0328           0x2710 =>   0x11, 0x2711 =>   0x12, 0x2712 =>   0x13, 0x2713 =>   0x14,
0329           0x2714 =>   0x15, 0x2715 =>   0x16, 0x2716 =>   0x17, 0x2717 =>   0x18,
0330           0x2718 =>   0x19, 0x2719 =>   0x1a, 0x271a =>   0x1b, 0x271b =>   0x1c,
0331           0x271c =>   0x1d, 0x271d =>   0x1e, 0x271e =>   0x1f, 0x271f =>   0x20,
0332           0x2720 =>   0x21, 0x2721 =>   0x22, 0x2722 =>   0x23, 0x2723 =>   0x24,
0333           0x2724 =>   0x25, 0x2725 =>   0x26, 0x2726 =>   0x27, 0x2727 =>   0x28,
0334           0x2605 =>   0x29, 0x2729 =>   0x2a, 0x272a =>   0x2b, 0x272b =>   0x2c,
0335           0x272c =>   0x2d, 0x272d =>   0x2e, 0x272e =>   0x2f, 0x272f =>   0x30,
0336           0x2730 =>   0x31, 0x2731 =>   0x32, 0x2732 =>   0x33, 0x2733 =>   0x34,
0337           0x2734 =>   0x35, 0x2735 =>   0x36, 0x2736 =>   0x37, 0x2737 =>   0x38,
0338           0x2738 =>   0x39, 0x2739 =>   0x3a, 0x273a =>   0x3b, 0x273b =>   0x3c,
0339           0x273c =>   0x3d, 0x273d =>   0x3e, 0x273e =>   0x3f, 0x273f =>   0x40,
0340           0x2740 =>   0x41, 0x2741 =>   0x42, 0x2742 =>   0x43, 0x2743 =>   0x44,
0341           0x2744 =>   0x45, 0x2745 =>   0x46, 0x2746 =>   0x47, 0x2747 =>   0x48,
0342           0x2748 =>   0x49, 0x2749 =>   0x4a, 0x274a =>   0x4b, 0x274b =>   0x4c,
0343           0x25cf =>   0x4d, 0x274d =>   0x4e, 0x25a0 =>   0x4f, 0x274f =>   0x50,
0344           0x2750 =>   0x51, 0x2751 =>   0x52, 0x2752 =>   0x53, 0x25b2 =>   0x54,
0345           0x25bc =>   0x55, 0x25c6 =>   0x56, 0x2756 =>   0x57, 0x25d7 =>   0x58,
0346           0x2758 =>   0x59, 0x2759 =>   0x5a, 0x275a =>   0x5b, 0x275b =>   0x5c,
0347           0x275c =>   0x5d, 0x275d =>   0x5e, 0x275e =>   0x5f, 0x2768 =>   0x60,
0348           0x2769 =>   0x61, 0x276a =>   0x62, 0x276b =>   0x63, 0x276c =>   0x64,
0349           0x276d =>   0x65, 0x276e =>   0x66, 0x276f =>   0x67, 0x2770 =>   0x68,
0350           0x2771 =>   0x69, 0x2772 =>   0x6a, 0x2773 =>   0x6b, 0x2774 =>   0x6c,
0351           0x2775 =>   0x6d, 0x2761 =>   0x6e, 0x2762 =>   0x6f, 0x2763 =>   0x70,
0352           0x2764 =>   0x71, 0x2765 =>   0x72, 0x2766 =>   0x73, 0x2767 =>   0x74,
0353           0x2663 =>   0x75, 0x2666 =>   0x76, 0x2665 =>   0x77, 0x2660 =>   0x78,
0354           0x2460 =>   0x79, 0x2461 =>   0x7a, 0x2462 =>   0x7b, 0x2463 =>   0x7c,
0355           0x2464 =>   0x7d, 0x2465 =>   0x7e, 0x2466 =>   0x7f, 0x2467 =>   0x80,
0356           0x2468 =>   0x81, 0x2469 =>   0x82, 0x2776 =>   0x83, 0x2777 =>   0x84,
0357           0x2778 =>   0x85, 0x2779 =>   0x86, 0x277a =>   0x87, 0x277b =>   0x88,
0358           0x277c =>   0x89, 0x277d =>   0x8a, 0x277e =>   0x8b, 0x277f =>   0x8c,
0359           0x2780 =>   0x8d, 0x2781 =>   0x8e, 0x2782 =>   0x8f, 0x2783 =>   0x90,
0360           0x2784 =>   0x91, 0x2785 =>   0x92, 0x2786 =>   0x93, 0x2787 =>   0x94,
0361           0x2788 =>   0x95, 0x2789 =>   0x96, 0x278a =>   0x97, 0x278b =>   0x98,
0362           0x278c =>   0x99, 0x278d =>   0x9a, 0x278e =>   0x9b, 0x278f =>   0x9c,
0363           0x2790 =>   0x9d, 0x2791 =>   0x9e, 0x2792 =>   0x9f, 0x2793 =>   0xa0,
0364           0x2794 =>   0xa1, 0x2192 =>   0xa2, 0x2194 =>   0xa3, 0x2195 =>   0xa4,
0365           0x2798 =>   0xa5, 0x2799 =>   0xa6, 0x279a =>   0xa7, 0x279b =>   0xa8,
0366           0x279c =>   0xa9, 0x279d =>   0xaa, 0x279e =>   0xab, 0x279f =>   0xac,
0367           0x27a0 =>   0xad, 0x27a1 =>   0xae, 0x27a2 =>   0xaf, 0x27a3 =>   0xb0,
0368           0x27a4 =>   0xb1, 0x27a5 =>   0xb2, 0x27a6 =>   0xb3, 0x27a7 =>   0xb4,
0369           0x27a8 =>   0xb5, 0x27a9 =>   0xb6, 0x27aa =>   0xb7, 0x27ab =>   0xb8,
0370           0x27ac =>   0xb9, 0x27ad =>   0xba, 0x27ae =>   0xbb, 0x27af =>   0xbc,
0371           0x27b1 =>   0xbd, 0x27b2 =>   0xbe, 0x27b3 =>   0xbf, 0x27b4 =>   0xc0,
0372           0x27b5 =>   0xc1, 0x27b6 =>   0xc2, 0x27b7 =>   0xc3, 0x27b8 =>   0xc4,
0373           0x27b9 =>   0xc5, 0x27ba =>   0xc6, 0x27bb =>   0xc7, 0x27bc =>   0xc8,
0374           0x27bd =>   0xc9, 0x27be =>   0xca);
0375         // require_once 'Zend/Pdf/Cmap.php';
0376         $this->_cmap = Zend_Pdf_Cmap::cmapWithTypeData(
0377             Zend_Pdf_Cmap::TYPE_BYTE_ENCODING_STATIC, $cmapData);
0378 
0379 
0380         /* Resource dictionary */
0381 
0382         /* The resource dictionary for the standard fonts is sparse because PDF
0383          * viewers already have all of the metrics data. We only need to provide
0384          * the font name and encoding method.
0385          */
0386         $this->_resource->BaseFont = new Zend_Pdf_Element_Name('ZapfDingbats');
0387 
0388         /* This font has a built-in custom character encoding method. Don't
0389          * override with WinAnsi like the other built-in fonts or else it will
0390          * not work as expected.
0391          */
0392         $this->_resource->Encoding = null;
0393     }
0394 
0395 
0396   /* Information and Conversion Methods */
0397 
0398     /**
0399      * Convert string encoding from local encoding to font encoding. Overridden
0400      * to defeat the conversion behavior for this ornamental font.
0401      *
0402      * @param string $string
0403      * @param string $charEncoding Character encoding of source text.
0404      * @return string
0405      */
0406     public function encodeString($string, $charEncoding)
0407     {
0408         /* This isn't the optimal time to perform this conversion, but it must
0409          * live here until the remainder of the layout code is completed. This,
0410          * and the $charEncoding parameter, will go away soon...
0411          */
0412         if ($charEncoding != 'UTF-16BE') {
0413             $string = iconv($charEncoding, 'UTF-16BE', $string);
0414         }
0415         /**
0416          * @todo Properly handle characters encoded as surrogate pairs.
0417          */
0418         $encodedString = '';
0419         for ($i = 0; $i < strlen($string); $i++) {
0420             $characterCode = (ord($string[$i++]) << 8) | ord($string[$i]);
0421             if (isset($this->_toFontEncoding[$characterCode])) {
0422                 $encodedString .= $this->_toFontEncoding[$characterCode];
0423             } else {
0424                 /* For now, mimic the behavior in Zend_Pdf_Font::encodeString()
0425                  * where unknown characters are removed completely. This is not
0426                  * perfect, but we should be consistent. In a future revision,
0427                  * we will use the well-known substitution character 0x1a
0428                  * (Control-Z).
0429                  */
0430             }
0431         }
0432         return $encodedString;
0433     }
0434 
0435     /**
0436      * Convert string encoding from font encoding to local encoding. Overridden
0437      * to defeat the conversion behavior for this ornamental font.
0438      *
0439      * @param string $string
0440      * @param string $charEncoding Character encoding of resulting text.
0441      * @return string
0442      */
0443     public function decodeString($string, $charEncoding)
0444     {
0445         $decodedString = '';
0446         for ($i = 0; $i < strlen($string); $i++) {
0447             $characterCode = ord($string[$i]);
0448             if (isset($this->_fromFontEncoding[$characterCode])) {
0449                 $decodedString .= $this->_fromFontEncoding[$characterCode];
0450             } else {
0451                 /* For now, mimic the behavior in Zend_Pdf_Font::encodeString()
0452                  * where unknown characters are removed completely. This is not
0453                  * perfect, but we should be consistent. In a future revision,
0454                  * we will use the Unicode substitution character (U+FFFD).
0455                  */
0456             }
0457         }
0458         if ($charEncoding != 'UTF-16BE') {
0459             $decodedString = iconv('UTF-16BE', $charEncoding, $decodedString);
0460         }
0461         return $decodedString;
0462     }
0463 
0464     /**
0465      * Converts a Latin-encoded string that fakes the font's internal encoding
0466      * to the proper Unicode characters, in UTF-16BE encoding.
0467      *
0468      * Used to maintain backwards compatibility with the 20 year-old legacy
0469      * method of using this font, which is still employed by recent versions of
0470      * some popular word processors.
0471      *
0472      * Note that using this method adds overhead due to the additional
0473      * character conversion. Don't use this for new code; it is more efficient
0474      * to use the appropriate Unicode characters directly.
0475      *
0476      * @param string $string
0477      * @param string $charEncoding (optional) Character encoding of source
0478      *   string. Defaults to current locale.
0479      * @return string
0480      */
0481     public function toUnicode($string, $charEncoding = '')
0482     {
0483         /* When using these faked strings, the closest match to the font's
0484          * internal encoding is ISO-8859-1.
0485          */
0486         if ($charEncoding != 'ISO-8859-1') {
0487             $string = iconv($charEncoding, 'ISO-8859-1', $string);
0488         }
0489         return $this->decodeString($string, 'UTF-16BE');
0490     }
0491 }