whoami7 - Manager
:
/
home
/
papecmvm
/
public_html
/
documents
/
6204_Rajpara
/
2020
/
k_november
/
receipt
/
Upload File:
files >> //home/papecmvm/public_html/documents/6204_Rajpara/2020/k_november/receipt/HTML.php.tar
home/papecmvm/public_html/application/libraries/PHPExcel/Helper/HTML.php 0000644 00000060334 14670523262 0022206 0 ustar 00 <?php class PHPExcel_Helper_HTML { protected static $colourMap = array( 'aliceblue' => 'f0f8ff', 'antiquewhite' => 'faebd7', 'antiquewhite1' => 'ffefdb', 'antiquewhite2' => 'eedfcc', 'antiquewhite3' => 'cdc0b0', 'antiquewhite4' => '8b8378', 'aqua' => '00ffff', 'aquamarine1' => '7fffd4', 'aquamarine2' => '76eec6', 'aquamarine4' => '458b74', 'azure1' => 'f0ffff', 'azure2' => 'e0eeee', 'azure3' => 'c1cdcd', 'azure4' => '838b8b', 'beige' => 'f5f5dc', 'bisque1' => 'ffe4c4', 'bisque2' => 'eed5b7', 'bisque3' => 'cdb79e', 'bisque4' => '8b7d6b', 'black' => '000000', 'blanchedalmond' => 'ffebcd', 'blue' => '0000ff', 'blue1' => '0000ff', 'blue2' => '0000ee', 'blue4' => '00008b', 'blueviolet' => '8a2be2', 'brown' => 'a52a2a', 'brown1' => 'ff4040', 'brown2' => 'ee3b3b', 'brown3' => 'cd3333', 'brown4' => '8b2323', 'burlywood' => 'deb887', 'burlywood1' => 'ffd39b', 'burlywood2' => 'eec591', 'burlywood3' => 'cdaa7d', 'burlywood4' => '8b7355', 'cadetblue' => '5f9ea0', 'cadetblue1' => '98f5ff', 'cadetblue2' => '8ee5ee', 'cadetblue3' => '7ac5cd', 'cadetblue4' => '53868b', 'chartreuse1' => '7fff00', 'chartreuse2' => '76ee00', 'chartreuse3' => '66cd00', 'chartreuse4' => '458b00', 'chocolate' => 'd2691e', 'chocolate1' => 'ff7f24', 'chocolate2' => 'ee7621', 'chocolate3' => 'cd661d', 'coral' => 'ff7f50', 'coral1' => 'ff7256', 'coral2' => 'ee6a50', 'coral3' => 'cd5b45', 'coral4' => '8b3e2f', 'cornflowerblue' => '6495ed', 'cornsilk1' => 'fff8dc', 'cornsilk2' => 'eee8cd', 'cornsilk3' => 'cdc8b1', 'cornsilk4' => '8b8878', 'cyan1' => '00ffff', 'cyan2' => '00eeee', 'cyan3' => '00cdcd', 'cyan4' => '008b8b', 'darkgoldenrod' => 'b8860b', 'darkgoldenrod1' => 'ffb90f', 'darkgoldenrod2' => 'eead0e', 'darkgoldenrod3' => 'cd950c', 'darkgoldenrod4' => '8b6508', 'darkgreen' => '006400', 'darkkhaki' => 'bdb76b', 'darkolivegreen' => '556b2f', 'darkolivegreen1' => 'caff70', 'darkolivegreen2' => 'bcee68', 'darkolivegreen3' => 'a2cd5a', 'darkolivegreen4' => '6e8b3d', 'darkorange' => 'ff8c00', 'darkorange1' => 'ff7f00', 'darkorange2' => 'ee7600', 'darkorange3' => 'cd6600', 'darkorange4' => '8b4500', 'darkorchid' => '9932cc', 'darkorchid1' => 'bf3eff', 'darkorchid2' => 'b23aee', 'darkorchid3' => '9a32cd', 'darkorchid4' => '68228b', 'darksalmon' => 'e9967a', 'darkseagreen' => '8fbc8f', 'darkseagreen1' => 'c1ffc1', 'darkseagreen2' => 'b4eeb4', 'darkseagreen3' => '9bcd9b', 'darkseagreen4' => '698b69', 'darkslateblue' => '483d8b', 'darkslategray' => '2f4f4f', 'darkslategray1' => '97ffff', 'darkslategray2' => '8deeee', 'darkslategray3' => '79cdcd', 'darkslategray4' => '528b8b', 'darkturquoise' => '00ced1', 'darkviolet' => '9400d3', 'deeppink1' => 'ff1493', 'deeppink2' => 'ee1289', 'deeppink3' => 'cd1076', 'deeppink4' => '8b0a50', 'deepskyblue1' => '00bfff', 'deepskyblue2' => '00b2ee', 'deepskyblue3' => '009acd', 'deepskyblue4' => '00688b', 'dimgray' => '696969', 'dodgerblue1' => '1e90ff', 'dodgerblue2' => '1c86ee', 'dodgerblue3' => '1874cd', 'dodgerblue4' => '104e8b', 'firebrick' => 'b22222', 'firebrick1' => 'ff3030', 'firebrick2' => 'ee2c2c', 'firebrick3' => 'cd2626', 'firebrick4' => '8b1a1a', 'floralwhite' => 'fffaf0', 'forestgreen' => '228b22', 'fuchsia' => 'ff00ff', 'gainsboro' => 'dcdcdc', 'ghostwhite' => 'f8f8ff', 'gold1' => 'ffd700', 'gold2' => 'eec900', 'gold3' => 'cdad00', 'gold4' => '8b7500', 'goldenrod' => 'daa520', 'goldenrod1' => 'ffc125', 'goldenrod2' => 'eeb422', 'goldenrod3' => 'cd9b1d', 'goldenrod4' => '8b6914', 'gray' => 'bebebe', 'gray1' => '030303', 'gray10' => '1a1a1a', 'gray11' => '1c1c1c', 'gray12' => '1f1f1f', 'gray13' => '212121', 'gray14' => '242424', 'gray15' => '262626', 'gray16' => '292929', 'gray17' => '2b2b2b', 'gray18' => '2e2e2e', 'gray19' => '303030', 'gray2' => '050505', 'gray20' => '333333', 'gray21' => '363636', 'gray22' => '383838', 'gray23' => '3b3b3b', 'gray24' => '3d3d3d', 'gray25' => '404040', 'gray26' => '424242', 'gray27' => '454545', 'gray28' => '474747', 'gray29' => '4a4a4a', 'gray3' => '080808', 'gray30' => '4d4d4d', 'gray31' => '4f4f4f', 'gray32' => '525252', 'gray33' => '545454', 'gray34' => '575757', 'gray35' => '595959', 'gray36' => '5c5c5c', 'gray37' => '5e5e5e', 'gray38' => '616161', 'gray39' => '636363', 'gray4' => '0a0a0a', 'gray40' => '666666', 'gray41' => '696969', 'gray42' => '6b6b6b', 'gray43' => '6e6e6e', 'gray44' => '707070', 'gray45' => '737373', 'gray46' => '757575', 'gray47' => '787878', 'gray48' => '7a7a7a', 'gray49' => '7d7d7d', 'gray5' => '0d0d0d', 'gray50' => '7f7f7f', 'gray51' => '828282', 'gray52' => '858585', 'gray53' => '878787', 'gray54' => '8a8a8a', 'gray55' => '8c8c8c', 'gray56' => '8f8f8f', 'gray57' => '919191', 'gray58' => '949494', 'gray59' => '969696', 'gray6' => '0f0f0f', 'gray60' => '999999', 'gray61' => '9c9c9c', 'gray62' => '9e9e9e', 'gray63' => 'a1a1a1', 'gray64' => 'a3a3a3', 'gray65' => 'a6a6a6', 'gray66' => 'a8a8a8', 'gray67' => 'ababab', 'gray68' => 'adadad', 'gray69' => 'b0b0b0', 'gray7' => '121212', 'gray70' => 'b3b3b3', 'gray71' => 'b5b5b5', 'gray72' => 'b8b8b8', 'gray73' => 'bababa', 'gray74' => 'bdbdbd', 'gray75' => 'bfbfbf', 'gray76' => 'c2c2c2', 'gray77' => 'c4c4c4', 'gray78' => 'c7c7c7', 'gray79' => 'c9c9c9', 'gray8' => '141414', 'gray80' => 'cccccc', 'gray81' => 'cfcfcf', 'gray82' => 'd1d1d1', 'gray83' => 'd4d4d4', 'gray84' => 'd6d6d6', 'gray85' => 'd9d9d9', 'gray86' => 'dbdbdb', 'gray87' => 'dedede', 'gray88' => 'e0e0e0', 'gray89' => 'e3e3e3', 'gray9' => '171717', 'gray90' => 'e5e5e5', 'gray91' => 'e8e8e8', 'gray92' => 'ebebeb', 'gray93' => 'ededed', 'gray94' => 'f0f0f0', 'gray95' => 'f2f2f2', 'gray97' => 'f7f7f7', 'gray98' => 'fafafa', 'gray99' => 'fcfcfc', 'green' => '00ff00', 'green1' => '00ff00', 'green2' => '00ee00', 'green3' => '00cd00', 'green4' => '008b00', 'greenyellow' => 'adff2f', 'honeydew1' => 'f0fff0', 'honeydew2' => 'e0eee0', 'honeydew3' => 'c1cdc1', 'honeydew4' => '838b83', 'hotpink' => 'ff69b4', 'hotpink1' => 'ff6eb4', 'hotpink2' => 'ee6aa7', 'hotpink3' => 'cd6090', 'hotpink4' => '8b3a62', 'indianred' => 'cd5c5c', 'indianred1' => 'ff6a6a', 'indianred2' => 'ee6363', 'indianred3' => 'cd5555', 'indianred4' => '8b3a3a', 'ivory1' => 'fffff0', 'ivory2' => 'eeeee0', 'ivory3' => 'cdcdc1', 'ivory4' => '8b8b83', 'khaki' => 'f0e68c', 'khaki1' => 'fff68f', 'khaki2' => 'eee685', 'khaki3' => 'cdc673', 'khaki4' => '8b864e', 'lavender' => 'e6e6fa', 'lavenderblush1' => 'fff0f5', 'lavenderblush2' => 'eee0e5', 'lavenderblush3' => 'cdc1c5', 'lavenderblush4' => '8b8386', 'lawngreen' => '7cfc00', 'lemonchiffon1' => 'fffacd', 'lemonchiffon2' => 'eee9bf', 'lemonchiffon3' => 'cdc9a5', 'lemonchiffon4' => '8b8970', 'light' => 'eedd82', 'lightblue' => 'add8e6', 'lightblue1' => 'bfefff', 'lightblue2' => 'b2dfee', 'lightblue3' => '9ac0cd', 'lightblue4' => '68838b', 'lightcoral' => 'f08080', 'lightcyan1' => 'e0ffff', 'lightcyan2' => 'd1eeee', 'lightcyan3' => 'b4cdcd', 'lightcyan4' => '7a8b8b', 'lightgoldenrod1' => 'ffec8b', 'lightgoldenrod2' => 'eedc82', 'lightgoldenrod3' => 'cdbe70', 'lightgoldenrod4' => '8b814c', 'lightgoldenrodyellow' => 'fafad2', 'lightgray' => 'd3d3d3', 'lightpink' => 'ffb6c1', 'lightpink1' => 'ffaeb9', 'lightpink2' => 'eea2ad', 'lightpink3' => 'cd8c95', 'lightpink4' => '8b5f65', 'lightsalmon1' => 'ffa07a', 'lightsalmon2' => 'ee9572', 'lightsalmon3' => 'cd8162', 'lightsalmon4' => '8b5742', 'lightseagreen' => '20b2aa', 'lightskyblue' => '87cefa', 'lightskyblue1' => 'b0e2ff', 'lightskyblue2' => 'a4d3ee', 'lightskyblue3' => '8db6cd', 'lightskyblue4' => '607b8b', 'lightslateblue' => '8470ff', 'lightslategray' => '778899', 'lightsteelblue' => 'b0c4de', 'lightsteelblue1' => 'cae1ff', 'lightsteelblue2' => 'bcd2ee', 'lightsteelblue3' => 'a2b5cd', 'lightsteelblue4' => '6e7b8b', 'lightyellow1' => 'ffffe0', 'lightyellow2' => 'eeeed1', 'lightyellow3' => 'cdcdb4', 'lightyellow4' => '8b8b7a', 'lime' => '00ff00', 'limegreen' => '32cd32', 'linen' => 'faf0e6', 'magenta' => 'ff00ff', 'magenta2' => 'ee00ee', 'magenta3' => 'cd00cd', 'magenta4' => '8b008b', 'maroon' => 'b03060', 'maroon1' => 'ff34b3', 'maroon2' => 'ee30a7', 'maroon3' => 'cd2990', 'maroon4' => '8b1c62', 'medium' => '66cdaa', 'mediumaquamarine' => '66cdaa', 'mediumblue' => '0000cd', 'mediumorchid' => 'ba55d3', 'mediumorchid1' => 'e066ff', 'mediumorchid2' => 'd15fee', 'mediumorchid3' => 'b452cd', 'mediumorchid4' => '7a378b', 'mediumpurple' => '9370db', 'mediumpurple1' => 'ab82ff', 'mediumpurple2' => '9f79ee', 'mediumpurple3' => '8968cd', 'mediumpurple4' => '5d478b', 'mediumseagreen' => '3cb371', 'mediumslateblue' => '7b68ee', 'mediumspringgreen' => '00fa9a', 'mediumturquoise' => '48d1cc', 'mediumvioletred' => 'c71585', 'midnightblue' => '191970', 'mintcream' => 'f5fffa', 'mistyrose1' => 'ffe4e1', 'mistyrose2' => 'eed5d2', 'mistyrose3' => 'cdb7b5', 'mistyrose4' => '8b7d7b', 'moccasin' => 'ffe4b5', 'navajowhite1' => 'ffdead', 'navajowhite2' => 'eecfa1', 'navajowhite3' => 'cdb38b', 'navajowhite4' => '8b795e', 'navy' => '000080', 'navyblue' => '000080', 'oldlace' => 'fdf5e6', 'olive' => '808000', 'olivedrab' => '6b8e23', 'olivedrab1' => 'c0ff3e', 'olivedrab2' => 'b3ee3a', 'olivedrab4' => '698b22', 'orange' => 'ffa500', 'orange1' => 'ffa500', 'orange2' => 'ee9a00', 'orange3' => 'cd8500', 'orange4' => '8b5a00', 'orangered1' => 'ff4500', 'orangered2' => 'ee4000', 'orangered3' => 'cd3700', 'orangered4' => '8b2500', 'orchid' => 'da70d6', 'orchid1' => 'ff83fa', 'orchid2' => 'ee7ae9', 'orchid3' => 'cd69c9', 'orchid4' => '8b4789', 'pale' => 'db7093', 'palegoldenrod' => 'eee8aa', 'palegreen' => '98fb98', 'palegreen1' => '9aff9a', 'palegreen2' => '90ee90', 'palegreen3' => '7ccd7c', 'palegreen4' => '548b54', 'paleturquoise' => 'afeeee', 'paleturquoise1' => 'bbffff', 'paleturquoise2' => 'aeeeee', 'paleturquoise3' => '96cdcd', 'paleturquoise4' => '668b8b', 'palevioletred' => 'db7093', 'palevioletred1' => 'ff82ab', 'palevioletred2' => 'ee799f', 'palevioletred3' => 'cd6889', 'palevioletred4' => '8b475d', 'papayawhip' => 'ffefd5', 'peachpuff1' => 'ffdab9', 'peachpuff2' => 'eecbad', 'peachpuff3' => 'cdaf95', 'peachpuff4' => '8b7765', 'pink' => 'ffc0cb', 'pink1' => 'ffb5c5', 'pink2' => 'eea9b8', 'pink3' => 'cd919e', 'pink4' => '8b636c', 'plum' => 'dda0dd', 'plum1' => 'ffbbff', 'plum2' => 'eeaeee', 'plum3' => 'cd96cd', 'plum4' => '8b668b', 'powderblue' => 'b0e0e6', 'purple' => 'a020f0', 'rebeccapurple' => '663399', 'purple1' => '9b30ff', 'purple2' => '912cee', 'purple3' => '7d26cd', 'purple4' => '551a8b', 'red' => 'ff0000', 'red1' => 'ff0000', 'red2' => 'ee0000', 'red3' => 'cd0000', 'red4' => '8b0000', 'rosybrown' => 'bc8f8f', 'rosybrown1' => 'ffc1c1', 'rosybrown2' => 'eeb4b4', 'rosybrown3' => 'cd9b9b', 'rosybrown4' => '8b6969', 'royalblue' => '4169e1', 'royalblue1' => '4876ff', 'royalblue2' => '436eee', 'royalblue3' => '3a5fcd', 'royalblue4' => '27408b', 'saddlebrown' => '8b4513', 'salmon' => 'fa8072', 'salmon1' => 'ff8c69', 'salmon2' => 'ee8262', 'salmon3' => 'cd7054', 'salmon4' => '8b4c39', 'sandybrown' => 'f4a460', 'seagreen1' => '54ff9f', 'seagreen2' => '4eee94', 'seagreen3' => '43cd80', 'seagreen4' => '2e8b57', 'seashell1' => 'fff5ee', 'seashell2' => 'eee5de', 'seashell3' => 'cdc5bf', 'seashell4' => '8b8682', 'sienna' => 'a0522d', 'sienna1' => 'ff8247', 'sienna2' => 'ee7942', 'sienna3' => 'cd6839', 'sienna4' => '8b4726', 'silver' => 'c0c0c0', 'skyblue' => '87ceeb', 'skyblue1' => '87ceff', 'skyblue2' => '7ec0ee', 'skyblue3' => '6ca6cd', 'skyblue4' => '4a708b', 'slateblue' => '6a5acd', 'slateblue1' => '836fff', 'slateblue2' => '7a67ee', 'slateblue3' => '6959cd', 'slateblue4' => '473c8b', 'slategray' => '708090', 'slategray1' => 'c6e2ff', 'slategray2' => 'b9d3ee', 'slategray3' => '9fb6cd', 'slategray4' => '6c7b8b', 'snow1' => 'fffafa', 'snow2' => 'eee9e9', 'snow3' => 'cdc9c9', 'snow4' => '8b8989', 'springgreen1' => '00ff7f', 'springgreen2' => '00ee76', 'springgreen3' => '00cd66', 'springgreen4' => '008b45', 'steelblue' => '4682b4', 'steelblue1' => '63b8ff', 'steelblue2' => '5cacee', 'steelblue3' => '4f94cd', 'steelblue4' => '36648b', 'tan' => 'd2b48c', 'tan1' => 'ffa54f', 'tan2' => 'ee9a49', 'tan3' => 'cd853f', 'tan4' => '8b5a2b', 'teal' => '008080', 'thistle' => 'd8bfd8', 'thistle1' => 'ffe1ff', 'thistle2' => 'eed2ee', 'thistle3' => 'cdb5cd', 'thistle4' => '8b7b8b', 'tomato1' => 'ff6347', 'tomato2' => 'ee5c42', 'tomato3' => 'cd4f39', 'tomato4' => '8b3626', 'turquoise' => '40e0d0', 'turquoise1' => '00f5ff', 'turquoise2' => '00e5ee', 'turquoise3' => '00c5cd', 'turquoise4' => '00868b', 'violet' => 'ee82ee', 'violetred' => 'd02090', 'violetred1' => 'ff3e96', 'violetred2' => 'ee3a8c', 'violetred3' => 'cd3278', 'violetred4' => '8b2252', 'wheat' => 'f5deb3', 'wheat1' => 'ffe7ba', 'wheat2' => 'eed8ae', 'wheat3' => 'cdba96', 'wheat4' => '8b7e66', 'white' => 'ffffff', 'whitesmoke' => 'f5f5f5', 'yellow' => 'ffff00', 'yellow1' => 'ffff00', 'yellow2' => 'eeee00', 'yellow3' => 'cdcd00', 'yellow4' => '8b8b00', 'yellowgreen' => '9acd32', ); protected $face; protected $size; protected $color; protected $bold = false; protected $italic = false; protected $underline = false; protected $superscript = false; protected $subscript = false; protected $strikethrough = false; protected $startTagCallbacks = array( 'font' => 'startFontTag', 'b' => 'startBoldTag', 'strong' => 'startBoldTag', 'i' => 'startItalicTag', 'em' => 'startItalicTag', 'u' => 'startUnderlineTag', 'ins' => 'startUnderlineTag', 'del' => 'startStrikethruTag', 'sup' => 'startSuperscriptTag', 'sub' => 'startSubscriptTag', ); protected $endTagCallbacks = array( 'font' => 'endFontTag', 'b' => 'endBoldTag', 'strong' => 'endBoldTag', 'i' => 'endItalicTag', 'em' => 'endItalicTag', 'u' => 'endUnderlineTag', 'ins' => 'endUnderlineTag', 'del' => 'endStrikethruTag', 'sup' => 'endSuperscriptTag', 'sub' => 'endSubscriptTag', 'br' => 'breakTag', 'p' => 'breakTag', 'h1' => 'breakTag', 'h2' => 'breakTag', 'h3' => 'breakTag', 'h4' => 'breakTag', 'h5' => 'breakTag', 'h6' => 'breakTag', ); protected $stack = array(); protected $stringData = ''; protected $richTextObject; protected function initialise() { $this->face = $this->size = $this->color = null; $this->bold = $this->italic = $this->underline = $this->superscript = $this->subscript = $this->strikethrough = false; $this->stack = array(); $this->stringData = ''; } public function toRichTextObject($html) { $this->initialise(); // Create a new DOM object $dom = new \DOMDocument; // Load the HTML file into the DOM object // Note the use of error suppression, because typically this will be an html fragment, so not fully valid markup $loaded = @$dom->loadHTML($html); // Discard excess white space $dom->preserveWhiteSpace = false; $this->richTextObject = new PHPExcel_RichText();; $this->parseElements($dom); // Clean any further spurious whitespace $this->cleanWhitespace(); return $this->richTextObject; } protected function cleanWhitespace() { foreach ($this->richTextObject->getRichTextElements() as $key => $element) { $text = $element->getText(); // Trim any leading spaces on the first run if ($key == 0) { $text = ltrim($text); } // Trim any spaces immediately after a line break $text = preg_replace('/\n */mu', "\n", $text); $element->setText($text); } } protected function buildTextRun() { $text = $this->stringData; if (trim($text) === '') { return; } $richtextRun = $this->richTextObject->createTextRun($this->stringData); if ($this->face) { $richtextRun->getFont()->setName($this->face); } if ($this->size) { $richtextRun->getFont()->setSize($this->size); } if ($this->color) { $richtextRun->getFont()->setColor(new PHPExcel_Style_Color('ff' . $this->color)); } if ($this->bold) { $richtextRun->getFont()->setBold(true); } if ($this->italic) { $richtextRun->getFont()->setItalic(true); } if ($this->underline) { $richtextRun->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); } if ($this->superscript) { $richtextRun->getFont()->setSuperScript(true); } if ($this->subscript) { $richtextRun->getFont()->setSubScript(true); } if ($this->strikethrough) { $richtextRun->getFont()->setStrikethrough(true); } $this->stringData = ''; } protected function rgbToColour($rgb) { preg_match_all('/\d+/', $rgb, $values); foreach ($values[0] as &$value) { $value = str_pad(dechex($value), 2, '0', STR_PAD_LEFT); } return implode($values[0]); } protected function colourNameLookup($rgb) { return self::$colourMap[$rgb]; } protected function startFontTag($tag) { foreach ($tag->attributes as $attribute) { $attributeName = strtolower($attribute->name); $attributeValue = $attribute->value; if ($attributeName == 'color') { if (preg_match('/rgb\s*\(/', $attributeValue)) { $this->$attributeName = $this->rgbToColour($attributeValue); } elseif (strpos(trim($attributeValue), '#') === 0) { $this->$attributeName = ltrim($attributeValue, '#'); } else { $this->$attributeName = $this->colourNameLookup($attributeValue); } } else { $this->$attributeName = $attributeValue; } } } protected function endFontTag() { $this->face = $this->size = $this->color = null; } protected function startBoldTag() { $this->bold = true; } protected function endBoldTag() { $this->bold = false; } protected function startItalicTag() { $this->italic = true; } protected function endItalicTag() { $this->italic = false; } protected function startUnderlineTag() { $this->underline = true; } protected function endUnderlineTag() { $this->underline = false; } protected function startSubscriptTag() { $this->subscript = true; } protected function endSubscriptTag() { $this->subscript = false; } protected function startSuperscriptTag() { $this->superscript = true; } protected function endSuperscriptTag() { $this->superscript = false; } protected function startStrikethruTag() { $this->strikethrough = true; } protected function endStrikethruTag() { $this->strikethrough = false; } protected function breakTag() { $this->stringData .= "\n"; } protected function parseTextNode(DOMText $textNode) { $domText = preg_replace( '/\s+/u', ' ', str_replace(array("\r", "\n"), ' ', $textNode->nodeValue) ); $this->stringData .= $domText; $this->buildTextRun(); } protected function handleCallback($element, $callbackTag, $callbacks) { if (isset($callbacks[$callbackTag])) { $elementHandler = $callbacks[$callbackTag]; if (method_exists($this, $elementHandler)) { call_user_func(array($this, $elementHandler), $element); } } } protected function parseElementNode(DOMElement $element) { $callbackTag = strtolower($element->nodeName); $this->stack[] = $callbackTag; $this->handleCallback($element, $callbackTag, $this->startTagCallbacks); $this->parseElements($element); array_pop($this->stack); $this->handleCallback($element, $callbackTag, $this->endTagCallbacks); } protected function parseElements(DOMNode $element) { foreach ($element->childNodes as $child) { if ($child instanceof DOMText) { $this->parseTextNode($child); } elseif ($child instanceof DOMElement) { $this->parseElementNode($child); } } } } home/papecmvm/public_html/application/third_party/Classes/PHPExcel/Writer/HTML.php 0000644 00000133361 14677422002 0024213 0 ustar 00 <?php /** * PHPExcel * * Copyright (c) 2006 - 2014 PHPExcel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * @category PHPExcel * @package PHPExcel_Writer_HTML * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @version ##VERSION##, ##DATE## */ /** * PHPExcel_Writer_HTML * * @category PHPExcel * @package PHPExcel_Writer_HTML * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) */ class PHPExcel_Writer_HTML extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter { /** * PHPExcel object * * @var PHPExcel */ protected $_phpExcel; /** * Sheet index to write * * @var int */ private $_sheetIndex = 0; /** * Images root * * @var string */ private $_imagesRoot = '.'; /** * embed images, or link to images * * @var boolean */ private $_embedImages = FALSE; /** * Use inline CSS? * * @var boolean */ private $_useInlineCss = false; /** * Array of CSS styles * * @var array */ private $_cssStyles = null; /** * Array of column widths in points * * @var array */ private $_columnWidths = null; /** * Default font * * @var PHPExcel_Style_Font */ private $_defaultFont; /** * Flag whether spans have been calculated * * @var boolean */ private $_spansAreCalculated = false; /** * Excel cells that should not be written as HTML cells * * @var array */ private $_isSpannedCell = array(); /** * Excel cells that are upper-left corner in a cell merge * * @var array */ private $_isBaseCell = array(); /** * Excel rows that should not be written as HTML rows * * @var array */ private $_isSpannedRow = array(); /** * Is the current writer creating PDF? * * @var boolean */ protected $_isPdf = false; /** * Generate the Navigation block * * @var boolean */ private $_generateSheetNavigationBlock = true; /** * Create a new PHPExcel_Writer_HTML * * @param PHPExcel $phpExcel PHPExcel object */ public function __construct(PHPExcel $phpExcel) { $this->_phpExcel = $phpExcel; $this->_defaultFont = $this->_phpExcel->getDefaultStyle()->getFont(); } /** * Save PHPExcel to file * * @param string $pFilename * @throws PHPExcel_Writer_Exception */ public function save($pFilename = null) { // garbage collect $this->_phpExcel->garbageCollect(); $saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog(); PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE); $saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType(); PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE); // Build CSS $this->buildCSS(!$this->_useInlineCss); // Open file $fileHandle = fopen($pFilename, 'wb+'); if ($fileHandle === false) { throw new PHPExcel_Writer_Exception("Could not open file $pFilename for writing."); } // Write headers fwrite($fileHandle, $this->generateHTMLHeader(!$this->_useInlineCss)); // Write navigation (tabs) if ((!$this->_isPdf) && ($this->_generateSheetNavigationBlock)) { fwrite($fileHandle, $this->generateNavigation()); } // Write data fwrite($fileHandle, $this->generateSheetData()); // Write footer fwrite($fileHandle, $this->generateHTMLFooter()); // Close file fclose($fileHandle); PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType); PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog); } /** * Map VAlign * * @param string $vAlign Vertical alignment * @return string */ private function _mapVAlign($vAlign) { switch ($vAlign) { case PHPExcel_Style_Alignment::VERTICAL_BOTTOM: return 'bottom'; case PHPExcel_Style_Alignment::VERTICAL_TOP: return 'top'; case PHPExcel_Style_Alignment::VERTICAL_CENTER: case PHPExcel_Style_Alignment::VERTICAL_JUSTIFY: return 'middle'; default: return 'baseline'; } } /** * Map HAlign * * @param string $hAlign Horizontal alignment * @return string|false */ private function _mapHAlign($hAlign) { switch ($hAlign) { case PHPExcel_Style_Alignment::HORIZONTAL_GENERAL: return false; case PHPExcel_Style_Alignment::HORIZONTAL_LEFT: return 'left'; case PHPExcel_Style_Alignment::HORIZONTAL_RIGHT: return 'right'; case PHPExcel_Style_Alignment::HORIZONTAL_CENTER: case PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS: return 'center'; case PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY: return 'justify'; default: return false; } } /** * Map border style * * @param int $borderStyle Sheet index * @return string */ private function _mapBorderStyle($borderStyle) { switch ($borderStyle) { case PHPExcel_Style_Border::BORDER_NONE: return 'none'; case PHPExcel_Style_Border::BORDER_DASHDOT: return '1px dashed'; case PHPExcel_Style_Border::BORDER_DASHDOTDOT: return '1px dotted'; case PHPExcel_Style_Border::BORDER_DASHED: return '1px dashed'; case PHPExcel_Style_Border::BORDER_DOTTED: return '1px dotted'; case PHPExcel_Style_Border::BORDER_DOUBLE: return '3px double'; case PHPExcel_Style_Border::BORDER_HAIR: return '1px solid'; case PHPExcel_Style_Border::BORDER_MEDIUM: return '2px solid'; case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT: return '2px dashed'; case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT: return '2px dotted'; case PHPExcel_Style_Border::BORDER_MEDIUMDASHED: return '2px dashed'; case PHPExcel_Style_Border::BORDER_SLANTDASHDOT: return '2px dashed'; case PHPExcel_Style_Border::BORDER_THICK: return '3px solid'; case PHPExcel_Style_Border::BORDER_THIN: return '1px solid'; default: return '1px solid'; // map others to thin } } /** * Get sheet index * * @return int */ public function getSheetIndex() { return $this->_sheetIndex; } /** * Set sheet index * * @param int $pValue Sheet index * @return PHPExcel_Writer_HTML */ public function setSheetIndex($pValue = 0) { $this->_sheetIndex = $pValue; return $this; } /** * Get sheet index * * @return boolean */ public function getGenerateSheetNavigationBlock() { return $this->_generateSheetNavigationBlock; } /** * Set sheet index * * @param boolean $pValue Flag indicating whether the sheet navigation block should be generated or not * @return PHPExcel_Writer_HTML */ public function setGenerateSheetNavigationBlock($pValue = true) { $this->_generateSheetNavigationBlock = (bool) $pValue; return $this; } /** * Write all sheets (resets sheetIndex to NULL) */ public function writeAllSheets() { $this->_sheetIndex = null; return $this; } /** * Generate HTML header * * @param boolean $pIncludeStyles Include styles? * @return string * @throws PHPExcel_Writer_Exception */ public function generateHTMLHeader($pIncludeStyles = false) { // PHPExcel object known? if (is_null($this->_phpExcel)) { throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); } // Construct HTML $properties = $this->_phpExcel->getProperties(); $html = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' . PHP_EOL; $html .= '<!-- Generated by PHPExcel - http://www.phpexcel.net -->' . PHP_EOL; $html .= '<html>' . PHP_EOL; $html .= ' <head>' . PHP_EOL; $html .= ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . PHP_EOL; if ($properties->getTitle() > '') $html .= ' <title>' . htmlspecialchars($properties->getTitle()) . '</title>' . PHP_EOL; if ($properties->getCreator() > '') $html .= ' <meta name="author" content="' . htmlspecialchars($properties->getCreator()) . '" />' . PHP_EOL; if ($properties->getTitle() > '') $html .= ' <meta name="title" content="' . htmlspecialchars($properties->getTitle()) . '" />' . PHP_EOL; if ($properties->getDescription() > '') $html .= ' <meta name="description" content="' . htmlspecialchars($properties->getDescription()) . '" />' . PHP_EOL; if ($properties->getSubject() > '') $html .= ' <meta name="subject" content="' . htmlspecialchars($properties->getSubject()) . '" />' . PHP_EOL; if ($properties->getKeywords() > '') $html .= ' <meta name="keywords" content="' . htmlspecialchars($properties->getKeywords()) . '" />' . PHP_EOL; if ($properties->getCategory() > '') $html .= ' <meta name="category" content="' . htmlspecialchars($properties->getCategory()) . '" />' . PHP_EOL; if ($properties->getCompany() > '') $html .= ' <meta name="company" content="' . htmlspecialchars($properties->getCompany()) . '" />' . PHP_EOL; if ($properties->getManager() > '') $html .= ' <meta name="manager" content="' . htmlspecialchars($properties->getManager()) . '" />' . PHP_EOL; if ($pIncludeStyles) { $html .= $this->generateStyles(true); } $html .= ' </head>' . PHP_EOL; $html .= '' . PHP_EOL; $html .= ' <body>' . PHP_EOL; // Return return $html; } /** * Generate sheet data * * @return string * @throws PHPExcel_Writer_Exception */ public function generateSheetData() { // PHPExcel object known? if (is_null($this->_phpExcel)) { throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); } // Ensure that Spans have been calculated? if (!$this->_spansAreCalculated) { $this->_calculateSpans(); } // Fetch sheets $sheets = array(); if (is_null($this->_sheetIndex)) { $sheets = $this->_phpExcel->getAllSheets(); } else { $sheets[] = $this->_phpExcel->getSheet($this->_sheetIndex); } // Construct HTML $html = ''; // Loop all sheets $sheetId = 0; foreach ($sheets as $sheet) { // Write table header $html .= $this->_generateTableHeader($sheet); // Get worksheet dimension $dimension = explode(':', $sheet->calculateWorksheetDimension()); $dimension[0] = PHPExcel_Cell::coordinateFromString($dimension[0]); $dimension[0][0] = PHPExcel_Cell::columnIndexFromString($dimension[0][0]) - 1; $dimension[1] = PHPExcel_Cell::coordinateFromString($dimension[1]); $dimension[1][0] = PHPExcel_Cell::columnIndexFromString($dimension[1][0]) - 1; // row min,max $rowMin = $dimension[0][1]; $rowMax = $dimension[1][1]; // calculate start of <tbody>, <thead> $tbodyStart = $rowMin; $theadStart = $theadEnd = 0; // default: no <thead> no </thead> if ($sheet->getPageSetup()->isRowsToRepeatAtTopSet()) { $rowsToRepeatAtTop = $sheet->getPageSetup()->getRowsToRepeatAtTop(); // we can only support repeating rows that start at top row if ($rowsToRepeatAtTop[0] == 1) { $theadStart = $rowsToRepeatAtTop[0]; $theadEnd = $rowsToRepeatAtTop[1]; $tbodyStart = $rowsToRepeatAtTop[1] + 1; } } // Loop through cells $row = $rowMin-1; while($row++ < $rowMax) { // <thead> ? if ($row == $theadStart) { $html .= ' <thead>' . PHP_EOL; $cellType = 'th'; } // <tbody> ? if ($row == $tbodyStart) { $html .= ' <tbody>' . PHP_EOL; $cellType = 'td'; } // Write row if there are HTML table cells in it if ( !isset($this->_isSpannedRow[$sheet->getParent()->getIndex($sheet)][$row]) ) { // Start a new rowData $rowData = array(); // Loop through columns $column = $dimension[0][0] - 1; while($column++ < $dimension[1][0]) { // Cell exists? if ($sheet->cellExistsByColumnAndRow($column, $row)) { $rowData[$column] = PHPExcel_Cell::stringFromColumnIndex($column) . $row; } else { $rowData[$column] = ''; } } $html .= $this->_generateRow($sheet, $rowData, $row - 1, $cellType); } // </thead> ? if ($row == $theadEnd) { $html .= ' </thead>' . PHP_EOL; } } $html .= $this->_extendRowsForChartsAndImages($sheet, $row); // Close table body. $html .= ' </tbody>' . PHP_EOL; // Write table footer $html .= $this->_generateTableFooter(); // Writing PDF? if ($this->_isPdf) { if (is_null($this->_sheetIndex) && $sheetId + 1 < $this->_phpExcel->getSheetCount()) { $html .= '<div style="page-break-before:always" />'; } } // Next sheet ++$sheetId; } // Return return $html; } /** * Generate sheet tabs * * @return string * @throws PHPExcel_Writer_Exception */ public function generateNavigation() { // PHPExcel object known? if (is_null($this->_phpExcel)) { throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); } // Fetch sheets $sheets = array(); if (is_null($this->_sheetIndex)) { $sheets = $this->_phpExcel->getAllSheets(); } else { $sheets[] = $this->_phpExcel->getSheet($this->_sheetIndex); } // Construct HTML $html = ''; // Only if there are more than 1 sheets if (count($sheets) > 1) { // Loop all sheets $sheetId = 0; $html .= '<ul class="navigation">' . PHP_EOL; foreach ($sheets as $sheet) { $html .= ' <li class="sheet' . $sheetId . '"><a href="#sheet' . $sheetId . '">' . $sheet->getTitle() . '</a></li>' . PHP_EOL; ++$sheetId; } $html .= '</ul>' . PHP_EOL; } return $html; } private function _extendRowsForChartsAndImages(PHPExcel_Worksheet $pSheet, $row) { $rowMax = $row; $colMax = 'A'; if ($this->_includeCharts) { foreach ($pSheet->getChartCollection() as $chart) { if ($chart instanceof PHPExcel_Chart) { $chartCoordinates = $chart->getTopLeftPosition(); $chartTL = PHPExcel_Cell::coordinateFromString($chartCoordinates['cell']); $chartCol = PHPExcel_Cell::columnIndexFromString($chartTL[0]); if ($chartTL[1] > $rowMax) { $rowMax = $chartTL[1]; if ($chartCol > PHPExcel_Cell::columnIndexFromString($colMax)) { $colMax = $chartTL[0]; } } } } } foreach ($pSheet->getDrawingCollection() as $drawing) { if ($drawing instanceof PHPExcel_Worksheet_Drawing) { $imageTL = PHPExcel_Cell::coordinateFromString($drawing->getCoordinates()); $imageCol = PHPExcel_Cell::columnIndexFromString($imageTL[0]); if ($imageTL[1] > $rowMax) { $rowMax = $imageTL[1]; if ($imageCol > PHPExcel_Cell::columnIndexFromString($colMax)) { $colMax = $imageTL[0]; } } } } $html = ''; $colMax++; while ($row < $rowMax) { $html .= '<tr>'; for ($col = 'A'; $col != $colMax; ++$col) { $html .= '<td>'; $html .= $this->_writeImageInCell($pSheet, $col.$row); if ($this->_includeCharts) { $html .= $this->_writeChartInCell($pSheet, $col.$row); } $html .= '</td>'; } ++$row; $html .= '</tr>'; } return $html; } /** * Generate image tag in cell * * @param PHPExcel_Worksheet $pSheet PHPExcel_Worksheet * @param string $coordinates Cell coordinates * @return string * @throws PHPExcel_Writer_Exception */ private function _writeImageInCell(PHPExcel_Worksheet $pSheet, $coordinates) { // Construct HTML $html = ''; // Write images foreach ($pSheet->getDrawingCollection() as $drawing) { if ($drawing instanceof PHPExcel_Worksheet_Drawing) { if ($drawing->getCoordinates() == $coordinates) { $filename = $drawing->getPath(); // Strip off eventual '.' if (substr($filename, 0, 1) == '.') { $filename = substr($filename, 1); } // Prepend images root $filename = $this->getImagesRoot() . $filename; // Strip off eventual '.' if (substr($filename, 0, 1) == '.' && substr($filename, 0, 2) != './') { $filename = substr($filename, 1); } // Convert UTF8 data to PCDATA $filename = htmlspecialchars($filename); $html .= PHP_EOL; if ((!$this->_embedImages) || ($this->_isPdf)) { $imageData = $filename; } else { $imageDetails = getimagesize($filename); if ($fp = fopen($filename,"rb", 0)) { $picture = fread($fp,filesize($filename)); fclose($fp); // base64 encode the binary data, then break it // into chunks according to RFC 2045 semantics $base64 = chunk_split(base64_encode($picture)); $imageData = 'data:'.$imageDetails['mime'].';base64,' . $base64; } else { $imageData = $filename; } } $html .= '<div style="position: relative;">'; $html .= '<img style="position: absolute; z-index: 1; left: ' . $drawing->getOffsetX() . 'px; top: ' . $drawing->getOffsetY() . 'px; width: ' . $drawing->getWidth() . 'px; height: ' . $drawing->getHeight() . 'px;" src="' . $imageData . '" border="0" />'; $html .= '</div>'; } } } // Return return $html; } /** * Generate chart tag in cell * * @param PHPExcel_Worksheet $pSheet PHPExcel_Worksheet * @param string $coordinates Cell coordinates * @return string * @throws PHPExcel_Writer_Exception */ private function _writeChartInCell(PHPExcel_Worksheet $pSheet, $coordinates) { // Construct HTML $html = ''; // Write charts foreach ($pSheet->getChartCollection() as $chart) { if ($chart instanceof PHPExcel_Chart) { $chartCoordinates = $chart->getTopLeftPosition(); if ($chartCoordinates['cell'] == $coordinates) { $chartFileName = PHPExcel_Shared_File::sys_get_temp_dir().'/'.uniqid().'.png'; if (!$chart->render($chartFileName)) { return; } $html .= PHP_EOL; $imageDetails = getimagesize($chartFileName); if ($fp = fopen($chartFileName,"rb", 0)) { $picture = fread($fp,filesize($chartFileName)); fclose($fp); // base64 encode the binary data, then break it // into chunks according to RFC 2045 semantics $base64 = chunk_split(base64_encode($picture)); $imageData = 'data:'.$imageDetails['mime'].';base64,' . $base64; $html .= '<div style="position: relative;">'; $html .= '<img style="position: absolute; z-index: 1; left: ' . $chartCoordinates['xOffset'] . 'px; top: ' . $chartCoordinates['yOffset'] . 'px; width: ' . $imageDetails[0] . 'px; height: ' . $imageDetails[1] . 'px;" src="' . $imageData . '" border="0" />' . PHP_EOL; $html .= '</div>'; unlink($chartFileName); } } } } // Return return $html; } /** * Generate CSS styles * * @param boolean $generateSurroundingHTML Generate surrounding HTML tags? (<style> and </style>) * @return string * @throws PHPExcel_Writer_Exception */ public function generateStyles($generateSurroundingHTML = true) { // PHPExcel object known? if (is_null($this->_phpExcel)) { throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); } // Build CSS $css = $this->buildCSS($generateSurroundingHTML); // Construct HTML $html = ''; // Start styles if ($generateSurroundingHTML) { $html .= ' <style type="text/css">' . PHP_EOL; $html .= ' html { ' . $this->_assembleCSS($css['html']) . ' }' . PHP_EOL; } // Write all other styles foreach ($css as $styleName => $styleDefinition) { if ($styleName != 'html') { $html .= ' ' . $styleName . ' { ' . $this->_assembleCSS($styleDefinition) . ' }' . PHP_EOL; } } // End styles if ($generateSurroundingHTML) { $html .= ' </style>' . PHP_EOL; } // Return return $html; } /** * Build CSS styles * * @param boolean $generateSurroundingHTML Generate surrounding HTML style? (html { }) * @return array * @throws PHPExcel_Writer_Exception */ public function buildCSS($generateSurroundingHTML = true) { // PHPExcel object known? if (is_null($this->_phpExcel)) { throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); } // Cached? if (!is_null($this->_cssStyles)) { return $this->_cssStyles; } // Ensure that spans have been calculated if (!$this->_spansAreCalculated) { $this->_calculateSpans(); } // Construct CSS $css = array(); // Start styles if ($generateSurroundingHTML) { // html { } $css['html']['font-family'] = 'Calibri, Arial, Helvetica, sans-serif'; $css['html']['font-size'] = '11pt'; $css['html']['background-color'] = 'white'; } // table { } $css['table']['border-collapse'] = 'collapse'; if (!$this->_isPdf) { $css['table']['page-break-after'] = 'always'; } // .gridlines td { } $css['.gridlines td']['border'] = '1px dotted black'; $css['.gridlines th']['border'] = '1px dotted black'; // .b {} $css['.b']['text-align'] = 'center'; // BOOL // .e {} $css['.e']['text-align'] = 'center'; // ERROR // .f {} $css['.f']['text-align'] = 'right'; // FORMULA // .inlineStr {} $css['.inlineStr']['text-align'] = 'left'; // INLINE // .n {} $css['.n']['text-align'] = 'right'; // NUMERIC // .s {} $css['.s']['text-align'] = 'left'; // STRING // Calculate cell style hashes foreach ($this->_phpExcel->getCellXfCollection() as $index => $style) { $css['td.style' . $index] = $this->_createCSSStyle( $style ); $css['th.style' . $index] = $this->_createCSSStyle( $style ); } // Fetch sheets $sheets = array(); if (is_null($this->_sheetIndex)) { $sheets = $this->_phpExcel->getAllSheets(); } else { $sheets[] = $this->_phpExcel->getSheet($this->_sheetIndex); } // Build styles per sheet foreach ($sheets as $sheet) { // Calculate hash code $sheetIndex = $sheet->getParent()->getIndex($sheet); // Build styles // Calculate column widths $sheet->calculateColumnWidths(); // col elements, initialize $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()) - 1; $column = -1; while($column++ < $highestColumnIndex) { $this->_columnWidths[$sheetIndex][$column] = 42; // approximation $css['table.sheet' . $sheetIndex . ' col.col' . $column]['width'] = '42pt'; } // col elements, loop through columnDimensions and set width foreach ($sheet->getColumnDimensions() as $columnDimension) { if (($width = PHPExcel_Shared_Drawing::cellDimensionToPixels($columnDimension->getWidth(), $this->_defaultFont)) >= 0) { $width = PHPExcel_Shared_Drawing::pixelsToPoints($width); $column = PHPExcel_Cell::columnIndexFromString($columnDimension->getColumnIndex()) - 1; $this->_columnWidths[$sheetIndex][$column] = $width; $css['table.sheet' . $sheetIndex . ' col.col' . $column]['width'] = $width . 'pt'; if ($columnDimension->getVisible() === false) { $css['table.sheet' . $sheetIndex . ' col.col' . $column]['visibility'] = 'collapse'; $css['table.sheet' . $sheetIndex . ' col.col' . $column]['*display'] = 'none'; // target IE6+7 } } } // Default row height $rowDimension = $sheet->getDefaultRowDimension(); // table.sheetN tr { } $css['table.sheet' . $sheetIndex . ' tr'] = array(); if ($rowDimension->getRowHeight() == -1) { $pt_height = PHPExcel_Shared_Font::getDefaultRowHeightByFont($this->_phpExcel->getDefaultStyle()->getFont()); } else { $pt_height = $rowDimension->getRowHeight(); } $css['table.sheet' . $sheetIndex . ' tr']['height'] = $pt_height . 'pt'; if ($rowDimension->getVisible() === false) { $css['table.sheet' . $sheetIndex . ' tr']['display'] = 'none'; $css['table.sheet' . $sheetIndex . ' tr']['visibility'] = 'hidden'; } // Calculate row heights foreach ($sheet->getRowDimensions() as $rowDimension) { $row = $rowDimension->getRowIndex() - 1; // table.sheetN tr.rowYYYYYY { } $css['table.sheet' . $sheetIndex . ' tr.row' . $row] = array(); if ($rowDimension->getRowHeight() == -1) { $pt_height = PHPExcel_Shared_Font::getDefaultRowHeightByFont($this->_phpExcel->getDefaultStyle()->getFont()); } else { $pt_height = $rowDimension->getRowHeight(); } $css['table.sheet' . $sheetIndex . ' tr.row' . $row]['height'] = $pt_height . 'pt'; if ($rowDimension->getVisible() === false) { $css['table.sheet' . $sheetIndex . ' tr.row' . $row]['display'] = 'none'; $css['table.sheet' . $sheetIndex . ' tr.row' . $row]['visibility'] = 'hidden'; } } } // Cache if (is_null($this->_cssStyles)) { $this->_cssStyles = $css; } // Return return $css; } /** * Create CSS style * * @param PHPExcel_Style $pStyle PHPExcel_Style * @return array */ private function _createCSSStyle(PHPExcel_Style $pStyle) { // Construct CSS $css = ''; // Create CSS $css = array_merge( $this->_createCSSStyleAlignment($pStyle->getAlignment()) , $this->_createCSSStyleBorders($pStyle->getBorders()) , $this->_createCSSStyleFont($pStyle->getFont()) , $this->_createCSSStyleFill($pStyle->getFill()) ); // Return return $css; } /** * Create CSS style (PHPExcel_Style_Alignment) * * @param PHPExcel_Style_Alignment $pStyle PHPExcel_Style_Alignment * @return array */ private function _createCSSStyleAlignment(PHPExcel_Style_Alignment $pStyle) { // Construct CSS $css = array(); // Create CSS $css['vertical-align'] = $this->_mapVAlign($pStyle->getVertical()); if ($textAlign = $this->_mapHAlign($pStyle->getHorizontal())) { $css['text-align'] = $textAlign; if(in_array($textAlign,array('left','right'))) $css['padding-'.$textAlign] = (string)((int)$pStyle->getIndent() * 9).'px'; } // Return return $css; } /** * Create CSS style (PHPExcel_Style_Font) * * @param PHPExcel_Style_Font $pStyle PHPExcel_Style_Font * @return array */ private function _createCSSStyleFont(PHPExcel_Style_Font $pStyle) { // Construct CSS $css = array(); // Create CSS if ($pStyle->getBold()) { $css['font-weight'] = 'bold'; } if ($pStyle->getUnderline() != PHPExcel_Style_Font::UNDERLINE_NONE && $pStyle->getStrikethrough()) { $css['text-decoration'] = 'underline line-through'; } else if ($pStyle->getUnderline() != PHPExcel_Style_Font::UNDERLINE_NONE) { $css['text-decoration'] = 'underline'; } else if ($pStyle->getStrikethrough()) { $css['text-decoration'] = 'line-through'; } if ($pStyle->getItalic()) { $css['font-style'] = 'italic'; } $css['color'] = '#' . $pStyle->getColor()->getRGB(); $css['font-family'] = '\'' . $pStyle->getName() . '\''; $css['font-size'] = $pStyle->getSize() . 'pt'; // Return return $css; } /** * Create CSS style (PHPExcel_Style_Borders) * * @param PHPExcel_Style_Borders $pStyle PHPExcel_Style_Borders * @return array */ private function _createCSSStyleBorders(PHPExcel_Style_Borders $pStyle) { // Construct CSS $css = array(); // Create CSS $css['border-bottom'] = $this->_createCSSStyleBorder($pStyle->getBottom()); $css['border-top'] = $this->_createCSSStyleBorder($pStyle->getTop()); $css['border-left'] = $this->_createCSSStyleBorder($pStyle->getLeft()); $css['border-right'] = $this->_createCSSStyleBorder($pStyle->getRight()); // Return return $css; } /** * Create CSS style (PHPExcel_Style_Border) * * @param PHPExcel_Style_Border $pStyle PHPExcel_Style_Border * @return string */ private function _createCSSStyleBorder(PHPExcel_Style_Border $pStyle) { // Create CSS // $css = $this->_mapBorderStyle($pStyle->getBorderStyle()) . ' #' . $pStyle->getColor()->getRGB(); // Create CSS - add !important to non-none border styles for merged cells $borderStyle = $this->_mapBorderStyle($pStyle->getBorderStyle()); $css = $borderStyle . ' #' . $pStyle->getColor()->getRGB() . (($borderStyle == 'none') ? '' : ' !important'); // Return return $css; } /** * Create CSS style (PHPExcel_Style_Fill) * * @param PHPExcel_Style_Fill $pStyle PHPExcel_Style_Fill * @return array */ private function _createCSSStyleFill(PHPExcel_Style_Fill $pStyle) { // Construct HTML $css = array(); // Create CSS $value = $pStyle->getFillType() == PHPExcel_Style_Fill::FILL_NONE ? 'white' : '#' . $pStyle->getStartColor()->getRGB(); $css['background-color'] = $value; // Return return $css; } /** * Generate HTML footer */ public function generateHTMLFooter() { // Construct HTML $html = ''; $html .= ' </body>' . PHP_EOL; $html .= '</html>' . PHP_EOL; // Return return $html; } /** * Generate table header * * @param PHPExcel_Worksheet $pSheet The worksheet for the table we are writing * @return string * @throws PHPExcel_Writer_Exception */ private function _generateTableHeader($pSheet) { $sheetIndex = $pSheet->getParent()->getIndex($pSheet); // Construct HTML $html = ''; $html .= $this->_setMargins($pSheet); if (!$this->_useInlineCss) { $gridlines = $pSheet->getShowGridlines() ? ' gridlines' : ''; $html .= ' <table border="0" cellpadding="0" cellspacing="0" id="sheet' . $sheetIndex . '" class="sheet' . $sheetIndex . $gridlines . '">' . PHP_EOL; } else { $style = isset($this->_cssStyles['table']) ? $this->_assembleCSS($this->_cssStyles['table']) : ''; if ($this->_isPdf && $pSheet->getShowGridlines()) { $html .= ' <table border="1" cellpadding="1" id="sheet' . $sheetIndex . '" cellspacing="1" style="' . $style . '">' . PHP_EOL; } else { $html .= ' <table border="0" cellpadding="1" id="sheet' . $sheetIndex . '" cellspacing="0" style="' . $style . '">' . PHP_EOL; } } // Write <col> elements $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($pSheet->getHighestColumn()) - 1; $i = -1; while($i++ < $highestColumnIndex) { if (!$this->_isPdf) { if (!$this->_useInlineCss) { $html .= ' <col class="col' . $i . '">' . PHP_EOL; } else { $style = isset($this->_cssStyles['table.sheet' . $sheetIndex . ' col.col' . $i]) ? $this->_assembleCSS($this->_cssStyles['table.sheet' . $sheetIndex . ' col.col' . $i]) : ''; $html .= ' <col style="' . $style . '">' . PHP_EOL; } } } // Return return $html; } /** * Generate table footer * * @throws PHPExcel_Writer_Exception */ private function _generateTableFooter() { // Construct HTML $html = ''; $html .= ' </table>' . PHP_EOL; // Return return $html; } /** * Generate row * * @param PHPExcel_Worksheet $pSheet PHPExcel_Worksheet * @param array $pValues Array containing cells in a row * @param int $pRow Row number (0-based) * @return string * @throws PHPExcel_Writer_Exception */ private function _generateRow(PHPExcel_Worksheet $pSheet, $pValues = null, $pRow = 0, $cellType = 'td') { if (is_array($pValues)) { // Construct HTML $html = ''; // Sheet index $sheetIndex = $pSheet->getParent()->getIndex($pSheet); // DomPDF and breaks if ($this->_isPdf && count($pSheet->getBreaks()) > 0) { $breaks = $pSheet->getBreaks(); // check if a break is needed before this row if (isset($breaks['A' . $pRow])) { // close table: </table> $html .= $this->_generateTableFooter(); // insert page break $html .= '<div style="page-break-before:always" />'; // open table again: <table> + <col> etc. $html .= $this->_generateTableHeader($pSheet); } } // Write row start if (!$this->_useInlineCss) { $html .= ' <tr class="row' . $pRow . '">' . PHP_EOL; } else { $style = isset($this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]) ? $this->_assembleCSS($this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]) : ''; $html .= ' <tr style="' . $style . '">' . PHP_EOL; } // Write cells $colNum = 0; foreach ($pValues as $cellAddress) { $cell = ($cellAddress > '') ? $pSheet->getCell($cellAddress) : ''; $coordinate = PHPExcel_Cell::stringFromColumnIndex($colNum) . ($pRow + 1); if (!$this->_useInlineCss) { $cssClass = ''; $cssClass = 'column' . $colNum; } else { $cssClass = array(); if ($cellType == 'th') { if (isset($this->_cssStyles['table.sheet' . $sheetIndex . ' th.column' . $colNum])) { $this->_cssStyles['table.sheet' . $sheetIndex . ' th.column' . $colNum]; } } else { if (isset($this->_cssStyles['table.sheet' . $sheetIndex . ' td.column' . $colNum])) { $this->_cssStyles['table.sheet' . $sheetIndex . ' td.column' . $colNum]; } } } $colSpan = 1; $rowSpan = 1; // initialize $cellData = ' '; // PHPExcel_Cell if ($cell instanceof PHPExcel_Cell) { $cellData = ''; if (is_null($cell->getParent())) { $cell->attach($pSheet); } // Value if ($cell->getValue() instanceof PHPExcel_RichText) { // Loop through rich text elements $elements = $cell->getValue()->getRichTextElements(); foreach ($elements as $element) { // Rich text start? if ($element instanceof PHPExcel_RichText_Run) { $cellData .= '<span style="' . $this->_assembleCSS($this->_createCSSStyleFont($element->getFont())) . '">'; if ($element->getFont()->getSuperScript()) { $cellData .= '<sup>'; } else if ($element->getFont()->getSubScript()) { $cellData .= '<sub>'; } } // Convert UTF8 data to PCDATA $cellText = $element->getText(); $cellData .= htmlspecialchars($cellText); if ($element instanceof PHPExcel_RichText_Run) { if ($element->getFont()->getSuperScript()) { $cellData .= '</sup>'; } else if ($element->getFont()->getSubScript()) { $cellData .= '</sub>'; } $cellData .= '</span>'; } } } else { if ($this->_preCalculateFormulas) { $cellData = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getCalculatedValue(), $pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getNumberFormat()->getFormatCode(), array($this, 'formatColor') ); } else { $cellData = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getValue(), $pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getNumberFormat()->getFormatCode(), array($this, 'formatColor') ); } $cellData = htmlspecialchars($cellData); if ($pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getFont()->getSuperScript()) { $cellData = '<sup>'.$cellData.'</sup>'; } elseif ($pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getFont()->getSubScript()) { $cellData = '<sub>'.$cellData.'</sub>'; } } // Converts the cell content so that spaces occuring at beginning of each new line are replaced by // Example: " Hello\n to the world" is converted to " Hello\n to the world" $cellData = preg_replace("/(?m)(?:^|\\G) /", ' ', $cellData); // convert newline "\n" to '<br>' $cellData = nl2br($cellData); // Extend CSS class? if (!$this->_useInlineCss) { $cssClass .= ' style' . $cell->getXfIndex(); $cssClass .= ' ' . $cell->getDataType(); } else { if ($cellType == 'th') { if (isset($this->_cssStyles['th.style' . $cell->getXfIndex()])) { $cssClass = array_merge($cssClass, $this->_cssStyles['th.style' . $cell->getXfIndex()]); } } else { if (isset($this->_cssStyles['td.style' . $cell->getXfIndex()])) { $cssClass = array_merge($cssClass, $this->_cssStyles['td.style' . $cell->getXfIndex()]); } } // General horizontal alignment: Actual horizontal alignment depends on dataType $sharedStyle = $pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() ); if ($sharedStyle->getAlignment()->getHorizontal() == PHPExcel_Style_Alignment::HORIZONTAL_GENERAL && isset($this->_cssStyles['.' . $cell->getDataType()]['text-align'])) { $cssClass['text-align'] = $this->_cssStyles['.' . $cell->getDataType()]['text-align']; } } } // Hyperlink? if ($pSheet->hyperlinkExists($coordinate) && !$pSheet->getHyperlink($coordinate)->isInternal()) { $cellData = '<a href="' . htmlspecialchars($pSheet->getHyperlink($coordinate)->getUrl()) . '" title="' . htmlspecialchars($pSheet->getHyperlink($coordinate)->getTooltip()) . '">' . $cellData . '</a>'; } // Should the cell be written or is it swallowed by a rowspan or colspan? $writeCell = ! ( isset($this->_isSpannedCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum]) && $this->_isSpannedCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum] ); // Colspan and Rowspan $colspan = 1; $rowspan = 1; if (isset($this->_isBaseCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum])) { $spans = $this->_isBaseCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum]; $rowSpan = $spans['rowspan']; $colSpan = $spans['colspan']; // Also apply style from last cell in merge to fix borders - // relies on !important for non-none border declarations in _createCSSStyleBorder $endCellCoord = PHPExcel_Cell::stringFromColumnIndex($colNum + $colSpan - 1) . ($pRow + $rowSpan); if (!$this->_useInlineCss) { $cssClass .= ' style' . $pSheet->getCell($endCellCoord)->getXfIndex(); } } // Write if ($writeCell) { // Column start $html .= ' <' . $cellType; if (!$this->_useInlineCss) { $html .= ' class="' . $cssClass . '"'; } else { //** Necessary redundant code for the sake of PHPExcel_Writer_PDF ** // We must explicitly write the width of the <td> element because TCPDF // does not recognize e.g. <col style="width:42pt"> $width = 0; $i = $colNum - 1; $e = $colNum + $colSpan - 1; while($i++ < $e) { if (isset($this->_columnWidths[$sheetIndex][$i])) { $width += $this->_columnWidths[$sheetIndex][$i]; } } $cssClass['width'] = $width . 'pt'; // We must also explicitly write the height of the <td> element because TCPDF // does not recognize e.g. <tr style="height:50pt"> if (isset($this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]['height'])) { $height = $this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]['height']; $cssClass['height'] = $height; } //** end of redundant code ** $html .= ' style="' . $this->_assembleCSS($cssClass) . '"'; } if ($colSpan > 1) { $html .= ' colspan="' . $colSpan . '"'; } if ($rowSpan > 1) { $html .= ' rowspan="' . $rowSpan . '"'; } $html .= '>'; // Image? $html .= $this->_writeImageInCell($pSheet, $coordinate); // Chart? if ($this->_includeCharts) { $html .= $this->_writeChartInCell($pSheet, $coordinate); } // Cell data $html .= $cellData; // Column end $html .= '</'.$cellType.'>' . PHP_EOL; } // Next column ++$colNum; } // Write row end $html .= ' </tr>' . PHP_EOL; // Return return $html; } else { throw new PHPExcel_Writer_Exception("Invalid parameters passed."); } } /** * Takes array where of CSS properties / values and converts to CSS string * * @param array * @return string */ private function _assembleCSS($pValue = array()) { $pairs = array(); foreach ($pValue as $property => $value) { $pairs[] = $property . ':' . $value; } $string = implode('; ', $pairs); return $string; } /** * Get images root * * @return string */ public function getImagesRoot() { return $this->_imagesRoot; } /** * Set images root * * @param string $pValue * @return PHPExcel_Writer_HTML */ public function setImagesRoot($pValue = '.') { $this->_imagesRoot = $pValue; return $this; } /** * Get embed images * * @return boolean */ public function getEmbedImages() { return $this->_embedImages; } /** * Set embed images * * @param boolean $pValue * @return PHPExcel_Writer_HTML */ public function setEmbedImages($pValue = '.') { $this->_embedImages = $pValue; return $this; } /** * Get use inline CSS? * * @return boolean */ public function getUseInlineCss() { return $this->_useInlineCss; } /** * Set use inline CSS? * * @param boolean $pValue * @return PHPExcel_Writer_HTML */ public function setUseInlineCss($pValue = false) { $this->_useInlineCss = $pValue; return $this; } /** * Add color to formatted string as inline style * * @param string $pValue Plain formatted value without color * @param string $pFormat Format code * @return string */ public function formatColor($pValue, $pFormat) { // Color information, e.g. [Red] is always at the beginning $color = null; // initialize $matches = array(); $color_regex = '/^\\[[a-zA-Z]+\\]/'; if (preg_match($color_regex, $pFormat, $matches)) { $color = str_replace('[', '', $matches[0]); $color = str_replace(']', '', $color); $color = strtolower($color); } // convert to PCDATA $value = htmlspecialchars($pValue); // color span tag if ($color !== null) { $value = '<span style="color:' . $color . '">' . $value . '</span>'; } return $value; } /** * Calculate information about HTML colspan and rowspan which is not always the same as Excel's */ private function _calculateSpans() { // Identify all cells that should be omitted in HTML due to cell merge. // In HTML only the upper-left cell should be written and it should have // appropriate rowspan / colspan attribute $sheetIndexes = $this->_sheetIndex !== null ? array($this->_sheetIndex) : range(0, $this->_phpExcel->getSheetCount() - 1); foreach ($sheetIndexes as $sheetIndex) { $sheet = $this->_phpExcel->getSheet($sheetIndex); $candidateSpannedRow = array(); // loop through all Excel merged cells foreach ($sheet->getMergeCells() as $cells) { list($cells, ) = PHPExcel_Cell::splitRange($cells); $first = $cells[0]; $last = $cells[1]; list($fc, $fr) = PHPExcel_Cell::coordinateFromString($first); $fc = PHPExcel_Cell::columnIndexFromString($fc) - 1; list($lc, $lr) = PHPExcel_Cell::coordinateFromString($last); $lc = PHPExcel_Cell::columnIndexFromString($lc) - 1; // loop through the individual cells in the individual merge $r = $fr - 1; while($r++ < $lr) { // also, flag this row as a HTML row that is candidate to be omitted $candidateSpannedRow[$r] = $r; $c = $fc - 1; while($c++ < $lc) { if ( !($c == $fc && $r == $fr) ) { // not the upper-left cell (should not be written in HTML) $this->_isSpannedCell[$sheetIndex][$r][$c] = array( 'baseCell' => array($fr, $fc), ); } else { // upper-left is the base cell that should hold the colspan/rowspan attribute $this->_isBaseCell[$sheetIndex][$r][$c] = array( 'xlrowspan' => $lr - $fr + 1, // Excel rowspan 'rowspan' => $lr - $fr + 1, // HTML rowspan, value may change 'xlcolspan' => $lc - $fc + 1, // Excel colspan 'colspan' => $lc - $fc + 1, // HTML colspan, value may change ); } } } } // Identify which rows should be omitted in HTML. These are the rows where all the cells // participate in a merge and the where base cells are somewhere above. $countColumns = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); foreach ($candidateSpannedRow as $rowIndex) { if (isset($this->_isSpannedCell[$sheetIndex][$rowIndex])) { if (count($this->_isSpannedCell[$sheetIndex][$rowIndex]) == $countColumns) { $this->_isSpannedRow[$sheetIndex][$rowIndex] = $rowIndex; }; } } // For each of the omitted rows we found above, the affected rowspans should be subtracted by 1 if ( isset($this->_isSpannedRow[$sheetIndex]) ) { foreach ($this->_isSpannedRow[$sheetIndex] as $rowIndex) { $adjustedBaseCells = array(); $c = -1; $e = $countColumns - 1; while($c++ < $e) { $baseCell = $this->_isSpannedCell[$sheetIndex][$rowIndex][$c]['baseCell']; if ( !in_array($baseCell, $adjustedBaseCells) ) { // subtract rowspan by 1 --$this->_isBaseCell[$sheetIndex][ $baseCell[0] ][ $baseCell[1] ]['rowspan']; $adjustedBaseCells[] = $baseCell; } } } } // TODO: Same for columns } // We have calculated the spans $this->_spansAreCalculated = true; } private function _setMargins(PHPExcel_Worksheet $pSheet) { $htmlPage = '@page { '; $htmlBody = 'body { '; $left = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getLeft()) . 'in; '; $htmlPage .= 'left-margin: ' . $left; $htmlBody .= 'left-margin: ' . $left; $right = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getRight()) . 'in; '; $htmlPage .= 'right-margin: ' . $right; $htmlBody .= 'right-margin: ' . $right; $top = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getTop()) . 'in; '; $htmlPage .= 'top-margin: ' . $top; $htmlBody .= 'top-margin: ' . $top; $bottom = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getBottom()) . 'in; '; $htmlPage .= 'bottom-margin: ' . $bottom; $htmlBody .= 'bottom-margin: ' . $bottom; $htmlPage .= "}\n"; $htmlBody .= "}\n"; return "<style>\n" . $htmlPage . $htmlBody . "</style>\n"; } }
Copyright ©2021 || Defacer Indonesia