File modules/wikiparser/renderer/PdfRenderer.class.php

Last commit: Fri Feb 17 02:02:18 2023 +0100	Jan Dankert	Refactoring: Script-context should be the same in all environments; New: DslPdf for creating PDF with scriptbox ;)
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 /** 36 * @var Pdf 37 */ 38 var $pdf; 39 40 var $url; 41 42 43 /** 44 * Rendert ein Dokument-Element. 45 * 46 * @param Object $child Element 47 * @return String 48 */ 49 function renderElement($child) 50 { 51 switch (strtolower(get_class($child))) { 52 case 'tableofcontentelement': 53 break; 54 55 case 'rawelement': 56 $this->pdf->Write(5, $child->src); 57 58 break; 59 60 case 'textelement': 61 62 $this->pdf->Write(5, $child->text, $this->url); 63 $this->url = ''; 64 break; 65 66 case 'footnoteelement': 67 break; 68 69 case 'macroelement': 70 break; 71 72 case 'codeelement': 73 $this->pdf->ln(10); 74 $this->pdf->SetFont('Courier', '', 12); 75 break; 76 77 case 'quoteelement': 78 $this->pdf->SetFont('Arial', 'I', 12); 79 break; 80 81 82 case 'paragraphelement': 83 $this->pdf->ln(10); 84 break; 85 86 case 'speechelement': 87 $this->pdf->SetFont('Arial', 'I', 12); 88 break; 89 90 case 'linebreakelement': 91 $this->pdf->ln(5); 92 break; 93 94 case 'linkelement': 95 $this->url = $child->getUrl(); 96 $this->pdf->SetTextColor(0, 0, 255); // Blau. 97 break; 98 99 case 'imageelement': 100 if (BaseObject::available($child->objectId)) { 101 $this->pdf->ln(5); 102 // Breite/oe�he des Bildes bestimmen. 103 $image = new Image($child->objectId); 104 105 $image->load(); 106 $image->write(); 107 $image->getImageSize(); 108 // $image->width; 109 // $image->height; 110 111 $this->pdf->Image($image->getCache()->getFilename(), $this->pdf->GetX(), $this->pdf->GetY(), 0, 0, $image->extension()); 112 $this->pdf->ln($image->height / 2.5); 113 $this->pdf->ln(5); 114 115 unset($image); 116 } 117 break; 118 119 case 'strongelement': 120 $this->pdf->SetFont('Arial', 'B', 12); 121 122 break; 123 124 case 'emphaticelement': 125 $this->pdf->SetFont('Arial', 'I', 12); 126 break; 127 128 case 'insertedelement': 129 $this->pdf->SetTextColor(0, 255, 0); 130 break; 131 132 case 'removedelement': 133 $this->pdf->SetTextColor(255, 0, 0); 134 break; 135 136 case 'headlineelement': 137 $this->pdf->ln(20 - (2 * $child->level)); 138 $this->pdf->SetFontSize(20 - (2 * $child->level)); 139 140 break; 141 142 case 'tableelement': 143 $this->pdf->ln(20); 144 break; 145 146 case 'tablelineelement': 147 $this->pdf->ln(20); 148 break; 149 150 case 'definitionlistelement': 151 //$this->pdf->ln(10); 152 break; 153 154 case 'definitionitemelement': 155 $this->pdf->ln(10); 156 if (!empty($child->key)) { 157 $this->pdf->SetFont('', 'U'); 158 $this->pdf->Write(5, $child->key); 159 $this->pdf->SetFont('', ''); 160 } 161 $this->pdf->Write(5, ': '); 162 163 case 'tablecellelement': 164 break; 165 166 case 'teletypeelement': 167 $this->pdf->SetFont('Courier', '', 12); 168 break; 169 170 case 'listelement': 171 $this->pdf->ln(5); 172 break; 173 174 case 'numberedlistelement': 175 $this->pdf->ln(5); 176 break; 177 178 case 'listentryelement': 179 $this->pdf->ln(5); 180 $this->pdf->Write(5, '- '); 181 break; 182 183 default: 184 break; 185 } 186 187 foreach ($child->children as $c) { 188 $this->renderElement($c); 189 } 190 191 $this->pdf->SetFont('Arial', '', 12); 192 $this->pdf->SetTextColor(0, 0, 0); 193 } 194 195 196 /** 197 * Rendering des Dokumentes.<br> 198 * 199 * @return String 200 */ 201 function render() 202 { 203 $this->pdf = new Pdf(); 204 $this->pdf->AddPage(); 205 $this->pdf->SetCreator(Startup::TITLE); 206 $this->pdf->SetFont('Arial', '', 12); 207 208 #$this->footnotes = array(); 209 210 foreach ($this->children as $child) 211 $this->renderElement($child); 212 213 #foreach( $this->footnotes as $child ) 214 # $this->renderElement( $child ); 215 216 return $this->pdf->Output(); 217 } 218 } 219 220 ?>
Download modules/wikiparser/renderer/PdfRenderer.class.php
History Fri, 17 Feb 2023 02:02:18 +0100 Jan Dankert Refactoring: Script-context should be the same in all environments; New: DslPdf for creating PDF with scriptbox ;) Sun, 1 Nov 2020 03:08:55 +0100 Jan Dankert Replaced the calls to "Configuration::rawConfig()" with the OO style calls; Cleanup LoginAction. Sat, 26 Sep 2020 13:11:23 +0200 Jan Dankert Refactoring: No global variables any more. All constants are capsulated by classes. Sat, 26 Sep 2020 10:32:02 +0200 Jan Dankert Refactoring: No global $conf array any more. Sat, 22 Feb 2020 22:45:05 +0100 Jan Dankert Refactoring: Enable Autoloading, Fix namespace structure. Sat, 11 May 2019 02:50:43 +0200 Jan Dankert Einbau eines dedizierten Caches. Es ist fraglich, ob dieser Cache überhaupt sinnvoll ist, da beim Anzeigen von BLOBs das HTTP-Caching zum Zuge kommt. Tue, 27 Nov 2018 22:08:58 +0100 Jan Dankert Fix: Richtige Klassen importieren. Fri, 29 Dec 2017 01:35:50 +0100 Jan Dankert Großes Refactoring: Neues Modul CMS-UI. Dieses enthält sämtliche Logik für die Bedienoberfläche. TODO: Modul CMS-API. Sat, 16 Dec 2017 23:41:50 +0100 Jan Dankert Der Wikiparser als eigenes Modul (ehem. 'textclasses').