Subversion Repositories eFlore/Applications.cel

Rev

Rev 1684 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1652 raphael 1
<?php
2
 
1664 raphael 3
/**
4
* @category  PHP
5
* @package   jrest
6
* @author    Raphaël Droz <raphael@tela-botania.org>
7
* @copyright 2013 Tela-Botanica
8
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
9
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
*/
11
 
1652 raphael 12
// Include the main TCPDF library (search for installation path).
13
date_default_timezone_set("Europe/Paris");
14
require_once('tcpdf_config.php');
15
require_once('tcpdf/tcpdf.php');
16
 
17
Class GenerateurPDF {
18
 
19
	public $pdf;
20
 
21
	function GenerateurPDF($utilisateur = NULL) {
22
		// create new PDF document
23
		$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
24
 
25
		// set document information
26
		$pdf->SetCreator(PDF_CREATOR);
27
		$pdf->SetAuthor($utilisateur ? $utilisateur['prenom'] . ' ' . $utilisateur['nom'] : 'CEL - Tela Botanica');
28
		$pdf->SetTitle('Observations en étiquettes');
29
		$pdf->SetSubject('Étiquettes des observations');
30
		$pdf->SetKeywords('botaniques, observations, étiquettes, cel, tela-botanica');
31
 
32
		// set default header data
33
		// $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 005', PDF_HEADER_STRING);
34
 
35
		// set header and footer fonts
36
		// $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
37
		// $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
38
 
39
		// set default monospaced font
40
		$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
41
 
42
		// set margins
43
		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
44
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
45
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
46
 
47
		// set auto page breaks
48
		// $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
49
		$pdf->SetAutoPageBreak(FALSE, PDF_MARGIN_BOTTOM);
50
 
1655 raphael 51
		$pdf->SetFont('times', '', 11);
1652 raphael 52
		$pdf->setCellPaddings(1, 1, 1, 1);
53
		$pdf->setCellMargins(1, 1, 1, 1);
54
 
1655 raphael 55
		$pdf->AddPage();
56
		$pdf->setEqualColumns(2);
57
 
1652 raphael 58
		$this->pdf = $pdf;
59
	}
60
 
61
 
62
 
63
	function export($obs) {
64
		$pdf = &$this->pdf;
65
 
66
		$i = 0;
67
		while($i < count($obs)) {
68
			$pdf->selectColumn(0);
69
			// Multicell test
1655 raphael 70
			$this->doHTMLcell($obs[$i++]); if(!isset($obs[$i])) break;
1652 raphael 71
			$pdf->Ln();
1655 raphael 72
			$this->doHTMLcell($obs[$i++]);  if(!isset($obs[$i])) break;
1652 raphael 73
			$pdf->Ln();
1655 raphael 74
			$this->doHTMLcell($obs[$i++]); if(!isset($obs[$i])) break;
1652 raphael 75
			/*$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
76
			  $pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);*/
77
 
78
			$pdf->selectColumn(1);
1655 raphael 79
			$this->doHTMLcell($obs[$i++]); if(!isset($obs[$i])) break;
1652 raphael 80
			$pdf->Ln();
1655 raphael 81
			$this->doHTMLcell($obs[$i++]); if(!isset($obs[$i])) break;
1652 raphael 82
			$pdf->Ln();
1655 raphael 83
			$this->doHTMLcell($obs[$i++]); if(!isset($obs[$i])) break;
1652 raphael 84
			/*$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
85
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
86
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);*/
87
 
88
			if(isset($obs[$i])) $pdf->AddPage();
89
		}
90
	}
91
 
1655 raphael 92
	function getlinenb4($txt) {
93
		// store current object
94
		$this->pdf->startTransaction();
95
		// store starting values
96
		$start_y = $this->pdf->GetY();
97
		$start_page = $this->pdf->getPage();
98
 
99
		$this->pdf->MultiCell($this->column_width, $h=0, $txt, $border=0, $align='L', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
100
		$end_y = $this->pdf->GetY();
101
		$end_page = $this->pdf->getPage();
102
		// calculate height
103
		$height = 0;
104
		if ($end_page == $start_page) {
105
			$height = $end_y - $start_y;
106
		} else {
107
			for ($page=$start_page; $page <= $end_page; ++$page) {
108
				$this->setPage($page);
109
				if ($page == $start_page) {
110
					// first page
111
					$height = $this->pdf->h - $start_y - $this->pdf->bMargin;
112
				} elseif ($page == $end_page) {
113
					// last page
114
					$height = $end_y - $this->pdf->tMargin;
115
				} else {
116
					$height = $this->pdf->h - $this->pdf->tMargin - $this->bMargin;
117
				}
118
			}
119
		}
120
		// restore previous object
121
		$this->pdf = $this->pdf->rollbackTransaction();
122
		return $height;
123
	}
124
 
125
	function getlinenb3($txt) {
126
		return $this->pdf->getStringHeight($this->column_width, $txt);
127
	}
128
 
129
	function getlinenb2($txt) {
130
		//var_dump($line, $this->pdf->GetStringWidth($line));
131
		return ceil($this->pdf->GetStringWidth($txt)  / $this->column_width);
132
	}
133
 
134
	function getlinenb($txt) {
135
		return $this->pdf->getStringHeight('', $txt) / ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio());
136
	}
137
 
138
	// singe la propriété CSS3 "text-overflow" : "ellipsis"
139
	function elude($txt, $limite_lignes = 3) {
140
		// echo strlen($txt) . ' '.  $this->getlinenb($txt) . ' ' . $limite_lignes . "\n";
141
 
1661 aurelien 142
		$cell_paddings = $this->pdf->getCellPaddings();
143
		$marge = $cell_paddings['T'] + $cell_paddings['B'];
1655 raphael 144
		$line_height = $this->pdf->getStringHeight($this->column_width, "a") - $marge;
145
		if($limite_lignes > 1) {
146
			$lim = $line_height * $limite_lignes + $marge; // $line_height + ($line_height - $marge) * ($limite_lignes - 1);
147
		} else {
148
			$lim = $line_height + $marge;
149
		}
150
 
151
		while(strlen($txt) > 4 && ($nb = $this->getlinenb3(strip_tags($txt))) > $lim) {
152
			//echo "$nb / $line_height: $txt\n";
153
			// TODO: mb_internal_encoding()
154
			$txt = mb_substr($txt, 0, -4, 'UTF-8') . '…';
155
		}
156
		//echo "$txt: $nb / $limite_lignes \n";
157
		return $txt;
158
	}
159
 
160
 
161
	// TODO: affichage pays dans "localité"
1652 raphael 162
	// ORDER BY id_observation
163
	// italique pour nom d'espèce, mais pas auteur
1661 aurelien 164
	function doHTMLcell(&$obs) {
1655 raphael 165
		$this->pdf->setCellMargins(0,0,0,0);
166
		$width = $this->column_width = 98;
167
 
168
		//echo "cell_padding['T']: " . $this->pdf->getCellPaddings()['T'] . ", cell_padding['B']: " . $this->pdf->getCellPaddings()['B'] . "\n";
169
 
170
		$lh = $this->pdf->getFontSize() * $this->pdf->getCellHeightRatio();
171
		//$lh = $this->pdf->GetLineWidth();
172
 
173
		/*
174
		var_dump($this->pdf->GetLineWidth(),
175
				 $this->pdf->GetCharWidth("a"),
176
				 $this->pdf->getStringHeight(60, "Ê"),
177
				 $this->pdf->getHTMLFontUnits("plop"),
178
				 $this->pdf->GetStringWidth("aa"),
179
				 $lh,
180
 
181
				 5,
182
				 $this->getlinenb4("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum..."),
183
				 $this->elude("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum...", 5),
184
 
185
				 4,
186
				 $this->getlinenb4("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"),
187
				 $this->elude("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum...", 4),
188
 
189
				 3,
190
				 $this->getlinenb4("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet"),
191
				 $this->elude("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum...", 3),
192
 
193
				 2,
194
				 $this->getlinenb4("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore"),
195
				 $this->elude("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum...", 2),
196
 
197
				 1,
198
				 $this->getlinenb4("Observation : Lorem ipsum dolor sit amet, consectetur"),
199
				 $this->elude("Observation : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum...", 1)
200
		);
201
		die;
202
		*/
203
 
204
 
205
		/*		$str = '<strong>Observation</strong> : ' . $obs['commentaire'];
206
		echo $this->getlinenb(strip_tags($str)) . "\n";
207
		echo $this->getlinenb2(strip_tags($str)) . "\n";
208
		echo $this->pdf->getStringHeight($width, strip_tags($str)) . "\n";
209
		echo $this->pdf->getStringHeight($width, "a") . "\n";
210
		echo ( $this->pdf->getStringHeight($width, strip_tags($str)) / $this->pdf->getStringHeight($width, "a")) . "\n";
211
 
212
		die;*/
213
 
214
		// 3ème paramètre = '' equivalent à $this->pdf->getX()
215
		// 4ème paramètre = '' equivalent à $this->pdf->getY()
1664 raphael 216
 
217
		// référentiel
1682 raphael 218
		/* $this->pdf->writeHTMLCell($w = $width, '', '', '',
1664 raphael 219
								  $html = '<strong>Référentiel</strong> : ' . $obs['nom_referentiel'],
1682 raphael 220
								  $border = 'LTR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true); */
1664 raphael 221
 
1655 raphael 222
		// famille
1664 raphael 223
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
1682 raphael 224
								  $html = '<strong>Famille</strong> : ' . strtoupper($obs['famille']),
225
								  $border = 'LTR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 226
 
227
 
1682 raphael 228
		/*
1664 raphael 229
		// taxon
1682 raphael 230
		// la taille maximum en bdtfx est 115 caractères UTF-8 (num_nom: 101483)
231
		// SELECT num_nom, CONCAT(nom_sci, ' ', auteur) AS a, CHAR_LENGTH(CONCAT(nom_sci, ' ', auteur)) FROM bdtfx_v1_01 ORDER BY CHAR_LENGTH(a) DESC limit 2;
1676 raphael 232
		$nom = '<em>' . $obs['nom_ret'] . '</em>';
1664 raphael 233
		if($obs['certitude'] && stripos($obs['certitude'], 'certain') === false) {
1682 raphael 234
			$nom .= ' (' . $obs['certitude'] . ')';
1664 raphael 235
		}
236
		$this->pdf->writeHTMLCell($w = $width, $lh * 3.5, '',  '',
237
								  //$html = '<strong>Espèce</strong> : ' . self::elude('Espèce : ', $obs['nom_ret'], 2),
1676 raphael 238
								  //$html = $this->elude('<strong>Taxon</strong> : ' . $nom, 3),
1682 raphael 239
								  $html = '<strong>Taxon</strong> : ' . $nom, // on ne strip pas le nom de taxon, car pas plus de 3 lignes
1664 raphael 240
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1682 raphael 241
		*/
1664 raphael 242
 
1682 raphael 243
		// ou bien nom saisi...
244
		// la taille maximum dans cel_obs au 12/07/2013 est 112 caractères UTF-8 (id_observation: 787762)
245
		// SELECT id_observation, TRIM(nom_sel), CHAR_LENGTH(TRIM(nom_sel)) FROM cel_obs ORDER BY CHAR_LENGTH(TRIM(nom_sel)) DESC LIMIT 2;
246
		$nom = '<em>' . $obs['nom_sel'] . '</em>';
247
		if($obs['certitude'] && stripos($obs['certitude'], 'certain') === false) {
248
			$nom .= ' (' . $obs['certitude'] . ')';
249
		}
250
		$this->pdf->writeHTMLCell($w = $width, $lh * 3.5, '',  '',
251
								  //$html = '<strong>Espèce</strong> : ' . self::elude('Espèce : ', $obs['nom_ret'], 2),
252
								  //$html = $this->elude('<strong>Taxon</strong> : ' . $nom, 3),
253
								  $html = '<strong>Taxon</strong> : ' . mb_substr(trim($nom), 0, 115, 'UTF-8'), // on ne strip pas le nom sélectionné, car pas plus de 3 lignes, mais on assure la mise en page
254
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
255
 
1664 raphael 256
		// collecteur
257
		// TODO: pseudo
258
		$limite_nom = 26;
259
		$prenom = $obs['prenom_utilisateur'];
260
		if(mb_strlen($prenom . ' ' . $obs['nom_utilisateur'], 'UTF-8') > $limite_nom) {
261
			$prenom = mb_substr($prenom, 0, 26 - mb_strlen($obs['nom_utilisateur'], 'UTF-8') - 1 /* espace */ - 1 /* … */, 'UTF-8') . '…';
262
			//var_dump($prenom);die;
263
		}
264
		$this->pdf->writeHTMLCell($w = $width - 25, '', '', '',
265
								  $html = '<strong>Collecteur</strong> : ' . $prenom . ' ' . $obs['nom_utilisateur'],
266
								  $border = 'L', $ln = 0, $fill = false, $reset = true, $align = 'L', $autopadding = true);
267
 
1655 raphael 268
		// N°: TODO: writeHTMLCell() semble bugger
1664 raphael 269
		$this->pdf->Cell($w = 25, '',
1655 raphael 270
						 $txt = 'N° : ' . $obs['id_observation'], //. sprintf("%04d", $obs['ordre'])
1664 raphael 271
						 $border = 'R', $ln = 1, $align = 'R', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
272
		/*$this->pdf->writeHTMLCell($w = 30, '', '', '',
1655 raphael 273
								  $html = '<strong>N°</strong> : ' . $obs['id_observation'], //. sprintf("%04d", $obs['ordre']),
1664 raphael 274
								  $border = 'R', $ln = 1, $fill = true, $reset = true, $align = 'L', $autopadding = true);*/
1655 raphael 275
 
1664 raphael 276
		// localité
277
		// TODO: département
278
		// TEST: Corse (2A, 2B)
279
		$info_dep = "<strong>Localité</strong> : %s";
280
		$donnees_dep = array($obs['zone_geo']);
281
		if($obs['ce_zone_geo']) {
282
			$info_dep .= " (%s)";
283
			if(strpos($obs['ce_zone_geo'], 'INSEE') !== false) $donnees_dep[] = preg_replace('/^[^\d]*(\d\d).*/', '\1', $obs['ce_zone_geo']);
284
			else $donnees_dep[] = $obs['ce_zone_geo'];
285
		}
1655 raphael 286
 
1682 raphael 287
		$info_loc = '';
288
		$donnees_loc = array();
289
		if($obs['lieudit']) {
290
			$info_loc = "%s";
291
			$donnees_loc[] = $obs['lieudit'];
292
		}
293
		if($obs['station']) {
294
			$info_loc .= ", %s";
295
			$donnees_loc[] = $obs['station'];
296
		}
1664 raphael 297
		if($obs['milieu']) {
298
			$info_loc .= " [%s]";
299
			$donnees_loc[] = $obs['milieu'];
300
		}
1655 raphael 301
		$this->pdf->writeHTMLCell($w = $width, $lh * 3.5, '', '',
302
								  //$html = "<strong>Localité</strong> : " .
303
								  //self::elude('Localité : ', sprintf("%s (%s)\n%s, %s [%s]", $obs['zone_geo'], $obs['ce_zone_geo'], $obs['lieudit'], $obs['station'], $obs['milieu'] ), 3),
304
								  // $html = self::elude(sprintf("<strong>Localité</strong> : %s (%s)\n%s, %s [%s]", $obs['zone_geo'], $obs['ce_zone_geo'], $obs['lieudit'], $obs['station'], $obs['milieu']), 3),
1664 raphael 305
								  $html = $this->elude(vsprintf($info_dep, $donnees_dep), 2) . "\n" .
306
								  $this->elude(vsprintf($info_loc, $donnees_loc), 2),
307
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 308
 
1664 raphael 309
		// lon/lat/alt
310
		$info_geo = '';
311
		$donnees = array();
1682 raphael 312
		if($obs['latitude'] && $obs['longitude'] /* TODO: clean DB ! */ && $obs['latitude'] != 0.00000) {
1664 raphael 313
			$info_geo .= "%.5f N  /  %.5f E";
314
			array_push($donnees, $obs['latitude'], $obs['longitude']);
315
		}
316
		if($obs['altitude']) {
317
			$info_geo .= ", %dm";
318
			array_push($donnees, $obs['altitude']);
319
		}
1655 raphael 320
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
1664 raphael 321
								  $html = vsprintf("<strong>Lat. / Lon. , Alt.</strong> : " . $info_geo, $donnees),
322
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 323
 
324
		// commentaire
325
		$this->pdf->writeHTMLCell($w = $width, $lh * 4.5, '', '',
326
								  //$html = '<strong>Observation</strong> : ' . self::elude('Observation : ', $obs['commentaire']),
1676 raphael 327
								  $html = self::elude('<strong>Observations</strong> : ' . $obs['commentaire'], 4),
1664 raphael 328
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 329
 
1684 raphael 330
		// date, note: en 64 bits, strtotime() renvoi un entier négatif (!= FALSE) pour l'an 0
331
		if(strncmp("0000", $obs['date_observation'], 4) == 0) $temps = false;
332
		else $temps = strtotime($obs['date_observation']);
1655 raphael 333
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
1683 raphael 334
								  $html = '<strong>Date de récolte</strong> : ' . ($temps ? strftime("%d/%m/%Y", $temps) : '               '),
1655 raphael 335
								  $border = 'LBR', $ln = 1, $fill = false, $reset = true, $align = 'R', $autopadding = true);
336
 
337
	}
338
 
1652 raphael 339
	function docell($obs) {
340
		$this->pdf->setCellMargins(0,0,0,0);
341
 
342
		$this->pdf->Cell($w = 60, '',
343
						 $txt = 'Famille : ' . $obs['famille'],
1655 raphael 344
						 $border = 'LT', $ln = 0, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 345
 
346
		$this->pdf->Cell($w = 20, '',
347
						 $txt = 'N° : ' . $obs['id_observation'] /*. sprintf("%04d", $obs['ordre']) */,
1655 raphael 348
						 $border = 'TR', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 349
 
350
		$this->pdf->Cell($w = 80, '',
351
						 $txt = 'Espèce : ' . $obs['nom_ret'],
1655 raphael 352
						 $border = 'RL', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 353
 
354
		$this->pdf->Cell($w = 80, '',
355
						 $txt = 'Collecteur : ' . $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'],
1655 raphael 356
						 $border = 'RL', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 357
 
358
		$this->pdf->MultiCell(80, 20,
1655 raphael 359
							  $txt = sprintf("Localité : %s (%s)\n%s, %s", $obs['zone_geo'], $obs['ce_zone_geo'], $obs['lieudit'], $obs['station']),
360
							  $border = 'RL', 'L', 0, 1, '', '', true);
1652 raphael 361
 
362
		$this->pdf->Cell($w = 80, '',
363
						 $txt = sprintf("Latitude, Longitude : %s  /  %s", $obs['latitude'], $obs['longitude']),
1655 raphael 364
						 $border = 'RL', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 365
 
366
		$this->pdf->MultiCell(80, 20,
1655 raphael 367
							  $txt = 'Observation : ' . self::elude('Observation : ', $obs['commentaire']),
368
							  $border = 'RL', 'L', 0, 1, '', '', true);
1652 raphael 369
 
370
		$this->pdf->Cell($w = 80, '',
371
						 $txt = 'Date : ' . strftime("%d/%m/%Y", strtotime($obs['date_observation'])),
1655 raphael 372
						 $border = 'LBR', $ln = 1, $align = 'R', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 373
	}
374
 
375
 
1655 raphael 376
	// singe la propriété CSS3 "text-overflow" : "ellipsis"
377
	function elude_bis($intitule, $commentaire, $lignes = 3) {
1652 raphael 378
		// TODO: GetLineWidth, GetCharWidth()
1655 raphael 379
		$limite = $lignes /* lignes */ * 43 /* caractères */ - strlen($intitule);
1664 raphael 380
		if(mb_strlen($commentaire, 'UTF-8') < $limite) return $commentaire;
1655 raphael 381
		return mb_substr($commentaire, 0, $limite - 2) . '…';
1652 raphael 382
	}
383
 
384
 
385
	function export1($observations) {
386
		$pdf = &$this->pdf;
387
		// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0)
388
 
389
		$pdf->setEqualColumns(2);
390
 
391
		$i = 0;
392
		while($i < count($observations)) {
393
			$obs = $observations[$i];
394
 
395
			$pdf->selectColumn(0);
396
			// Multicell test
397
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
398
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
399
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
400
			$pdf->Ln();
401
 
402
			$pdf->selectColumn(1);
403
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
404
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
405
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
406
 
407
			$i += 6;
408
			if(isset($observations[$i])) $pdf->AddPage();
409
		}
410
	}
411
 
412
	static function doTemplate($obs) {
413
		$pattern =
414
<<<EOF
415
Famille: %s (%d)
416
Espèce: %s
417
Collecteur: %s
418
Localité: %s
419
Observation: %s	 Date: %s
420
EOF;
421
		return sprintf($pattern,
422
 
423
					   $obs['famille'],
424
					   $obs['ordre'],
425
					   $obs['nom_ret'],
426
					   $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'],
427
					   $obs['zone_geo'],
428
					   $obs['commentaire'],
429
					   strftime("%Y-%m-%d", strtotime($obs['date_observation']))
430
		);
431
 
432
	}
433
 
434
 
435
 
436
	function export2($observations) {
437
		$pdf = &$this->pdf;
438
 
439
		$pdf->setEqualColumns(2);
440
 
441
		$i = 0;
442
		$y = $pdf->getY();
443
		$x = $pdf->getX();
444
		while($i < count($observations)) {
445
			$obs = $observations[$i++];
446
 
447
			$pdf->selectColumn(0);
448
			// Multicell test
449
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 0, self::doHTMLTemplate($obs), 1, 0, 0, true);
450
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 1, self::doHTMLTemplate($obs), 1, 0, 0, true);
451
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 2, self::doHTMLTemplate($obs), 1, 0, 0, true);
452
			//$pdf->Ln();
453
 
454
			$pdf->selectColumn(1);
455
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 0, self::doHTMLTemplate($obs), 1, 1, 1, true);
456
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 1, self::doHTMLTemplate($obs), 1, 1, 1, true);
457
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 2, self::doHTMLTemplate($obs), 1, 1, 1, true);
458
 
459
			$i += 6;
460
			if(isset($observations[$i])) $pdf->AddPage();
461
		}
462
	}
463
 
464
	static function doHTMLTemplate($obs) {
465
		$pattern =
466
<<<EOF
467
<p>Famille: %s <span style="text-align: right">(%d)</span><br/>
468
Espèce: %s<br/>
469
Collecteur: %s<br/>
470
Localité: %s<br/>
471
Observation: %s	 Date: %s</p>
472
EOF;
473
		return sprintf($pattern,
474
 
475
					   $obs['famille'],
476
					   $obs['ordre'],
477
					   $obs['nom_ret'],
478
					   $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'],
479
					   $obs['zone_geo'],
480
					   $obs['commentaire'],
481
					   strftime("%Y-%m-%d", strtotime($obs['date_observation']))
482
		);
483
 
484
	}
485
 
486
}