public function generateContents($page = 1) { $INDEXPAGE_ROWS = $this::INDEXPAGE_ROWS - 44; $this->category = "Содержание"; if ($this->format == 'A4' && $this->print) { $this->margins = array('top' => 34, 'right' => 64, 'bottom' => 34, 'left' => 44); } else { $this->margins = array('top' => 20, 'right' => 50, 'bottom' => 20, 'left' => 30); } if ($page % 2 == 0) { $this->margins = $this->swapMargins($this->margins); } $categoryIndexModel = new Model_DbTable_CategoryIndex(); $indexes = $categoryIndexModel->getAdapter()->fetchAll("SELECT c.name AS name, ci.page AS page, ci.category_id as category_id, ci.depth as depth FROM categories AS c INNER JOIN categoryIndex AS ci ON ci.category_id = c.id ORDER BY ci.page, ci.depth"); $page = $this->createBook($page, false); $colWidth = $page->getWidth(); $pointWidth = $page->widthForStringUsingFontsize('.', Model_Static_Fonts::get('Arial Narrow'), $this->format == 'A4' ? 9.0 : 4.5); for ($p = 0; $p < intval(count($indexes) / $INDEXPAGE_ROWS + 1); $p++) { $page->setFont(Model_Static_Fonts::get('Arial Narrow'), $this->format == 'A4' ? 9.0 : 4.5); $page->setFillColor(new Zend_Pdf_Color_Html("#000000")); for ($row = 0; $row < $INDEXPAGE_ROWS; $row++) { $productIndex = (object) $indexes[$p * $INDEXPAGE_ROWS + $row]; /* write */ if (!trim($productIndex->name)) { continue; } $curColWidth = $colWidth - $page->widthForStringUsingFontsize($productIndex->page, Model_Static_Fonts::get('Arial Narrow'), $this->format == 'A4' ? 9.0 : 4.5); switch ($productIndex->depth) { case 0: $nameFont = 'Arial Narrow Bold'; $page->setFillColor(new Zend_Pdf_Color_Html("#ef7900")); break; case 1: $nameFont = 'Arial Narrow Bold'; $page->setFillColor(new Zend_Pdf_Color_Html("#000000")); break; case 2: default: $nameFont = 'Arial Narrow'; $page->setFillColor(new Zend_Pdf_Color_Html("#000000")); break; } // append `.` to page $page->setFont(Model_Static_Fonts::get($nameFont), $this->format == 'A4' ? 9.0 : 4.5); $textWidth = $page->widthForStringUsingFontsize($productIndex->name, Model_Static_Fonts::get($nameFont), $this->format == 'A4' ? 9.0 : 4.5); $points = str_repeat(chr('0x2E'), intval(($curColWidth - $textWidth - intval($productIndex->depth * 10)) / 2 - 5)); $page->drawTextBlock($productIndex->name, intval($productIndex->depth * 10), $page->getHeight() - $row * 9); $page->setFont(Model_Static_Fonts::get('Arial Narrow'), $this->format == 'A4' ? 9.0 : 4.5); $page->setFillColor(new Zend_Pdf_Color_Html("#000000")); $page->drawTextBlock($points, $textWidth + $productIndex->depth * 10, $page->getHeight() - $row * 9); $page->drawTextBlock($productIndex->page, $curColWidth, $page->getHeight() - $row * 9); } $page->drawCategory($this->category); $page->drawSideIcons("A"); $page = $this->addPage(false); } return $this->book; }
/** * Get maximal width of table column * * @param array[][] $table Table * @used-by $this::drawTable() * * @return array[] max widths */ private function getTableColumnsMaxWidths($table, $params = false) { $widths = array(); if (count($table) != 1) { foreach ($table[0] as $col) { $widths[] = 0; } } foreach ($table as $j => $rowset) { foreach ($rowset as $i => $col) { if ($j == 0 && count($table) != 1) { continue; } if ($params) { if (count($rowset) <= 10) { $widths[$i] = max(array($this->widthForStringUsingFontsize(trim($col), Model_Static_Fonts::get("Arial Narrow"), $this->fontSizeFormat) + 20, $widths[$i])); } else { $widths[$i] = max(array($this->widthForStringUsingFontsize(trim($col), Model_Static_Fonts::get("Arial Narrow"), $this->fontSizeFormat) + 5, $widths[$i])); } } else { $widths[$i] = max(array($this->widthForStringUsingFontsize(trim($col), Model_Static_Fonts::get("Arial Narrow"), $this->fontSizeFormatDiscription) + 15, $widths[$i])); } } } return $widths; }