ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
Format.php
Go to the documentation of this file.
1<?php
2/*
3* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
4*
5* The majority of this is _NOT_ my code. I simply ported it from the
6* PERL Spreadsheet::WriteExcel module.
7*
8* The author of the Spreadsheet::WriteExcel module is John McNamara
9* <jmcnamara@cpan.org>
10*
11* I _DO_ maintain this code, and John McNamara has nothing to do with the
12* porting of this code to PHP. Any questions directly related to this
13* class library should be directed to me.
14*
15* License Information:
16*
17* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
18* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
19*
20* This library is free software; you can redistribute it and/or
21* modify it under the terms of the GNU Lesser General Public
22* License as published by the Free Software Foundation; either
23* version 2.1 of the License, or (at your option) any later version.
24*
25* This library is distributed in the hope that it will be useful,
26* but WITHOUT ANY WARRANTY; without even the implied warranty of
27* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28* Lesser General Public License for more details.
29*
30* You should have received a copy of the GNU Lesser General Public
31* License along with this library; if not, write to the Free Software
32* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33*/
34
35require_once 'PEAR.php';
36
46{
52
58
64
69 var $_size;
70
75 var $_bold;
76
82
88
94
100
106
112
118
124
130
136
142
148
154
160
166
172
178
184
190
196
202
208
213 var $_top;
214
220
226
232
238
244
252 function Spreadsheet_Excel_Writer_Format($BIFF_version, $index = 0, $properties = array())
253 {
254 $this->_xf_index = $index;
255 $this->_BIFF_version = $BIFF_version;
256 $this->font_index = 0;
257 $this->_font_name = 'Arial';
258 $this->_size = 10;
259 $this->_bold = 0x0190;
260 $this->_italic = 0;
261 $this->_color = 0x7FFF;
262 $this->_underline = 0;
263 $this->_font_strikeout = 0;
264 $this->_font_outline = 0;
265 $this->_font_shadow = 0;
266 $this->_font_script = 0;
267 $this->_font_family = 0;
268 $this->_font_charset = 0;
269
270 $this->_num_format = 0;
271
272 $this->_hidden = 0;
273 $this->_locked = 0;
274
275 $this->_text_h_align = 0;
276 $this->_text_wrap = 0;
277 $this->_text_v_align = 2;
278 $this->_text_justlast = 0;
279 $this->_rotation = 0;
280
281 $this->_fg_color = 0x40;
282 $this->_bg_color = 0x41;
283
284 $this->_pattern = 0;
285
286 $this->_bottom = 0;
287 $this->_top = 0;
288 $this->_left = 0;
289 $this->_right = 0;
290 $this->_diag = 0;
291
292 $this->_bottom_color = 0x40;
293 $this->_top_color = 0x40;
294 $this->_left_color = 0x40;
295 $this->_right_color = 0x40;
296 $this->_diag_color = 0x40;
297
298 // Set properties passed to Spreadsheet_Excel_Writer_Workbook::addFormat()
299 foreach ($properties as $property => $value)
300 {
301 if (method_exists($this, 'set'.ucwords($property))) {
302 $method_name = 'set'.ucwords($property);
303 $this->$method_name($value);
304 }
305 }
306 }
307
308
315 function getXf($style)
316 {
317 // Set the type of the XF record and some of the attributes.
318 if ($style == 'style') {
319 $style = 0xFFF5;
320 } else {
322 $style |= $this->_hidden << 1;
323 }
324
325 // Flags to indicate if attributes have been set.
326 $atr_num = ($this->_num_format != 0)?1:0;
327 $atr_fnt = ($this->font_index != 0)?1:0;
328 $atr_alc = ($this->_text_wrap)?1:0;
329 $atr_bdr = ($this->_bottom ||
330 $this->_top ||
331 $this->_left ||
332 $this->_right)?1:0;
333 $atr_pat = (($this->_fg_color != 0x40) ||
334 ($this->_bg_color != 0x41) ||
335 $this->_pattern)?1:0;
336 $atr_prot = $this->_locked | $this->_hidden;
337
338 // Zero the default border colour if the border has not been set.
339 if ($this->_bottom == 0) {
340 $this->_bottom_color = 0;
341 }
342 if ($this->_top == 0) {
343 $this->_top_color = 0;
344 }
345 if ($this->_right == 0) {
346 $this->_right_color = 0;
347 }
348 if ($this->_left == 0) {
349 $this->_left_color = 0;
350 }
351 if ($this->_diag == 0) {
352 $this->_diag_color = 0;
353 }
354
355 $record = 0x00E0; // Record identifier
356 if ($this->_BIFF_version == 0x0500) {
357 $length = 0x0010; // Number of bytes to follow
358 }
359 if ($this->_BIFF_version == 0x0600) {
360 $length = 0x0014;
361 }
362
363 $ifnt = $this->font_index; // Index to FONT record
364 $ifmt = $this->_num_format; // Index to FORMAT record
365 if ($this->_BIFF_version == 0x0500) {
366 $align = $this->_text_h_align; // Alignment
367 $align |= $this->_text_wrap << 3;
368 $align |= $this->_text_v_align << 4;
369 $align |= $this->_text_justlast << 7;
370 $align |= $this->_rotation << 8;
371 $align |= $atr_num << 10;
372 $align |= $atr_fnt << 11;
373 $align |= $atr_alc << 12;
374 $align |= $atr_bdr << 13;
375 $align |= $atr_pat << 14;
376 $align |= $atr_prot << 15;
377
378 $icv = $this->_fg_color; // fg and bg pattern colors
379 $icv |= $this->_bg_color << 7;
380
381 $fill = $this->_pattern; // Fill and border line style
382 $fill |= $this->_bottom << 6;
383 $fill |= $this->_bottom_color << 9;
384
385 $border1 = $this->_top; // Border line style and color
386 $border1 |= $this->_left << 3;
387 $border1 |= $this->_right << 6;
388 $border1 |= $this->_top_color << 9;
389
390 $border2 = $this->_left_color; // Border color
391 $border2 |= $this->_right_color << 7;
392
393 $header = pack("vv", $record, $length);
394 $data = pack("vvvvvvvv", $ifnt, $ifmt, $style, $align,
395 $icv, $fill,
396 $border1, $border2);
397 } elseif ($this->_BIFF_version == 0x0600) {
398 $align = $this->_text_h_align; // Alignment
399 $align |= $this->_text_wrap << 3;
400 $align |= $this->_text_v_align << 4;
401 $align |= $this->_text_justlast << 7;
402
403 $used_attrib = $atr_num << 2;
404 $used_attrib |= $atr_fnt << 3;
405 $used_attrib |= $atr_alc << 4;
406 $used_attrib |= $atr_bdr << 5;
407 $used_attrib |= $atr_pat << 6;
408 $used_attrib |= $atr_prot << 7;
409
410 $icv = $this->_fg_color; // fg and bg pattern colors
411 $icv |= $this->_bg_color << 7;
412
413 $border1 = $this->_left; // Border line style and color
414 $border1 |= $this->_right << 4;
415 $border1 |= $this->_top << 8;
416 $border1 |= $this->_bottom << 12;
417 $border1 |= $this->_left_color << 16;
418 $border1 |= $this->_right_color << 23;
419 $diag_tl_to_rb = 0; // FIXME: add method
420 $diag_tr_to_lb = 0; // FIXME: add method
421 $border1 |= $diag_tl_to_rb << 30;
422 $border1 |= $diag_tr_to_lb << 31;
423
424 $border2 = $this->_top_color; // Border color
425 $border2 |= $this->_bottom_color << 7;
426 $border2 |= $this->_diag_color << 14;
427 $border2 |= $this->_diag << 21;
428 $border2 |= $this->_pattern << 26;
429
430 $header = pack("vv", $record, $length);
431
432 $rotation = $this->_rotation;
433 $biff8_options = 0x00;
434 $data = pack("vvvC", $ifnt, $ifmt, $style, $align);
435 $data .= pack("CCC", $rotation, $biff8_options, $used_attrib);
436 $data .= pack("VVv", $border1, $border2, $icv);
437 }
438
439 return($header . $data);
440 }
441
447 function getFont()
448 {
449 $dyHeight = $this->_size * 20; // Height of font (1/20 of a point)
450 $icv = $this->_color; // Index to color palette
451 $bls = $this->_bold; // Bold style
452 $sss = $this->_font_script; // Superscript/subscript
453 $uls = $this->_underline; // Underline
454 $bFamily = $this->_font_family; // Font family
455 $bCharSet = $this->_font_charset; // Character set
456 $encoding = 0; // TODO: Unicode support
457
458 $cch = strlen($this->_font_name); // Length of font name
459 $record = 0x31; // Record identifier
460 if ($this->_BIFF_version == 0x0500) {
461 $length = 0x0F + $cch; // Record length
462 } elseif ($this->_BIFF_version == 0x0600) {
463 $length = 0x10 + $cch;
464 }
465 $reserved = 0x00; // Reserved
466 $grbit = 0x00; // Font attributes
467 if ($this->_italic) {
468 $grbit |= 0x02;
469 }
470 if ($this->_font_strikeout) {
471 $grbit |= 0x08;
472 }
473 if ($this->_font_outline) {
474 $grbit |= 0x10;
475 }
476 if ($this->_font_shadow) {
477 $grbit |= 0x20;
478 }
479
480 $header = pack("vv", $record, $length);
481 if ($this->_BIFF_version == 0x0500) {
482 $data = pack("vvvvvCCCCC", $dyHeight, $grbit, $icv, $bls,
483 $sss, $uls, $bFamily,
484 $bCharSet, $reserved, $cch);
485 } elseif ($this->_BIFF_version == 0x0600) {
486 $data = pack("vvvvvCCCCCC", $dyHeight, $grbit, $icv, $bls,
487 $sss, $uls, $bFamily,
488 $bCharSet, $reserved, $cch, $encoding);
489 }
490 return($header . $data . $this->_font_name);
491 }
492
503 function getFontKey()
504 {
505 $key = "$this->_font_name$this->_size";
506 $key .= "$this->_font_script$this->_underline";
507 $key .= "$this->_font_strikeout$this->_bold$this->_font_outline";
508 $key .= "$this->_font_family$this->_font_charset";
509 $key .= "$this->_font_shadow$this->_color$this->_italic";
510 $key = str_replace(' ', '_', $key);
511 return ($key);
512 }
513
519 function getXfIndex()
520 {
521 return($this->_xf_index);
522 }
523
533 function _getColor($name_color = '')
534 {
535 $colors = array(
536 'aqua' => 0x0F,
537 'cyan' => 0x0F,
538 'black' => 0x08,
539 'blue' => 0x0C,
540 'brown' => 0x10,
541 'magenta' => 0x0E,
542 'fuchsia' => 0x0E,
543 'gray' => 0x17,
544 'grey' => 0x17,
545 'green' => 0x11,
546 'lime' => 0x0B,
547 'navy' => 0x12,
548 'orange' => 0x35,
549 'purple' => 0x14,
550 'red' => 0x0A,
551 'silver' => 0x16,
552 'white' => 0x09,
553 'yellow' => 0x0D
554 );
555
556 // Return the default color, 0x7FFF, if undef,
557 if ($name_color == '') {
558 return(0x7FFF);
559 }
560
561 // or the color string converted to an integer,
562 if (isset($colors[$name_color])) {
563 return($colors[$name_color]);
564 }
565
566 // or the default color if string is unrecognised,
567 if (preg_match("/\D/",$name_color)) {
568 return(0x7FFF);
569 }
570
571 // or an index < 8 mapped into the correct range,
572 if ($name_color < 8) {
573 return($name_color + 8);
574 }
575
576 // or the default color if arg is outside range,
577 if ($name_color > 63) {
578 return(0x7FFF);
579 }
580
581 // or an integer in the valid range
582 return($name_color);
583 }
584
592 {
593 if (preg_match("/\d/",$location)) {
594 return; // Ignore numbers
595 }
596
597 $location = strtolower($location);
598
599 if ($location == 'left') {
600 $this->_text_h_align = 1;
601 }
602 if ($location == 'centre') {
603 $this->_text_h_align = 2;
604 }
605 if ($location == 'center') {
606 $this->_text_h_align = 2;
607 }
608 if ($location == 'right') {
609 $this->_text_h_align = 3;
610 }
611 if ($location == 'fill') {
612 $this->_text_h_align = 4;
613 }
614 if ($location == 'justify') {
615 $this->_text_h_align = 5;
616 }
617 if ($location == 'merge') {
618 $this->_text_h_align = 6;
619 }
620 if ($location == 'equal_space') { // For T.K.
621 $this->_text_h_align = 7;
622 }
623 if ($location == 'top') {
624 $this->_text_v_align = 0;
625 }
626 if ($location == 'vcentre') {
627 $this->_text_v_align = 1;
628 }
629 if ($location == 'vcenter') {
630 $this->_text_v_align = 1;
631 }
632 if ($location == 'bottom') {
633 $this->_text_v_align = 2;
634 }
635 if ($location == 'vjustify') {
636 $this->_text_v_align = 3;
637 }
638 if ($location == 'vequal_space') { // For T.K.
639 $this->_text_v_align = 4;
640 }
641 }
642
650 {
651 if (preg_match("/\d/",$location)) {
652 return; // Ignore numbers
653 }
654
655 $location = strtolower($location);
656
657 if ($location == 'left') {
658 $this->_text_h_align = 1;
659 }
660 if ($location == 'centre') {
661 $this->_text_h_align = 2;
662 }
663 if ($location == 'center') {
664 $this->_text_h_align = 2;
665 }
666 if ($location == 'right') {
667 $this->_text_h_align = 3;
668 }
669 if ($location == 'fill') {
670 $this->_text_h_align = 4;
671 }
672 if ($location == 'justify') {
673 $this->_text_h_align = 5;
674 }
675 if ($location == 'merge') {
676 $this->_text_h_align = 6;
677 }
678 if ($location == 'equal_space') { // For T.K.
679 $this->_text_h_align = 7;
680 }
681 }
682
690 {
691 if (preg_match("/\d/",$location)) {
692 return; // Ignore numbers
693 }
694
695 $location = strtolower($location);
696
697 if ($location == 'top') {
698 $this->_text_v_align = 0;
699 }
700 if ($location == 'vcentre') {
701 $this->_text_v_align = 1;
702 }
703 if ($location == 'vcenter') {
704 $this->_text_v_align = 1;
705 }
706 if ($location == 'bottom') {
707 $this->_text_v_align = 2;
708 }
709 if ($location == 'vjustify') {
710 $this->_text_v_align = 3;
711 }
712 if ($location == 'vequal_space') { // For T.K.
713 $this->_text_v_align = 4;
714 }
715 }
716
722 function setMerge()
723 {
724 $this->setAlign('merge');
725 }
726
737 function setBold($weight = 1)
738 {
739 if ($weight == 1) {
740 $weight = 0x2BC; // Bold text
741 }
742 if ($weight == 0) {
743 $weight = 0x190; // Normal text
744 }
745 if ($weight < 0x064) {
746 $weight = 0x190; // Lower bound
747 }
748 if ($weight > 0x3E8) {
749 $weight = 0x190; // Upper bound
750 }
751 $this->_bold = $weight;
752 }
753
754
755 /************************************
756 * FUNCTIONS FOR SETTING CELLS BORDERS
757 */
758
766 {
767 $this->_bottom = $style;
768 }
769
776 function setTop($style)
777 {
778 $this->_top = $style;
779 }
780
787 function setLeft($style)
788 {
789 $this->_left = $style;
790 }
791
798 function setRight($style)
799 {
800 $this->_right = $style;
801 }
802
803
811 {
812 $this->setBottom($style);
813 $this->setTop($style);
814 $this->setLeft($style);
815 $this->setRight($style);
816 }
817
818
819 /*******************************************
820 * FUNCTIONS FOR SETTING CELLS BORDERS COLORS
821 */
822
830 function setBorderColor($color)
831 {
832 $this->setBottomColor($color);
833 $this->setTopColor($color);
834 $this->setLeftColor($color);
835 $this->setRightColor($color);
836 }
837
844 function setBottomColor($color)
845 {
846 $value = $this->_getColor($color);
847 $this->_bottom_color = $value;
848 }
849
856 function setTopColor($color)
857 {
858 $value = $this->_getColor($color);
859 $this->_top_color = $value;
860 }
861
868 function setLeftColor($color)
869 {
870 $value = $this->_getColor($color);
871 $this->_left_color = $value;
872 }
873
880 function setRightColor($color)
881 {
882 $value = $this->_getColor($color);
883 $this->_right_color = $value;
884 }
885
886
893 function setFgColor($color)
894 {
895 $value = $this->_getColor($color);
896 $this->_fg_color = $value;
897 if ($this->_pattern == 0) { // force color to be seen
898 $this->_pattern = 1;
899 }
900 }
901
908 function setBgColor($color)
909 {
910 $value = $this->_getColor($color);
911 $this->_bg_color = $value;
912 if ($this->_pattern == 0) { // force color to be seen
913 $this->_pattern = 1;
914 }
915 }
916
923 function setColor($color)
924 {
925 $value = $this->_getColor($color);
926 $this->_color = $value;
927 }
928
936 function setPattern($arg = 1)
937 {
938 $this->_pattern = $arg;
939 }
940
948 function setUnderline($underline)
949 {
950 $this->_underline = $underline;
951 }
952
958 function setItalic()
959 {
960 $this->_italic = 1;
961 }
962
969 function setSize($size)
970 {
971 $this->_size = $size;
972 }
973
979 function setTextWrap()
980 {
981 $this->_text_wrap = 1;
982 }
983
992 {
993 switch ($angle)
994 {
995 case 0:
996 $this->_rotation = 0;
997 break;
998 case 90:
999 if ($this->_BIFF_version == 0x0500) {
1000 $this->_rotation = 3;
1001 } elseif ($this->_BIFF_version == 0x0600) {
1002 $this->_rotation = 180;
1003 }
1004 break;
1005 case 270:
1006 if ($this->_BIFF_version == 0x0500) {
1007 $this->_rotation = 2;
1008 } elseif ($this->_BIFF_version == 0x0600) {
1009 $this->_rotation = 90;
1010 }
1011 break;
1012 case -1:
1013 if ($this->_BIFF_version == 0x0500) {
1014 $this->_rotation = 1;
1015 } elseif ($this->_BIFF_version == 0x0600) {
1016 $this->_rotation = 255;
1017 }
1018 break;
1019 default :
1020 return $this->raiseError("Invalid value for angle.".
1021 " Possible values are: 0, 90, 270 and -1 ".
1022 "for stacking top-to-bottom.");
1023 $this->_rotation = 0;
1024 break;
1025 }
1026 }
1027
1035 function setNumFormat($num_format)
1036 {
1037 $this->_num_format = $num_format;
1038 }
1039
1045 function setStrikeOut()
1046 {
1047 $this->_font_strikeout = 1;
1048 }
1049
1055 function setOutLine()
1056 {
1057 $this->_font_outline = 1;
1058 }
1059
1065 function setShadow()
1066 {
1067 $this->_font_shadow = 1;
1068 }
1069
1077 function setScript($script)
1078 {
1079 $this->_font_script = $script;
1080 }
1081
1087 function setLocked()
1088 {
1089 $this->_locked = 1;
1090 }
1091
1097 function setUnLocked()
1098 {
1099 $this->_locked = 0;
1100 }
1101
1109 function setFontFamily($font_family)
1110 {
1111 $this->_font_name = $font_family;
1112 }
1113}
1114?>
$size
Definition: RandomTest.php:79
$location
Definition: buildRTE.php:44
& raiseError($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
This method is a wrapper that returns an instance of the configured error class with this object's de...
Definition: PEAR.php:524
setPattern($arg=1)
Sets the fill pattern attribute of a cell.
Definition: Format.php:936
setRight($style)
Sets the width for the right border of the cell.
Definition: Format.php:798
getXf($style)
Generate an Excel BIFF XF record (style or cell).
Definition: Format.php:315
setUnderline($underline)
Sets the underline of the text.
Definition: Format.php:948
setFontFamily($font_family)
Sets the font family name.
Definition: Format.php:1109
setBold($weight=1)
Sets the boldness of the text.
Definition: Format.php:737
setShadow()
Sets font as shadow.
Definition: Format.php:1065
setTextRotation($angle)
Sets the orientation of the text.
Definition: Format.php:991
setVAlign($location)
Set cell vertical alignment.
Definition: Format.php:689
setTop($style)
Sets the width for the top border of the cell.
Definition: Format.php:776
setItalic()
Sets the font style as italic.
Definition: Format.php:958
setNumFormat($num_format)
Sets the numeric format.
Definition: Format.php:1035
setBorderColor($color)
Sets all the cell's borders to the same color.
Definition: Format.php:830
setOutLine()
Sets outlining for a font.
Definition: Format.php:1055
setTopColor($color)
Sets the cell's top border color.
Definition: Format.php:856
setFgColor($color)
Sets the cell's foreground color.
Definition: Format.php:893
setLeftColor($color)
Sets the cell's left border color.
Definition: Format.php:868
setAlign($location)
Set cell alignment.
Definition: Format.php:591
setStrikeOut()
Sets font as strikeout.
Definition: Format.php:1045
setLeft($style)
Sets the width for the left border of the cell.
Definition: Format.php:787
_getColor($name_color='')
Used in conjunction with the set_xxx_color methods to convert a color string into a number.
Definition: Format.php:533
setRightColor($color)
Sets the cell's right border color.
Definition: Format.php:880
getFont()
Generate an Excel BIFF FONT record.
Definition: Format.php:447
setTextWrap()
Sets text wrapping.
Definition: Format.php:979
Spreadsheet_Excel_Writer_Format($BIFF_version, $index=0, $properties=array())
Constructor.
Definition: Format.php:252
getFontKey()
Returns a unique hash key for a font.
Definition: Format.php:503
setBottom($style)
Sets the width for the bottom border of the cell.
Definition: Format.php:765
setColor($color)
Sets the cell's color.
Definition: Format.php:923
getXfIndex()
Returns the index used by Spreadsheet_Excel_Writer_Worksheet::_XF()
Definition: Format.php:519
setBorder($style)
Set cells borders to the same style.
Definition: Format.php:810
setBottomColor($color)
Sets the cell's bottom border color.
Definition: Format.php:844
setBgColor($color)
Sets the cell's background color.
Definition: Format.php:908
setHAlign($location)
Set cell horizontal alignment.
Definition: Format.php:649
setSize($size)
Sets the font size.
Definition: Format.php:969
setUnLocked()
Unlocks a cell.
Definition: Format.php:1097
setMerge()
This is an alias for the unintuitive setAlign('merge')
Definition: Format.php:722
setScript($script)
Sets the script type of the text.
Definition: Format.php:1077
$header
$data
$style
Definition: example_012.php:70
$angle