diff options
Diffstat (limited to 'app/Report/ReportHtml.php')
| -rw-r--r-- | app/Report/ReportHtml.php | 1335 |
1 files changed, 691 insertions, 644 deletions
diff --git a/app/Report/ReportHtml.php b/app/Report/ReportHtml.php index 06aa160e5a..bdf31f9606 100644 --- a/app/Report/ReportHtml.php +++ b/app/Report/ReportHtml.php @@ -22,712 +22,759 @@ use Fisharebest\Webtrees\MediaFile; /** * Class ReportHtml */ -class ReportHtml extends ReportBase { - /** - * Cell padding - * - * @var int - */ - public $cPadding = 2; +class ReportHtml extends ReportBase +{ + /** + * Cell padding + * + * @var int + */ + public $cPadding = 2; - /** - * Cell height ratio - * - * @var float - */ - public $cellHeightRatio = 1.8; + /** + * Cell height ratio + * + * @var float + */ + public $cellHeightRatio = 1.8; - /** - * Current horizontal position - * - * @var float - */ - public $X = 0.0; + /** + * Current horizontal position + * + * @var float + */ + public $X = 0.0; - /** - * Current vertical position - * - * @var float - */ - public $Y = 0.0; + /** + * Current vertical position + * + * @var float + */ + public $Y = 0.0; - /** - * Currently used style name - * - * @var string - */ - public $currentStyle = ''; + /** + * Currently used style name + * + * @var string + */ + public $currentStyle = ''; - /** - * Page number counter - * - * @var int - */ - public $pageN = 1; + /** + * Page number counter + * + * @var int + */ + public $pageN = 1; - /** - * Store the page width without left and right margins - * - * In HTML, we don't need this - * - * @var float - */ - public $noMarginWidth = 0.0; + /** + * Store the page width without left and right margins + * + * In HTML, we don't need this + * + * @var float + */ + public $noMarginWidth = 0.0; - /** - * Last cell height - * - * @var float - */ - public $lastCellHeight = 0.0; + /** + * Last cell height + * + * @var float + */ + public $lastCellHeight = 0.0; - /** - * LTR or RTL alignement; "left" on LTR, "right" on RTL - * Used in <div> - * - * @var string - */ - public $alignRTL = 'left'; + /** + * LTR or RTL alignement; "left" on LTR, "right" on RTL + * Used in <div> + * + * @var string + */ + public $alignRTL = 'left'; - /** - * LTR or RTL entity - * - * @var string - */ - public $entityRTL = '‎'; + /** + * LTR or RTL entity + * + * @var string + */ + public $entityRTL = '‎'; - /** - * Largest Font Height is used by TextBox etc. - * - * Use this to calculate a the text height. - * This makes sure that the text fits into the cell/box when different font sizes are used - * - * @var int - */ - public $largestFontHeight = 0; + /** + * Largest Font Height is used by TextBox etc. + * + * Use this to calculate a the text height. + * This makes sure that the text fits into the cell/box when different font sizes are used + * + * @var int + */ + public $largestFontHeight = 0; - /** - * Keep track of the highest Y position - * - * Used with Header div / Body div / Footer div / "addpage" / The bottom of the last image etc. - * - * @var float - */ - public $maxY = 0; + /** + * Keep track of the highest Y position + * + * Used with Header div / Body div / Footer div / "addpage" / The bottom of the last image etc. + * + * @var float + */ + public $maxY = 0; - /** @var ReportBaseElement[] Array of elements in the header */ - public $headerElements = []; + /** @var ReportBaseElement[] Array of elements in the header */ + public $headerElements = []; - /** @var ReportBaseElement[] Array of elements in the page header */ - public $pageHeaderElements = []; + /** @var ReportBaseElement[] Array of elements in the page header */ + public $pageHeaderElements = []; - /** @var ReportBaseElement[] Array of elements in the footer */ - public $footerElements = []; + /** @var ReportBaseElement[] Array of elements in the footer */ + public $footerElements = []; - /** @var ReportBaseElement[] Array of elements in the body */ - public $bodyElements = []; + /** @var ReportBaseElement[] Array of elements in the body */ + public $bodyElements = []; - /** @var ReportBaseFootnote[] Array of elements in the footer notes */ - public $printedfootnotes = []; + /** @var ReportBaseFootnote[] Array of elements in the footer notes */ + public $printedfootnotes = []; - /** - * HTML Setup - ReportHtml - */ - public function setup() { - parent::setup(); + /** + * HTML Setup - ReportHtml + */ + public function setup() + { + parent::setup(); - // Setting up the correct dimensions if Portrait (default) or Landscape - if ($this->orientation == 'landscape') { - $tmpw = $this->pagew; - $this->pagew = $this->pageh; - $this->pageh = $tmpw; - } - // Store the pagewidth without margins - $this->noMarginWidth = (int) ($this->pagew - $this->leftmargin - $this->rightmargin); - // If RTL - if ($this->rtl) { - $this->alignRTL = 'right'; - $this->entityRTL = '‏'; - } - // Change the default HTML font name - $this->defaultFont = 'Arial'; + // Setting up the correct dimensions if Portrait (default) or Landscape + if ($this->orientation == 'landscape') { + $tmpw = $this->pagew; + $this->pagew = $this->pageh; + $this->pageh = $tmpw; + } + // Store the pagewidth without margins + $this->noMarginWidth = (int)($this->pagew - $this->leftmargin - $this->rightmargin); + // If RTL + if ($this->rtl) { + $this->alignRTL = 'right'; + $this->entityRTL = '‏'; + } + // Change the default HTML font name + $this->defaultFont = 'Arial'; - if ($this->showGenText) { - // The default style name for Generated by.... is 'genby' - $element = new ReportHtmlCell(0, 10, 0, 'C', '', 'genby', 1, '.', '.', 0, 0, '', '', true); - $element->addText($this->generatedby); - $element->setUrl(parent::WT_URL); - $this->footerElements[] = $element; - } - } + if ($this->showGenText) { + // The default style name for Generated by.... is 'genby' + $element = new ReportHtmlCell(0, 10, 0, 'C', '', 'genby', 1, '.', '.', 0, 0, '', '', true); + $element->addText($this->generatedby); + $element->setUrl(parent::WT_URL); + $this->footerElements[] = $element; + } + } - /** - * Add an element. - * - * @param $element - */ - public function addElement($element) { - if ($this->processing == 'B') { - $this->bodyElements[] = $element; - } elseif ($this->processing == 'H') { - $this->headerElements[] = $element; - } elseif ($this->processing == 'F') { - $this->footerElements[] = $element; - } - } + /** + * Add an element. + * + * @param $element + */ + public function addElement($element) + { + if ($this->processing == 'B') { + $this->bodyElements[] = $element; + } elseif ($this->processing == 'H') { + $this->headerElements[] = $element; + } elseif ($this->processing == 'F') { + $this->footerElements[] = $element; + } + } - /** - * Generate the page header - */ - public function runPageHeader() { - foreach ($this->pageHeaderElements as $element) { - if (is_object($element)) { - $element->render($this); - } elseif (is_string($element) && $element == 'footnotetexts') { - $this->footnotes(); - } elseif (is_string($element) && $element == 'addpage') { - $this->addPage(); - } - } - } + /** + * Generate the page header + */ + public function runPageHeader() + { + foreach ($this->pageHeaderElements as $element) { + if (is_object($element)) { + $element->render($this); + } elseif (is_string($element) && $element == 'footnotetexts') { + $this->footnotes(); + } elseif (is_string($element) && $element == 'addpage') { + $this->addPage(); + } + } + } - /** - * Generate footnotes - */ - public function footnotes() { - $this->currentStyle = ''; - if (!empty($this->printedfootnotes)) { - foreach ($this->printedfootnotes as $element) { - $element->renderFootnote($this); - } - } - } + /** + * Generate footnotes + */ + public function footnotes() + { + $this->currentStyle = ''; + if (!empty($this->printedfootnotes)) { + foreach ($this->printedfootnotes as $element) { + $element->renderFootnote($this); + } + } + } - /** - * Run the report. - */ - public function run() { - // Setting up the styles - echo '<style type="text/css">'; - echo '#bodydiv { font: 10px sans-serif;}'; - foreach ($this->Styles as $class => $style) { - echo '.', $class, ' { '; - if ($style['font'] == 'dejavusans') { - $style['font'] = $this->defaultFont; - } - echo 'font-family: ', $style['font'], '; '; - echo 'font-size: ', $style['size'], 'pt; '; - // Case-insensitive - if (stripos($style['style'], 'B') !== false) { - echo 'font-weight: bold; '; - } - if (stripos($style['style'], 'I') !== false) { - echo 'font-style: italic; '; - } - if (stripos($style['style'], 'U') !== false) { - echo 'text-decoration: underline; '; - } - if (stripos($style['style'], 'D') !== false) { - echo 'text-decoration: line-through; '; - } - echo '}', PHP_EOL; - } - unset($class, $style); - //-- header divider - echo '</style>', PHP_EOL; - echo '<div id="headermargin" style="position: relative; top: auto; height: ', $this->headermargin, 'pt; width: ', $this->noMarginWidth, 'pt;"></div>'; - echo '<div id="headerdiv" style="position: relative; top: auto; width: ', $this->noMarginWidth, 'pt;">'; - foreach ($this->headerElements as $element) { - if (is_object($element)) { - $element->render($this); - } elseif (is_string($element) && $element == 'footnotetexts') { - $this->footnotes(); - } elseif (is_string($element) && $element == 'addpage') { - $this->addPage(); - } - } - //-- body - echo '</div>'; - echo '<script>document.getElementById("headerdiv").style.height="', $this->topmargin - $this->headermargin - 6, 'pt";</script>'; - echo '<div id="bodydiv" style="position: relative; top: auto; width: ', $this->noMarginWidth, 'pt; height: 100%;">'; - $this->Y = 0; - $this->maxY = 0; - $this->runPageHeader(); - foreach ($this->bodyElements as $element) { - if (is_object($element)) { - $element->render($this); - } elseif (is_string($element) && $element == 'footnotetexts') { - $this->footnotes(); - } elseif (is_string($element) && $element == 'addpage') { - $this->addPage(); - } - } - //-- footer - echo '</div>'; - echo '<script>document.getElementById("bodydiv").style.height="', $this->maxY, 'pt";</script>'; - echo '<div id="bottommargin" style="position: relative; top: auto; height: ', $this->bottommargin - $this->footermargin, 'pt;width:', $this->noMarginWidth, 'pt;"></div>'; - echo '<div id="footerdiv" style="position: relative; top: auto; width: ', $this->noMarginWidth, 'pt;height:auto;">'; - $this->Y = 0; - $this->X = 0; - $this->maxY = 0; - foreach ($this->footerElements as $element) { - if (is_object($element)) { - $element->render($this); - } elseif (is_string($element) && $element == 'footnotetexts') { - $this->footnotes(); - } elseif (is_string($element) && $element == 'addpage') { - $this->addPage(); - } - } - echo '</div>'; - echo '<script>document.getElementById("footerdiv").style.height="', $this->maxY, 'pt";</script>'; - echo '<div id="footermargin" style="position: relative; top: auto; height: ', $this->footermargin, 'pt;width:', $this->noMarginWidth, 'pt;"></div>'; - } + /** + * Run the report. + */ + public function run() + { + // Setting up the styles + echo '<style type="text/css">'; + echo '#bodydiv { font: 10px sans-serif;}'; + foreach ($this->Styles as $class => $style) { + echo '.', $class, ' { '; + if ($style['font'] == 'dejavusans') { + $style['font'] = $this->defaultFont; + } + echo 'font-family: ', $style['font'], '; '; + echo 'font-size: ', $style['size'], 'pt; '; + // Case-insensitive + if (stripos($style['style'], 'B') !== false) { + echo 'font-weight: bold; '; + } + if (stripos($style['style'], 'I') !== false) { + echo 'font-style: italic; '; + } + if (stripos($style['style'], 'U') !== false) { + echo 'text-decoration: underline; '; + } + if (stripos($style['style'], 'D') !== false) { + echo 'text-decoration: line-through; '; + } + echo '}', PHP_EOL; + } + unset($class, $style); + //-- header divider + echo '</style>', PHP_EOL; + echo '<div id="headermargin" style="position: relative; top: auto; height: ', $this->headermargin, 'pt; width: ', $this->noMarginWidth, 'pt;"></div>'; + echo '<div id="headerdiv" style="position: relative; top: auto; width: ', $this->noMarginWidth, 'pt;">'; + foreach ($this->headerElements as $element) { + if (is_object($element)) { + $element->render($this); + } elseif (is_string($element) && $element == 'footnotetexts') { + $this->footnotes(); + } elseif (is_string($element) && $element == 'addpage') { + $this->addPage(); + } + } + //-- body + echo '</div>'; + echo '<script>document.getElementById("headerdiv").style.height="', $this->topmargin - $this->headermargin - 6, 'pt";</script>'; + echo '<div id="bodydiv" style="position: relative; top: auto; width: ', $this->noMarginWidth, 'pt; height: 100%;">'; + $this->Y = 0; + $this->maxY = 0; + $this->runPageHeader(); + foreach ($this->bodyElements as $element) { + if (is_object($element)) { + $element->render($this); + } elseif (is_string($element) && $element == 'footnotetexts') { + $this->footnotes(); + } elseif (is_string($element) && $element == 'addpage') { + $this->addPage(); + } + } + //-- footer + echo '</div>'; + echo '<script>document.getElementById("bodydiv").style.height="', $this->maxY, 'pt";</script>'; + echo '<div id="bottommargin" style="position: relative; top: auto; height: ', $this->bottommargin - $this->footermargin, 'pt;width:', $this->noMarginWidth, 'pt;"></div>'; + echo '<div id="footerdiv" style="position: relative; top: auto; width: ', $this->noMarginWidth, 'pt;height:auto;">'; + $this->Y = 0; + $this->X = 0; + $this->maxY = 0; + foreach ($this->footerElements as $element) { + if (is_object($element)) { + $element->render($this); + } elseif (is_string($element) && $element == 'footnotetexts') { + $this->footnotes(); + } elseif (is_string($element) && $element == 'addpage') { + $this->addPage(); + } + } + echo '</div>'; + echo '<script>document.getElementById("footerdiv").style.height="', $this->maxY, 'pt";</script>'; + echo '<div id="footermargin" style="position: relative; top: auto; height: ', $this->footermargin, 'pt;width:', $this->noMarginWidth, 'pt;"></div>'; + } - /** - * Create a new Cell object - ReportHtml - * - * @param int $width cell width (expressed in points) - * @param int $height cell height (expressed in points) - * @param mixed $border Border style - * @param string $align Text alignement - * @param string $bgcolor Background color code - * @param string $style The name of the text style - * @param int $ln Indicates where the current position should go after the call - * @param mixed $top Y-position - * @param mixed $left X-position - * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. - * @param int $stretch Stretch carachter mode - * @param string $bocolor Border color - * @param string $tcolor Text color - * @param bool $reseth - * - * @return object ReportHtmlCell - */ - public function createCell($width, $height, $border, $align, $bgcolor, $style, $ln, $top, $left, $fill, $stretch, $bocolor, $tcolor, $reseth) { - return new ReportHtmlCell($width, $height, $border, $align, $bgcolor, $style, $ln, $top, $left, $fill, $stretch, $bocolor, $tcolor, $reseth); - } + /** + * Create a new Cell object - ReportHtml + * + * @param int $width cell width (expressed in points) + * @param int $height cell height (expressed in points) + * @param mixed $border Border style + * @param string $align Text alignement + * @param string $bgcolor Background color code + * @param string $style The name of the text style + * @param int $ln Indicates where the current position should go after the call + * @param mixed $top Y-position + * @param mixed $left X-position + * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0. + * @param int $stretch Stretch carachter mode + * @param string $bocolor Border color + * @param string $tcolor Text color + * @param bool $reseth + * + * @return object ReportHtmlCell + */ + public function createCell($width, $height, $border, $align, $bgcolor, $style, $ln, $top, $left, $fill, $stretch, $bocolor, $tcolor, $reseth) + { + return new ReportHtmlCell($width, $height, $border, $align, $bgcolor, $style, $ln, $top, $left, $fill, $stretch, $bocolor, $tcolor, $reseth); + } - /** - * Create a text box. - * - * @param $width - * @param $height - * @param $border - * @param $bgcolor - * @param $newline - * @param $left - * @param $top - * @param $pagecheck - * @param $style - * @param $fill - * @param $padding - * @param $reseth - * - * @return ReportHtmlTextbox - */ - public function createTextBox($width, $height, $border, $bgcolor, $newline, $left, $top, $pagecheck, $style, $fill, $padding, $reseth) { - return new ReportHtmlTextbox($width, $height, $border, $bgcolor, $newline, $left, $top, $pagecheck, $style, $fill, $padding, $reseth); - } + /** + * Create a text box. + * + * @param $width + * @param $height + * @param $border + * @param $bgcolor + * @param $newline + * @param $left + * @param $top + * @param $pagecheck + * @param $style + * @param $fill + * @param $padding + * @param $reseth + * + * @return ReportHtmlTextbox + */ + public function createTextBox($width, $height, $border, $bgcolor, $newline, $left, $top, $pagecheck, $style, $fill, $padding, $reseth) + { + return new ReportHtmlTextbox($width, $height, $border, $bgcolor, $newline, $left, $top, $pagecheck, $style, $fill, $padding, $reseth); + } - /** - * Create a text element. - * - * @param $style - * @param $color - * - * @return ReportHtmlText - */ - public function createText($style, $color) { - return new ReportHtmlText($style, $color); - } + /** + * Create a text element. + * + * @param $style + * @param $color + * + * @return ReportHtmlText + */ + public function createText($style, $color) + { + return new ReportHtmlText($style, $color); + } - /** - * Create a footnote. - * - * @param string $style - * - * @return ReportHtmlFootnote - */ - public function createFootnote($style = '') { - return new ReportHtmlFootnote($style); - } + /** + * Create a footnote. + * + * @param string $style + * + * @return ReportHtmlFootnote + */ + public function createFootnote($style = '') + { + return new ReportHtmlFootnote($style); + } - /** - * Create a page header. - * - * @return ReportHtmlPageheader - */ - public function createPageHeader() { - return new ReportHtmlPageheader; - } + /** + * Create a page header. + * + * @return ReportHtmlPageheader + */ + public function createPageHeader() + { + return new ReportHtmlPageheader; + } - /** - * Create an image. - * - * @param $file - * @param $x - * @param $y - * @param $w - * @param $h - * @param $align - * @param $ln - * - * @return ReportHtmlImage - */ - public function createImage($file, $x, $y, $w, $h, $align, $ln) { - return new ReportHtmlImage($file, $x, $y, $w, $h, $align, $ln); - } + /** + * Create an image. + * + * @param $file + * @param $x + * @param $y + * @param $w + * @param $h + * @param $align + * @param $ln + * + * @return ReportHtmlImage + */ + public function createImage($file, $x, $y, $w, $h, $align, $ln) + { + return new ReportHtmlImage($file, $x, $y, $w, $h, $align, $ln); + } - /** - * Create an image. - * - * @param MediaFile $media_file - * @param $x - * @param $y - * @param $w - * @param $h - * @param $align - * @param $ln - * - * @return ReportHtmlImage - */ - public function createImageFromObject(MediaFile $media_file, $x, $y, $w, $h, $align, $ln) { - return new ReportHtmlImage($media_file->imageUrl($w, $h, ''), $x, $y, $w, $h, $align, $ln); - } + /** + * Create an image. + * + * @param MediaFile $media_file + * @param $x + * @param $y + * @param $w + * @param $h + * @param $align + * @param $ln + * + * @return ReportHtmlImage + */ + public function createImageFromObject(MediaFile $media_file, $x, $y, $w, $h, $align, $ln) + { + return new ReportHtmlImage($media_file->imageUrl($w, $h, ''), $x, $y, $w, $h, $align, $ln); + } - /** - * Create a line. - * - * @param $x1 - * @param $y1 - * @param $x2 - * @param $y2 - * - * @return ReportHtmlLine - */ - public function createLine($x1, $y1, $x2, $y2) { - return new ReportHtmlLine($x1, $y1, $x2, $y2); - } + /** + * Create a line. + * + * @param $x1 + * @param $y1 + * @param $x2 + * @param $y2 + * + * @return ReportHtmlLine + */ + public function createLine($x1, $y1, $x2, $y2) + { + return new ReportHtmlLine($x1, $y1, $x2, $y2); + } - /** - * Create an HTML element. - * - * @param $tag - * @param $attrs - * - * @return ReportHtmlHtml - */ - public function createHTML($tag, $attrs) { - return new ReportHtmlHtml($tag, $attrs); - } + /** + * Create an HTML element. + * + * @param $tag + * @param $attrs + * + * @return ReportHtmlHtml + */ + public function createHTML($tag, $attrs) + { + return new ReportHtmlHtml($tag, $attrs); + } - /** - * Clear the Header - ReportHtml - */ - public function clearHeader() { - $this->headerElements = []; - } + /** + * Clear the Header - ReportHtml + */ + public function clearHeader() + { + $this->headerElements = []; + } - /** - * Update the Page Number and set a new Y if max Y is larger - ReportHtml - */ - public function addPage() { - $this->pageN++; - // Add a little margin to max Y "between pages" - $this->maxY += 10; - // If Y is still heigher by any reason... - if ($this->maxY < $this->Y) { - // ... update max Y - $this->maxY = $this->Y; - } // else update Y so that nothing will be overwritten, like images or cells... - else { - $this->Y = $this->maxY; - } - } + /** + * Update the Page Number and set a new Y if max Y is larger - ReportHtml + */ + public function addPage() + { + $this->pageN++; + // Add a little margin to max Y "between pages" + $this->maxY += 10; + // If Y is still heigher by any reason... + if ($this->maxY < $this->Y) { + // ... update max Y + $this->maxY = $this->Y; + } // else update Y so that nothing will be overwritten, like images or cells... + else { + $this->Y = $this->maxY; + } + } - /** - * Uppdate max Y to keep track it incase of a pagebreak - ReportHtml - * - * @param float $y - */ - public function addMaxY($y) { - if ($this->maxY < $y) { - $this->maxY = $y; - } - } + /** + * Uppdate max Y to keep track it incase of a pagebreak - ReportHtml + * + * @param float $y + */ + public function addMaxY($y) + { + if ($this->maxY < $y) { + $this->maxY = $y; + } + } - /** - * Add a page header. - * - * @param $element - * - * @return int - */ - public function addPageHeader($element) { - $this->pageHeaderElements[] = $element; + /** + * Add a page header. + * + * @param $element + * + * @return int + */ + public function addPageHeader($element) + { + $this->pageHeaderElements[] = $element; - return count($this->headerElements) - 1; - } + return count($this->headerElements) - 1; + } - /** - * Checks the Footnote and numbers them - ReportHtml - * - * @param object $footnote - * - * @return bool false if not numbered before | object if already numbered - */ - public function checkFootnote($footnote) { - $ct = count($this->printedfootnotes); - $i = 0; - $val = $footnote->getValue(); - while ($i < $ct) { - if ($this->printedfootnotes[$i]->getValue() == $val) { - // If this footnote already exist then set up the numbers for this object - $footnote->setNum($i + 1); - $footnote->setAddlink($i + 1); + /** + * Checks the Footnote and numbers them - ReportHtml + * + * @param object $footnote + * + * @return bool false if not numbered before | object if already numbered + */ + public function checkFootnote($footnote) + { + $ct = count($this->printedfootnotes); + $i = 0; + $val = $footnote->getValue(); + while ($i < $ct) { + if ($this->printedfootnotes[$i]->getValue() == $val) { + // If this footnote already exist then set up the numbers for this object + $footnote->setNum($i + 1); + $footnote->setAddlink($i + 1); - return $this->printedfootnotes[$i]; - } - $i++; - } - // If this Footnote has not been set up yet - $footnote->setNum($ct + 1); - $footnote->setAddlink($ct + 1); - $this->printedfootnotes[] = $footnote; + return $this->printedfootnotes[$i]; + } + $i++; + } + // If this Footnote has not been set up yet + $footnote->setNum($ct + 1); + $footnote->setAddlink($ct + 1); + $this->printedfootnotes[] = $footnote; - return false; - } + return false; + } - /** - * Clear the Page Header - ReportHtml - */ - public function clearPageHeader() { - $this->pageHeaderElements = []; - } + /** + * Clear the Page Header - ReportHtml + */ + public function clearPageHeader() + { + $this->pageHeaderElements = []; + } - /** - * Count the number of lines - ReportHtml - * - * @param string $str - * - * @return int Number of lines. 0 if empty line - */ - public function countLines($str) { - if ($str == '') { - return 0; - } + /** + * Count the number of lines - ReportHtml + * + * @param string $str + * + * @return int Number of lines. 0 if empty line + */ + public function countLines($str) + { + if ($str == '') { + return 0; + } - return (substr_count($str, "\n") + 1); - } + return (substr_count($str, "\n") + 1); + } - /** - * Get the current style. - * - * @return string - */ - public function getCurrentStyle() { - return $this->currentStyle; - } + /** + * Get the current style. + * + * @return string + */ + public function getCurrentStyle() + { + return $this->currentStyle; + } - /** - * Get the current style height. - * - * @return int - */ - public function getCurrentStyleHeight() { - if (empty($this->currentStyle)) { - return $this->defaultFontSize; - } - $style = $this->getStyle($this->currentStyle); + /** + * Get the current style height. + * + * @return int + */ + public function getCurrentStyleHeight() + { + if (empty($this->currentStyle)) { + return $this->defaultFontSize; + } + $style = $this->getStyle($this->currentStyle); - return $style['size']; - } + return $style['size']; + } - /** - * Get the current footnotes height. - * - * @param $cellWidth - * - * @return int - */ - public function getFootnotesHeight($cellWidth) { - $h = 0; - foreach ($this->printedfootnotes as $element) { - $h += $element->getFootnoteHeight($this, $cellWidth); - } + /** + * Get the current footnotes height. + * + * @param $cellWidth + * + * @return int + */ + public function getFootnotesHeight($cellWidth) + { + $h = 0; + foreach ($this->printedfootnotes as $element) { + $h += $element->getFootnoteHeight($this, $cellWidth); + } - return $h; - } + return $h; + } - /** - * Get the maximum width from current position to the margin - ReportHtml - * - * @return float - */ - public function getRemainingWidth() { - return $this->noMarginWidth - $this->X; - } + /** + * Get the maximum width from current position to the margin - ReportHtml + * + * @return float + */ + public function getRemainingWidth() + { + return $this->noMarginWidth - $this->X; + } - /** - * Get the page height. - * - * @return float - */ - public function getPageHeight() { - return $this->pageh - $this->topmargin; - } + /** + * Get the page height. + * + * @return float + */ + public function getPageHeight() + { + return $this->pageh - $this->topmargin; + } - /** - * Get the width of a string. - * - * @param $text - * - * @return int - */ - public function getStringWidth($text) { - $style = $this->getStyle($this->currentStyle); + /** + * Get the width of a string. + * + * @param $text + * + * @return int + */ + public function getStringWidth($text) + { + $style = $this->getStyle($this->currentStyle); - return mb_strlen($text) * ($style['size'] / 2); - } + return mb_strlen($text) * ($style['size'] / 2); + } - /** - * Get a text height in points - ReportHtml - * - * @param $str - * - * @return int - */ - public function getTextCellHeight($str) { - // Count the number of lines to calculate the height - $nl = $this->countLines($str); - // Calculate the cell height - return ceil(($this->getCurrentStyleHeight() * $this->cellHeightRatio) * $nl); - } + /** + * Get a text height in points - ReportHtml + * + * @param $str + * + * @return int + */ + public function getTextCellHeight($str) + { + // Count the number of lines to calculate the height + $nl = $this->countLines($str); - /** - * Get the current X position - ReportHtml - * - * @return float - */ - public function getX() { - return $this->X; - } + // Calculate the cell height + return ceil(($this->getCurrentStyleHeight() * $this->cellHeightRatio) * $nl); + } - /** - * Get the current Y position - ReportHtml - * - * @return float - */ - public function getY() { - return $this->Y; - } + /** + * Get the current X position - ReportHtml + * + * @return float + */ + public function getX() + { + return $this->X; + } - /** - * Get the current page number - ReportHtml - * - * @return int - */ - public function pageNo() { - return $this->pageN; - } + /** + * Get the current Y position - ReportHtml + * + * @return float + */ + public function getY() + { + return $this->Y; + } - /** - * Set the current style. - * - * @param $s - */ - public function setCurrentStyle($s) { - $this->currentStyle = $s; - } + /** + * Get the current page number - ReportHtml + * + * @return int + */ + public function pageNo() + { + return $this->pageN; + } - /** - * Set the X position - ReportHtml - * - * @param float $x - */ - public function setX($x) { - $this->X = $x; - } + /** + * Set the current style. + * + * @param $s + */ + public function setCurrentStyle($s) + { + $this->currentStyle = $s; + } - /** - * Set the Y position - ReportHtml - * - * Also updates Max Y position - * - * @param float $y - */ - public function setY($y) { - $this->Y = $y; - if ($this->maxY < $y) { - $this->maxY = $y; - } - } + /** + * Set the X position - ReportHtml + * + * @param float $x + */ + public function setX($x) + { + $this->X = $x; + } - /** - * Set the X and Y position - ReportHtml - * - * Also updates Max Y position - * - * @param float $x - * @param float $y - */ - public function setXy($x, $y) { - $this->setX($x); - $this->setY($y); - } + /** + * Set the Y position - ReportHtml + * + * Also updates Max Y position + * + * @param float $y + */ + public function setY($y) + { + $this->Y = $y; + if ($this->maxY < $y) { + $this->maxY = $y; + } + } - /** - * Wrap text - ReportHtml - * - * @param string $str Text to wrap - * @param int $width Width in points the text has to fit into - * - * @return string - */ - public function textWrap($str, $width) { - // Calculate the line width - $lw = (int) ($width / ($this->getCurrentStyleHeight() / 2)); - // Wordwrap each line - $lines = explode("\n", $str); - // Line Feed counter - $lfct = count($lines); - $wraptext = ''; - foreach ($lines as $line) { - $wtext = FunctionsRtl::utf8WordWrap($line, $lw, "\n", true); - $wraptext .= $wtext; - // Add a new line as long as it’s not the last line - if ($lfct > 1) { - $wraptext .= "\n"; - } - $lfct--; - } + /** + * Set the X and Y position - ReportHtml + * + * Also updates Max Y position + * + * @param float $x + * @param float $y + */ + public function setXy($x, $y) + { + $this->setX($x); + $this->setY($y); + } - return $wraptext; - } + /** + * Wrap text - ReportHtml + * + * @param string $str Text to wrap + * @param int $width Width in points the text has to fit into + * + * @return string + */ + public function textWrap($str, $width) + { + // Calculate the line width + $lw = (int)($width / ($this->getCurrentStyleHeight() / 2)); + // Wordwrap each line + $lines = explode("\n", $str); + // Line Feed counter + $lfct = count($lines); + $wraptext = ''; + foreach ($lines as $line) { + $wtext = FunctionsRtl::utf8WordWrap($line, $lw, "\n", true); + $wraptext .= $wtext; + // Add a new line as long as it’s not the last line + if ($lfct > 1) { + $wraptext .= "\n"; + } + $lfct--; + } - /** - * Write text - ReportHtml - * - * @param string $text Text to print - * @param string $color HTML RGB color code (Ex: #001122) - * @param bool $useclass - */ - public function write($text, $color = '', $useclass = true) { - $style = $this->getStyle($this->getCurrentStyle()); - $htmlcode = '<span dir="' . I18N::direction() . '"'; - if ($useclass) { - $htmlcode .= ' class="' . $style['name'] . '"'; - } - if (!empty($color)) { - // Check if Text Color is set and if it’s valid HTML color - if (preg_match('/#?(..)(..)(..)/', $color)) { - $htmlcode .= ' style="color:' . $color . ';"'; - } - } + return $wraptext; + } - $htmlcode .= '>' . $text . '</span>'; - $htmlcode = str_replace(["\n", '> ', ' <'], ['<br>', '> ', ' <'], $htmlcode); - echo $htmlcode; - } + /** + * Write text - ReportHtml + * + * @param string $text Text to print + * @param string $color HTML RGB color code (Ex: #001122) + * @param bool $useclass + */ + public function write($text, $color = '', $useclass = true) + { + $style = $this->getStyle($this->getCurrentStyle()); + $htmlcode = '<span dir="' . I18N::direction() . '"'; + if ($useclass) { + $htmlcode .= ' class="' . $style['name'] . '"'; + } + if (!empty($color)) { + // Check if Text Color is set and if it’s valid HTML color + if (preg_match('/#?(..)(..)(..)/', $color)) { + $htmlcode .= ' style="color:' . $color . ';"'; + } + } + + $htmlcode .= '>' . $text . '</span>'; + $htmlcode = str_replace([ + "\n", + '> ', + ' <', + ], [ + '<br>', + '> ', + ' <', + ], $htmlcode); + echo $htmlcode; + } } |
