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 ?>