/** * Parse and draw table on the page. * * @return array List of pages with table. */ public function render() { $y = $this->page->getHeight() - $this->y; foreach ($this->_rows as $row) { if ($y - $row->testRender($this->page, $this->x, $y) < 0) { $font = $this->page->getFont(); $fontSize = $this->page->getFontSize(); $this->page = new Phprojekt_Pdf_Page($this->page); $this->page->setFont($font, $fontSize); $this->_pages[] = $this->page; $y = $this->page->getHeight() - $this->page->borderTop; } $row->render($this->page, $this->x, $y); $y -= $row->getHeight(); } $positionOfTheLastRow = $this->page->getHeight() - $y; $rowHeight = $this->page->getFontSize() * $this->page->lineHeight; $this->page->freeLineY = $positionOfTheLastRow + $rowHeight; return $this->_pages; }
/** * Creates a PDF report from the Minutes model given. * Returns the PDF as a string that can either be saved to disk * or streamed back to the browser. * * @param Phprojekt_Model_Interface $minutesModel The minutes model object to create the PDF from. * * @return string The resulting PDF document. */ public static function getPdf(Phprojekt_Model_Interface $minutesModel) { $phpr = Phprojekt::getInstance(); $pdf = new Zend_Pdf(); $page = new Phprojekt_Pdf_Page(Zend_Pdf_Page::SIZE_A4); $pages = array($page); $page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 12); $page->setBorder(2.0 * Phprojekt_Pdf_Page::PT_PER_CM, 2.0 * Phprojekt_Pdf_Page::PT_PER_CM, 2.0 * Phprojekt_Pdf_Page::PT_PER_CM, 3.0 * Phprojekt_Pdf_Page::PT_PER_CM); $page->addFreetext(array('lines' => $minutesModel->title, 'fontSize' => 20)); $page->addFreetext(array('lines' => array_merge(explode("\n\n", $minutesModel->description), array($phpr->translate('Start') . ': ' . $minutesModel->meetingDatetime, $phpr->translate('End') . ': ' . $minutesModel->endTime, $phpr->translate('Place') . ': ' . $minutesModel->place, $phpr->translate('Moderator') . ': ' . $minutesModel->moderator)), 'fontSize' => 12)); $invited = Minutes_Helpers_Userlist::expandIdList($minutesModel->participantsInvited); $attending = Minutes_Helpers_Userlist::expandIdList($minutesModel->participantsAttending); $excused = Minutes_Helpers_Userlist::expandIdList($minutesModel->participantsExcused); $pages += $page->addTable(array('fontSize' => 12, 'rows' => array(array(array('text' => $phpr->translate('Invited'), 'width' => 4.7 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => array_reduce($invited, array('self', '_concat')), 'width' => 12.0 * Phprojekt_Pdf_Page::PT_PER_CM)), array(array('text' => $phpr->translate('Attending'), 'width' => 4.7 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => array_reduce($attending, array('self', '_concat')), 'width' => 12.0 * Phprojekt_Pdf_Page::PT_PER_CM)), array(array('text' => $phpr->translate('Excused'), 'width' => 4.7 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => array_reduce($excused, array('self', '_concat')), 'width' => 12.0 * Phprojekt_Pdf_Page::PT_PER_CM))))); $page = end($pages); $itemtable = array(); $items = $minutesModel->items->fetchAll(); foreach ($items as $item) { $itemtable[] = array(array('text' => $item->topicId, 'width' => 1.3 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $phpr->translate($item->information->getTopicType($item->topicType)), 'width' => 3.0 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $item->getDisplay(), 'width' => 12.4 * Phprojekt_Pdf_Page::PT_PER_CM)); } $pages += $page->addTable(array('fontSize' => 12, 'rows' => array_merge(array(array('isHeader' => true, array('text' => $phpr->translate('No.'), 'width' => 1.3 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $phpr->translate('Type'), 'width' => 3.0 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $phpr->translate('Item'), 'width' => 12.4 * Phprojekt_Pdf_Page::PT_PER_CM))), $itemtable))); $page = end($pages); $pdf->pages = $pages; $pdf->properties['Title'] = $minutesModel->title; $owner = Minutes_Helpers_Userlist::expandIdList($minutesModel->ownerId); $pdf->properties['Author'] = $owner[0]['display']; $pdf->properties['Producer'] = 'PHProjekt version ' . Phprojekt::getVersion(); $pdf->properties['CreationDate'] = 'D:' . gmdate('YmdHis'); $pdf->properties['Keywords'] = $minutesModel->description; return $pdf->render(); }
/** * Add border. * * @param Phprojekt_Pdf_Page $page Current page. * @param integer $x Start position x. * @param integer $y Start position y. * @param integer $height Current height. * @param boolean $isHeader True if is a header. * * @return void */ public function renderBorder($page, $x, $y, $height, $isHeader = false) { if ($isHeader) { $grayColor = new Zend_Pdf_Color_GrayScale(Phprojekt_Pdf_Page::HEADER_GRAY_LEVEL); $blackColor = new Zend_Pdf_Color_GrayScale(0); $page->setFillColor($grayColor); $page->drawRectangle($x, $y, $x + $this->_width, $y - $height, Zend_Pdf_Page::SHAPE_DRAW_FILL); $page->setFillColor($blackColor); } $page->drawRectangle($x, $y, $x + $this->_width, $y - $height, Zend_Pdf_Page::SHAPE_DRAW_STROKE); }