This file is part of PhpRtf Lite. PhpRtf Lite 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 3 of the License, or (at your option) any later version. PhpRtf Lite 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 PhpRtf Lite. If not, see . */ /** * Atstract class of container. * @abstract * @package Rtf */ class Container { /**#@+ * Internal use. * @access public */ var $rtf; var $elements = array(); var $pard = '\pard '; var $emptyPar = false; /**#@-*/ function Container(&$rtf) { $this->rtf = &$rtf; } /** * Writes rtf code to container. * @param string $text * @access public */ function writeRtfCode($text) { $this->elements[] = $text; } /** * Adds empty paragraph to container. * @param Fonf $font Font of text. * @param ParFormat $parFormat Paragraph format. */ function emptyParagraph(&$font, &$parFormat) { if (is_a($parFormat, 'ParFormat') && is_a($font, 'Font')) { $content = (count($this->elements) != 0 && empty($this->emptyPar)) ? '\par ' : ''; $content .= $this->pard.$parFormat->getContent($this->rtf); $content .= '{'.$font->getContent($this->rtf).' \par}'."\r\n"; $this->elements[] = $content; $this->emptyPar = true; } } /** * Writes text to container. * @param string $text Text. Also you can use html style tags. Possible tags:
* strong, b- bold;
* em - ;
* i - italic;
* u - underline;
* br - line break;
* chdate - current date;
* chdpl - current date in long format;
* chdpa - current date in abbreviated format;
* chtime - current time;
* chpgn, pagenum - page number ;
* tab - tab * sectnum - section number;
* line - line break;
* page - page break;
* sect - section break;
* @param Font $font Font of text. * @param mix $parFormat Paragraph format. Use ParFormat object or null object. If null object, text is written in the same paragraph. * @param bool $replaceTags If false, then html style tags are not replaced with rtf code. * @access public * @todo Documentation */ function writeText($text, &$font, &$parFormat, $replaceTags = true) { $text = str_replace('\\', '\\\\', $text); $text = str_replace("\r\n", "\r\n".'\par ', $text); if (!empty($replaceTags)) { //bold $text = preg_replace("/(.*?)<\/STRONG[ ]*>/mi", "\\b \\1\\b0 ", $text); $text = preg_replace("/(.*?)<\/B[ ]*>/mi", "\\b \\1\\b0 ", $text); //italic $text = preg_replace("/(.*?)<\/EM[ ]*>/mi", "\\i \\1\\i0 ", $text); $text = preg_replace("/(.*?)<\/I[ ]*>/mi", "\\i \\1\\i0 ", $text); //underline $text = preg_replace("/(.*?)<\/U[ ]*>/mi", "\\ul \\1\\ul0 ", $text); //break $text = preg_replace("//mi", "\\line ", $text); $text = preg_replace("//mi", "\\chdate ", $text); $text = preg_replace("//mi", "\\\chdpl ", $text); $text = preg_replace("//mi", "\\chdpa ", $text); $text = preg_replace("//mi", "\\chtime ", $text); $text = preg_replace("//mi", "\\chpgn ", $text); $text = preg_replace("//mi", "\\tab ", $text); $text = preg_replace("//mi", "\\bullet ", $text); $text = preg_replace("//mi", "\\chpgn ", $text); $text = preg_replace("//mi", "\\sectnum ", $text); $text = preg_replace("//mi", "\\line ", $text); //$text = preg_replace("//mi", "\\page ", $text); //$text = preg_replace("//mi", "\\sect", $text); } $text = Util::utf8Unicode($text); //content formating $content = (is_a($parFormat, 'ParFormat') && count($this->elements) != 0 && empty($this->emptyPar)) ? '\par ' : ''; $this->emptyPar = false; $content .= is_a($parFormat, 'ParFormat') ? $this->pard.$parFormat->getContent($this->rtf) : ''; $content .= '{'; if (is_a($font, 'Font')) { $content .= $font->getContent($this->rtf); } $content .= $text.'}'."\r\n"; $this->elements[] = $content; } /** * Writes hyperlink to container. * @param string $hyperlink Hyperlink url (etc. "http://www.phprtf.com") * @param string $text Hyperlinks text If false, hyperlink is writen in previous paragraph format. * @param Font $font Font * @param mix $parFormat Paragraph format or null object. If null object hyperlink is written in the same paragraph. * @access public */ function writeHyperLink($hyperlink, $text, &$font, &$parFormat) { $content = (is_a($parFormat, 'ParFormat') && count($this->elements) != 0) && empty($this->emptyPar) ? '\par ' : ''; $this->emptyPar = false; $content .= is_a($parFormat, 'ParFormat') ? $this->pard.$parFormat->getContent($this->rtf) : ''; $this->elements[] = $content.'{\field {\*\fldinst {HYPERLINK "'.$hyperlink.'"}}{\\fldrslt {'; $null = null; $this->writeText($text, $font, $null); $this->elements[] .= '}}}'."\r\n"; } /** * Adds table to element container. * @param string $alignment Alingment of table. Possible values: 'left', 'center', 'right' * @return Table * @access public */ function &addTable($alignment = 'left') { $this->emptyPar = false; $table = new Table($this, $alignment); $this->elements[] = &$table; return $table; } /** * Adds image to element container. * @param string $fileName Name of image file. * @param mix $parFormat Paragraph format or null object. If null object immage is in the same paragraph. * @param float $width Default 0. If 0 image is displayed by it's height. * @param float $height Default 0. If 0 image is displayed by it' width. If boths parameters are 0, image is displayed as is. * @return Image * @access public */ function &addImage($fileName, &$parFormat, $width = 0, $height = 0) { $this->emptyPar = false; $image = new Image($this->rtf, $fileName, $parFormat, $width, $height); $this->elements[] = &$image; return $image; } /** * Gets rtf code of Container. Internal use. * @return string * @access public */ function getContent() { $content = ''; foreach($this->elements as $key => $value) { if (is_string($value)) { $content .= $value; } else { if ($key != 0 && is_a($value, 'Table') && !is_a($this->elements[$key - 1], 'Table')) { $content .= '\par'; } else if (is_a($value, 'Image')) { if (is_a($value->parFormat, 'ParFormat')) { $content .= $key != 0 ? '\par' : ''; $content .= $this->pard.$value->parFormat->getContent($this->rtf); } } $content .= $value->getContent(); } } return $content; } } ?>