openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

PdfRenderer.class.php (4026B)


      1 <?php
      2 
      3 /**
      4  * Dokument-Objekt.<br>
      5  * Diese Objekt verkoerpert das Root-Objekt in einem DOM-Baum.<br>
      6  * <br>
      7  * Dieses Objekt kann Text parsen und seine Unterobjekte selbst erzeugen.<br>
      8  *
      9  * @author Jan Dankert, $Author$
     10  * @version $Revision$
     11  * @package openrat.text
     12  */
     13 
     14 namespace wikiparser\renderer;
     15 
     16 use cms\base\Startup;
     17 use cms\model\BaseObject;
     18 use cms\model\File;
     19 use cms\model\Image;
     20 use Pdf;
     21 
     22 require(__DIR__ . '/fpdf/fpdf.php');
     23 require(__DIR__ . '/fpdf/Pdf.class.php');
     24 
     25 class PdfRenderer
     26 {
     27 	var $linkedObjectIds = array();
     28 
     29 	/**
     30 	 *
     31 	 * @var array
     32 	 */
     33 	var $footnotes = array();
     34 
     35 	var $pdf;
     36 
     37 	var $url;
     38 
     39 
     40 	/**
     41 	 * Rendert ein Dokument-Element.
     42 	 *
     43 	 * @param Object $child Element
     44 	 * @return String
     45 	 */
     46 	function renderElement($child)
     47 	{
     48 		switch (strtolower(get_class($child))) {
     49 			case 'tableofcontentelement':
     50 				break;
     51 
     52 			case 'rawelement':
     53 				$this->pdf->Write(5, $child->src);
     54 
     55 				break;
     56 
     57 			case 'textelement':
     58 
     59 				$this->pdf->Write(5, $child->text, $this->url);
     60 				$this->url = '';
     61 				break;
     62 
     63 			case 'footnoteelement':
     64 				break;
     65 
     66 			case 'macroelement':
     67 				break;
     68 
     69 			case 'codeelement':
     70 				$this->pdf->ln(10);
     71 				$this->pdf->SetFont('Courier', '', 12);
     72 				break;
     73 
     74 			case 'quoteelement':
     75 				$this->pdf->SetFont('Arial', 'I', 12);
     76 				break;
     77 
     78 
     79 			case 'paragraphelement':
     80 				$this->pdf->ln(10);
     81 				break;
     82 
     83 			case 'speechelement':
     84 				$this->pdf->SetFont('Arial', 'I', 12);
     85 				break;
     86 
     87 			case 'linebreakelement':
     88 				$this->pdf->ln(5);
     89 				break;
     90 
     91 			case 'linkelement':
     92 				$this->url = $child->getUrl();
     93 				$this->pdf->SetTextColor(0, 0, 255); // Blau.
     94 				break;
     95 
     96 			case 'imageelement':
     97 				if (BaseObject::available($child->objectId)) {
     98 					$this->pdf->ln(5);
     99 					// Breite/oe�he des Bildes bestimmen.
    100 					$image = new Image($child->objectId);
    101 
    102 					$image->load();
    103 					$image->write();
    104 					$image->getImageSize();
    105 					// $image->width;
    106 					// $image->height;
    107 
    108 					$this->pdf->Image($image->getCache()->getFilename(), $this->pdf->GetX(), $this->pdf->GetY(), 0, 0, $image->extension());
    109 					$this->pdf->ln($image->height / 2.5);
    110 					$this->pdf->ln(5);
    111 
    112 					unset($image);
    113 				}
    114 				break;
    115 
    116 			case 'strongelement':
    117 				$this->pdf->SetFont('Arial', 'B', 12);
    118 
    119 				break;
    120 
    121 			case 'emphaticelement':
    122 				$this->pdf->SetFont('Arial', 'I', 12);
    123 				break;
    124 
    125 			case 'insertedelement':
    126 				$this->pdf->SetTextColor(0, 255, 0);
    127 				break;
    128 
    129 			case 'removedelement':
    130 				$this->pdf->SetTextColor(255, 0, 0);
    131 				break;
    132 
    133 			case 'headlineelement':
    134 				$this->pdf->ln(20 - (2 * $child->level));
    135 				$this->pdf->SetFontSize(20 - (2 * $child->level));
    136 
    137 				break;
    138 
    139 			case 'tableelement':
    140 				$this->pdf->ln(20);
    141 				break;
    142 
    143 			case 'tablelineelement':
    144 				$this->pdf->ln(20);
    145 				break;
    146 
    147 			case 'definitionlistelement':
    148 				//$this->pdf->ln(10);
    149 				break;
    150 
    151 			case 'definitionitemelement':
    152 				$this->pdf->ln(10);
    153 				if (!empty($child->key)) {
    154 					$this->pdf->SetFont('', 'U');
    155 					$this->pdf->Write(5, $child->key);
    156 					$this->pdf->SetFont('', '');
    157 				}
    158 				$this->pdf->Write(5, ': ');
    159 
    160 			case 'tablecellelement':
    161 				break;
    162 
    163 			case 'teletypeelement':
    164 				$this->pdf->SetFont('Courier', '', 12);
    165 				break;
    166 
    167 			case 'listelement':
    168 				$this->pdf->ln(5);
    169 				break;
    170 
    171 			case 'numberedlistelement':
    172 				$this->pdf->ln(5);
    173 				break;
    174 
    175 			case 'listentryelement':
    176 				$this->pdf->ln(5);
    177 				$this->pdf->Write(5, '- ');
    178 				break;
    179 
    180 			default:
    181 				break;
    182 		}
    183 
    184 		foreach ($child->children as $c) {
    185 			$this->renderElement($c);
    186 		}
    187 
    188 		$this->pdf->SetFont('Arial', '', 12);
    189 		$this->pdf->SetTextColor(0, 0, 0);
    190 	}
    191 
    192 
    193 	/**
    194 	 * Rendering des Dokumentes.<br>
    195 	 *
    196 	 * @return String
    197 	 */
    198 	function render()
    199 	{
    200 		$this->pdf = new Pdf();
    201 		$this->pdf->AddPage();
    202 		$this->pdf->SetCreator(Startup::TITLE);
    203 		$this->pdf->SetFont('Arial', '', 12);
    204 
    205 		#$this->footnotes    = array();
    206 
    207 		foreach ($this->children as $child)
    208 			$this->renderElement($child);
    209 
    210 		#foreach( $this->footnotes as $child )
    211 		#	$this->renderElement( $child );
    212 
    213 		return $this->pdf->Output('', 'S');
    214 	}
    215 }
    216 
    217 ?>