Subversion Repositories eFlore/Applications.cel

Rev

Rev 2462 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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