Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | 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
218
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
219
								  $html = '<strong>Référentiel</strong> : ' . $obs['nom_referentiel'],
220
								  $border = 'LTR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
221
 
1655 raphael 222
		// famille
1664 raphael 223
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
1655 raphael 224
								  $html = '<strong>Famille</strong> : ' . $obs['famille'],
1664 raphael 225
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 226
 
227
 
1664 raphael 228
		// taxon
229
		$nom = $obs['nom_ret'];
230
		if($obs['certitude'] && stripos($obs['certitude'], 'certain') === false) {
231
			$nom .= ' ' . $obs['certitude'];
232
		}
233
		$this->pdf->writeHTMLCell($w = $width, $lh * 3.5, '',  '',
234
								  //$html = '<strong>Espèce</strong> : ' . self::elude('Espèce : ', $obs['nom_ret'], 2),
235
								  $html = $this->elude('<strong>Taxon</strong> : ' . $nom, 3),
236
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
237
 
238
		// collecteur
239
		// TODO: pseudo
240
		$limite_nom = 26;
241
		$prenom = $obs['prenom_utilisateur'];
242
		if(mb_strlen($prenom . ' ' . $obs['nom_utilisateur'], 'UTF-8') > $limite_nom) {
243
			$prenom = mb_substr($prenom, 0, 26 - mb_strlen($obs['nom_utilisateur'], 'UTF-8') - 1 /* espace */ - 1 /* … */, 'UTF-8') . '…';
244
			//var_dump($prenom);die;
245
		}
246
		$this->pdf->writeHTMLCell($w = $width - 25, '', '', '',
247
								  $html = '<strong>Collecteur</strong> : ' . $prenom . ' ' . $obs['nom_utilisateur'],
248
								  $border = 'L', $ln = 0, $fill = false, $reset = true, $align = 'L', $autopadding = true);
249
 
1655 raphael 250
		// N°: TODO: writeHTMLCell() semble bugger
1664 raphael 251
		$this->pdf->Cell($w = 25, '',
1655 raphael 252
						 $txt = 'N° : ' . $obs['id_observation'], //. sprintf("%04d", $obs['ordre'])
1664 raphael 253
						 $border = 'R', $ln = 1, $align = 'R', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
254
		/*$this->pdf->writeHTMLCell($w = 30, '', '', '',
1655 raphael 255
								  $html = '<strong>N°</strong> : ' . $obs['id_observation'], //. sprintf("%04d", $obs['ordre']),
1664 raphael 256
								  $border = 'R', $ln = 1, $fill = true, $reset = true, $align = 'L', $autopadding = true);*/
1655 raphael 257
 
1664 raphael 258
		// localité
259
		// TODO: département
260
		// TEST: Corse (2A, 2B)
261
		$info_dep = "<strong>Localité</strong> : %s";
262
		$donnees_dep = array($obs['zone_geo']);
263
		if($obs['ce_zone_geo']) {
264
			$info_dep .= " (%s)";
265
			if(strpos($obs['ce_zone_geo'], 'INSEE') !== false) $donnees_dep[] = preg_replace('/^[^\d]*(\d\d).*/', '\1', $obs['ce_zone_geo']);
266
			else $donnees_dep[] = $obs['ce_zone_geo'];
267
		}
1655 raphael 268
 
1664 raphael 269
		$info_loc = "%s, %s";
270
		$donnees_loc = array($obs['lieudit'], $obs['station']);
271
		if($obs['milieu']) {
272
			$info_loc .= " [%s]";
273
			$donnees_loc[] = $obs['milieu'];
274
		}
1655 raphael 275
		$this->pdf->writeHTMLCell($w = $width, $lh * 3.5, '', '',
276
								  //$html = "<strong>Localité</strong> : " .
277
								  //self::elude('Localité : ', sprintf("%s (%s)\n%s, %s [%s]", $obs['zone_geo'], $obs['ce_zone_geo'], $obs['lieudit'], $obs['station'], $obs['milieu'] ), 3),
278
								  // $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 279
								  $html = $this->elude(vsprintf($info_dep, $donnees_dep), 2) . "\n" .
280
								  $this->elude(vsprintf($info_loc, $donnees_loc), 2),
281
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 282
 
1664 raphael 283
		// lon/lat/alt
284
		$info_geo = '';
285
		$donnees = array();
286
		if($obs['latitude'] && $obs['longitude']) {
287
			$info_geo .= "%.5f N  /  %.5f E";
288
			array_push($donnees, $obs['latitude'], $obs['longitude']);
289
		}
290
		if($obs['altitude']) {
291
			$info_geo .= ", %dm";
292
			array_push($donnees, $obs['altitude']);
293
		}
1655 raphael 294
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
1664 raphael 295
								  $html = vsprintf("<strong>Lat. / Lon. , Alt.</strong> : " . $info_geo, $donnees),
296
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 297
 
298
		// commentaire
299
		$this->pdf->writeHTMLCell($w = $width, $lh * 4.5, '', '',
300
								  //$html = '<strong>Observation</strong> : ' . self::elude('Observation : ', $obs['commentaire']),
301
								  $html = self::elude('<strong>Observation</strong> : ' . $obs['commentaire'], 4),
1664 raphael 302
								  $border = 'LR', $ln = 1, $fill = false, $reset = true, $align = 'L', $autopadding = true);
1655 raphael 303
 
304
		// date
305
		$this->pdf->writeHTMLCell($w = $width, '', '', '',
1664 raphael 306
								  $html = '<strong>Date de récolte</strong> : ' . strftime("%d/%m/%Y", strtotime($obs['date_observation'])),
1655 raphael 307
								  $border = 'LBR', $ln = 1, $fill = false, $reset = true, $align = 'R', $autopadding = true);
308
 
309
	}
310
 
1652 raphael 311
	function docell($obs) {
312
		$this->pdf->setCellMargins(0,0,0,0);
313
 
314
		$this->pdf->Cell($w = 60, '',
315
						 $txt = 'Famille : ' . $obs['famille'],
1655 raphael 316
						 $border = 'LT', $ln = 0, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 317
 
318
		$this->pdf->Cell($w = 20, '',
319
						 $txt = 'N° : ' . $obs['id_observation'] /*. sprintf("%04d", $obs['ordre']) */,
1655 raphael 320
						 $border = 'TR', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 321
 
322
		$this->pdf->Cell($w = 80, '',
323
						 $txt = 'Espèce : ' . $obs['nom_ret'],
1655 raphael 324
						 $border = 'RL', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 325
 
326
		$this->pdf->Cell($w = 80, '',
327
						 $txt = 'Collecteur : ' . $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'],
1655 raphael 328
						 $border = 'RL', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 329
 
330
		$this->pdf->MultiCell(80, 20,
1655 raphael 331
							  $txt = sprintf("Localité : %s (%s)\n%s, %s", $obs['zone_geo'], $obs['ce_zone_geo'], $obs['lieudit'], $obs['station']),
332
							  $border = 'RL', 'L', 0, 1, '', '', true);
1652 raphael 333
 
334
		$this->pdf->Cell($w = 80, '',
335
						 $txt = sprintf("Latitude, Longitude : %s  /  %s", $obs['latitude'], $obs['longitude']),
1655 raphael 336
						 $border = 'RL', $ln = 1, $align = 'L', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 337
 
338
		$this->pdf->MultiCell(80, 20,
1655 raphael 339
							  $txt = 'Observation : ' . self::elude('Observation : ', $obs['commentaire']),
340
							  $border = 'RL', 'L', 0, 1, '', '', true);
1652 raphael 341
 
342
		$this->pdf->Cell($w = 80, '',
343
						 $txt = 'Date : ' . strftime("%d/%m/%Y", strtotime($obs['date_observation'])),
1655 raphael 344
						 $border = 'LBR', $ln = 1, $align = 'R', $fill = false, $link = false, $stretch = 1, $ignore_min_height = false, $calign = 'T', $valign = 'M');
1652 raphael 345
	}
346
 
347
 
1655 raphael 348
	// singe la propriété CSS3 "text-overflow" : "ellipsis"
349
	function elude_bis($intitule, $commentaire, $lignes = 3) {
1652 raphael 350
		// TODO: GetLineWidth, GetCharWidth()
1655 raphael 351
		$limite = $lignes /* lignes */ * 43 /* caractères */ - strlen($intitule);
1664 raphael 352
		if(mb_strlen($commentaire, 'UTF-8') < $limite) return $commentaire;
1655 raphael 353
		return mb_substr($commentaire, 0, $limite - 2) . '…';
1652 raphael 354
	}
355
 
356
 
357
	function export1($observations) {
358
		$pdf = &$this->pdf;
359
		// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0)
360
 
361
		$pdf->setEqualColumns(2);
362
 
363
		$i = 0;
364
		while($i < count($observations)) {
365
			$obs = $observations[$i];
366
 
367
			$pdf->selectColumn(0);
368
			// Multicell test
369
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
370
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
371
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);
372
			$pdf->Ln();
373
 
374
			$pdf->selectColumn(1);
375
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
376
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
377
			$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);
378
 
379
			$i += 6;
380
			if(isset($observations[$i])) $pdf->AddPage();
381
		}
382
	}
383
 
384
	static function doTemplate($obs) {
385
		$pattern =
386
<<<EOF
387
Famille: %s (%d)
388
Espèce: %s
389
Collecteur: %s
390
Localité: %s
391
Observation: %s	 Date: %s
392
EOF;
393
		return sprintf($pattern,
394
 
395
					   $obs['famille'],
396
					   $obs['ordre'],
397
					   $obs['nom_ret'],
398
					   $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'],
399
					   $obs['zone_geo'],
400
					   $obs['commentaire'],
401
					   strftime("%Y-%m-%d", strtotime($obs['date_observation']))
402
		);
403
 
404
	}
405
 
406
 
407
 
408
	function export2($observations) {
409
		$pdf = &$this->pdf;
410
 
411
		$pdf->setEqualColumns(2);
412
 
413
		$i = 0;
414
		$y = $pdf->getY();
415
		$x = $pdf->getX();
416
		while($i < count($observations)) {
417
			$obs = $observations[$i++];
418
 
419
			$pdf->selectColumn(0);
420
			// Multicell test
421
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 0, self::doHTMLTemplate($obs), 1, 0, 0, true);
422
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 1, self::doHTMLTemplate($obs), 1, 0, 0, true);
423
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 2, self::doHTMLTemplate($obs), 1, 0, 0, true);
424
			//$pdf->Ln();
425
 
426
			$pdf->selectColumn(1);
427
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 0, self::doHTMLTemplate($obs), 1, 1, 1, true);
428
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 1, self::doHTMLTemplate($obs), 1, 1, 1, true);
429
			$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 2, self::doHTMLTemplate($obs), 1, 1, 1, true);
430
 
431
			$i += 6;
432
			if(isset($observations[$i])) $pdf->AddPage();
433
		}
434
	}
435
 
436
	static function doHTMLTemplate($obs) {
437
		$pattern =
438
<<<EOF
439
<p>Famille: %s <span style="text-align: right">(%d)</span><br/>
440
Espèce: %s<br/>
441
Collecteur: %s<br/>
442
Localité: %s<br/>
443
Observation: %s	 Date: %s</p>
444
EOF;
445
		return sprintf($pattern,
446
 
447
					   $obs['famille'],
448
					   $obs['ordre'],
449
					   $obs['nom_ret'],
450
					   $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'],
451
					   $obs['zone_geo'],
452
					   $obs['commentaire'],
453
					   strftime("%Y-%m-%d", strtotime($obs['date_observation']))
454
		);
455
 
456
	}
457
 
458
}