New file |
0,0 → 1,302 |
<?php |
|
// Include the main TCPDF library (search for installation path). |
date_default_timezone_set("Europe/Paris"); |
require_once('tcpdf_config.php'); |
require_once('tcpdf/tcpdf.php'); |
|
Class GenerateurPDF { |
|
public $pdf; |
|
function GenerateurPDF($utilisateur = NULL) { |
// create new PDF document |
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); |
|
// set document information |
$pdf->SetCreator(PDF_CREATOR); |
$pdf->SetAuthor($utilisateur ? $utilisateur['prenom'] . ' ' . $utilisateur['nom'] : 'CEL - Tela Botanica'); |
$pdf->SetTitle('Observations en étiquettes'); |
$pdf->SetSubject('Étiquettes des observations'); |
$pdf->SetKeywords('botaniques, observations, étiquettes, cel, tela-botanica'); |
|
// set default header data |
// $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 005', PDF_HEADER_STRING); |
|
// set header and footer fonts |
// $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); |
// $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); |
|
// set default monospaced font |
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); |
|
// set margins |
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); |
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); |
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); |
|
// set auto page breaks |
// $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); |
$pdf->SetAutoPageBreak(FALSE, PDF_MARGIN_BOTTOM); |
|
$pdf->SetFont('times', '', 12); |
$pdf->setCellPaddings(1, 1, 1, 1); |
$pdf->setCellMargins(1, 1, 1, 1); |
|
$this->pdf = $pdf; |
} |
|
|
|
function export($obs) { |
$pdf = &$this->pdf; |
$pdf->AddPage(); |
$pdf->setEqualColumns(2); |
|
$i = 0; |
while($i < count($obs)) { |
$pdf->selectColumn(0); |
// Multicell test |
$this->docell($obs[$i++]); if(!isset($obs[$i])) break; |
$pdf->Ln(); |
$this->docell($obs[$i++]); if(!isset($obs[$i])) break; |
$pdf->Ln(); |
$this->docell($obs[$i++]); if(!isset($obs[$i])) break; |
/*$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true);*/ |
|
$pdf->selectColumn(1); |
$this->docell($obs[$i++]); if(!isset($obs[$i])) break; |
$pdf->Ln(); |
$this->docell($obs[$i++]); if(!isset($obs[$i])) break; |
$pdf->Ln(); |
$this->docell($obs[$i++]); if(!isset($obs[$i])) break; |
/*$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true);*/ |
|
if(isset($obs[$i])) $pdf->AddPage(); |
} |
} |
|
// TODO: test plus grand nom d'espèce |
// ORDER BY id_observation |
// intitulé en gras |
// italique pour nom d'espèce, mais pas auteur |
// supprimer les lignes |
function docell($obs) { |
$this->pdf->setCellMargins(0,0,0,0); |
|
$this->pdf->Cell($w = 60, '', |
$txt = 'Famille : ' . $obs['famille'], |
$border = 1, |
$ln = 0, |
$align = 'L', |
$fill = false, |
$link = false, |
$stretch = 1, |
$ignore_min_height = false, |
$calign = 'T', |
$valign = 'M'); |
|
$this->pdf->Cell($w = 20, '', |
$txt = 'N° : ' . $obs['id_observation'] /*. sprintf("%04d", $obs['ordre']) */, |
$border = 1, |
$ln = 1, |
$align = 'L', |
$fill = false, |
$link = false, |
$stretch = 1, |
$ignore_min_height = false, |
$calign = 'T', |
$valign = 'M'); |
|
$this->pdf->Cell($w = 80, '', |
$txt = 'Espèce : ' . $obs['nom_ret'], |
$border = 1, |
$ln = 1, |
$align = 'L', |
$fill = false, |
$link = false, |
$stretch = 1, |
$ignore_min_height = false, |
$calign = 'T', |
$valign = 'M'); |
|
$this->pdf->Cell($w = 80, '', |
$txt = 'Collecteur : ' . $obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'], |
$border = 1, |
$ln = 1, |
$align = 'L', |
$fill = false, |
$link = false, |
$stretch = 1, |
$ignore_min_height = false, |
$calign = 'T', |
$valign = 'M'); |
|
$this->pdf->MultiCell(80, 20, |
$txt = sprintf("Localité : %s (%s)\n%s, %s", |
$obs['zone_geo'], |
$obs['ce_zone_geo'], |
$obs['lieudit'], |
$obs['station']), |
1, |
'L', |
0, |
1, |
'', |
'', |
true); |
|
$this->pdf->Cell($w = 80, '', |
$txt = sprintf("Latitude, Longitude : %s / %s", $obs['latitude'], $obs['longitude']), |
$border = 1, |
$ln = 1, |
$align = 'L', |
$fill = false, |
$link = false, |
$stretch = 1, |
$ignore_min_height = false, |
$calign = 'T', |
$valign = 'M'); |
|
$this->pdf->MultiCell(80, 20, |
$txt = self::coupeCommentaire("Observation : ", $obs['commentaire']), |
1, |
'L', |
0, |
1, |
'', |
'', |
true); |
|
$this->pdf->Cell($w = 80, '', |
$txt = 'Date : ' . strftime("%d/%m/%Y", strtotime($obs['date_observation'])), |
$border = 1, |
$ln = 1, |
$align = 'R', |
$fill = false, |
$link = false, |
$stretch = 1, |
$ignore_min_height = false, |
$calign = 'T', |
$valign = 'M'); |
} |
|
|
|
|
|
|
|
function coupeCommentaire($intitule, $commentaire) { |
// TODO: GetLineWidth, GetCharWidth() |
$limite = 3 /* lignes */ * 43 /* caractères */ - strlen($intitule); |
if(mb_strlen($commentaire) < $limite) return 'Observation : ' . $commentaire; |
return 'Observation : ' . mb_substr($commentaire, 0, $limite - 3) . '...'; |
} |
|
|
function export1($observations) { |
$pdf = &$this->pdf; |
// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) |
|
$pdf->setEqualColumns(2); |
|
$i = 0; |
while($i < count($observations)) { |
$obs = $observations[$i]; |
|
$pdf->selectColumn(0); |
// Multicell test |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 1, 1, '', '', true); |
$pdf->Ln(); |
|
$pdf->selectColumn(1); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true); |
$pdf->MultiCell(0, 25, self::doTemplate($obs), 1, 'L', 0, 1, '', '', true); |
|
$i += 6; |
if(isset($observations[$i])) $pdf->AddPage(); |
} |
} |
|
static function doTemplate($obs) { |
$pattern = |
<<<EOF |
Famille: %s (%d) |
Espèce: %s |
Collecteur: %s |
Localité: %s |
Observation: %s Date: %s |
EOF; |
return sprintf($pattern, |
|
$obs['famille'], |
$obs['ordre'], |
$obs['nom_ret'], |
$obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'], |
$obs['zone_geo'], |
$obs['commentaire'], |
strftime("%Y-%m-%d", strtotime($obs['date_observation'])) |
); |
|
} |
|
|
|
function export2($observations) { |
$pdf = &$this->pdf; |
|
$pdf->setEqualColumns(2); |
|
$i = 0; |
$y = $pdf->getY(); |
$x = $pdf->getX(); |
while($i < count($observations)) { |
$obs = $observations[$i++]; |
|
$pdf->selectColumn(0); |
// Multicell test |
$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 0, self::doHTMLTemplate($obs), 1, 0, 0, true); |
$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 1, self::doHTMLTemplate($obs), 1, 0, 0, true); |
$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 2, self::doHTMLTemplate($obs), 1, 0, 0, true); |
//$pdf->Ln(); |
|
$pdf->selectColumn(1); |
$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 0, self::doHTMLTemplate($obs), 1, 1, 1, true); |
$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 1, self::doHTMLTemplate($obs), 1, 1, 1, true); |
$pdf->writeHTMLCell(0, 25, $x, $y + 25 * 2, self::doHTMLTemplate($obs), 1, 1, 1, true); |
|
$i += 6; |
if(isset($observations[$i])) $pdf->AddPage(); |
} |
} |
|
static function doHTMLTemplate($obs) { |
$pattern = |
<<<EOF |
<p>Famille: %s <span style="text-align: right">(%d)</span><br/> |
Espèce: %s<br/> |
Collecteur: %s<br/> |
Localité: %s<br/> |
Observation: %s Date: %s</p> |
EOF; |
return sprintf($pattern, |
|
$obs['famille'], |
$obs['ordre'], |
$obs['nom_ret'], |
$obs['prenom_utilisateur'] . ' ' . $obs['nom_utilisateur'], |
$obs['zone_geo'], |
$obs['commentaire'], |
strftime("%Y-%m-%d", strtotime($obs['date_observation'])) |
); |
|
} |
|
} |