Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1651 → Rev 1652

/trunk/jrest/services/tcpdf_config.php
New file
0,0 → 1,220
<?php
//============================================================+
// File name : tcpdf_config.php
// Begin : 2004-06-11
// Last Update : 2013-05-16
//
// Description : Configuration file for TCPDF.
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
// -------------------------------------------------------------------
// Copyright (C) 2004-2013 Nicola Asuni - Tecnick.com LTD
//
// This file is part of TCPDF software library.
//
// TCPDF is free software: you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// TCPDF is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with TCPDF. If not, see <http://www.gnu.org/licenses/>.
//
// See LICENSE.TXT file for more information.
//============================================================+
 
/**
* Configuration file for TCPDF.
* @author Nicola Asuni
* @package com.tecnick.tcpdf
* @version 4.9.005
* @since 2004-10-27
*/
 
// If you define the constant K_TCPDF_EXTERNAL_CONFIG, the following settings will be ignored.
define('K_TCPDF_EXTERNAL_CONFIG', TRUE);
 
/**
* Installation path (/var/www/tcpdf/).
* By default it is automatically calculated but you can also set it as a fixed string to improve performances.
*/
//define ('K_PATH_MAIN', '');
 
/**
* URL path to tcpdf installation folder (http://localhost/tcpdf/).
* By default it is automatically set but you can also set it as a fixed string to improve performances.
*/
//define ('K_PATH_URL', '');
 
/**
* Path for PDF fonts.
* By default it is automatically set but you can also set it as a fixed string to improve performances.
*/
//define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/');
 
/**
* Default images directory.
* By default it is automatically set but you can also set it as a fixed string to improve performances.
*/
//define ('K_PATH_IMAGES', '');
 
/**
* Deafult image logo used be the default Header() method.
* Please set here your own logo or an empty string to disable it.
*/
//define ('PDF_HEADER_LOGO', '');
 
/**
* Header logo image width in user units.
*/
//define ('PDF_HEADER_LOGO_WIDTH', 0);
 
/**
* Cache directory for temporary files (full path).
*/
define ('K_PATH_CACHE', sys_get_temp_dir().'/');
 
/**
* Generic name for a blank image.
*/
define ('K_BLANK_IMAGE', '_blank.png');
 
/**
* Page format.
*/
define ('PDF_PAGE_FORMAT', 'A4');
 
/**
* Page orientation (P=portrait, L=landscape).
*/
define ('PDF_PAGE_ORIENTATION', 'P');
 
/**
* Document creator.
*/
define ('PDF_CREATOR', 'TCPDF');
 
/**
* Document author.
*/
define ('PDF_AUTHOR', 'TCPDF');
 
/**
* Header title.
*/
define ('PDF_HEADER_TITLE', 'TCPDF Example');
 
/**
* Header description string.
*/
define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org");
 
/**
* Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch].
*/
define ('PDF_UNIT', 'mm');
 
/**
* Header margin.
*/
define ('PDF_MARGIN_HEADER', 5);
 
/**
* Footer margin.
*/
define ('PDF_MARGIN_FOOTER', 10);
 
/**
* Top margin.
*/
define ('PDF_MARGIN_TOP', 27);
 
/**
* Bottom margin.
*/
define ('PDF_MARGIN_BOTTOM', 25);
 
/**
* Left margin.
*/
define ('PDF_MARGIN_LEFT', 15);
 
/**
* Right margin.
*/
define ('PDF_MARGIN_RIGHT', 15);
 
/**
* Default main font name.
*/
define ('PDF_FONT_NAME_MAIN', 'helvetica');
 
/**
* Default main font size.
*/
define ('PDF_FONT_SIZE_MAIN', 10);
 
/**
* Default data font name.
*/
define ('PDF_FONT_NAME_DATA', 'helvetica');
 
/**
* Default data font size.
*/
define ('PDF_FONT_SIZE_DATA', 8);
 
/**
* Default monospaced font name.
*/
define ('PDF_FONT_MONOSPACED', 'courier');
 
/**
* Ratio used to adjust the conversion of pixels to user units.
*/
define ('PDF_IMAGE_SCALE_RATIO', 1.25);
 
/**
* Magnification factor for titles.
*/
define('HEAD_MAGNIFICATION', 1.1);
 
/**
* Height of cell respect font height.
*/
define('K_CELL_HEIGHT_RATIO', 1.25);
 
/**
* Title magnification respect main font size.
*/
define('K_TITLE_MAGNIFICATION', 1.3);
 
/**
* Reduction factor for small font.
*/
define('K_SMALL_RATIO', 2/3);
 
/**
* Set to true to enable the special procedure used to avoid the overlappind of symbols on Thai language.
*/
define('K_THAI_TOPCHARS', true);
 
/**
* If true allows to call TCPDF methods using HTML syntax
* IMPORTANT: For security reason, disable this feature if you are printing user HTML content.
*/
define('K_TCPDF_CALLS_IN_HTML', true);
 
/**
* If true adn PHP version is greater than 5, then the Error() method throw new exception instead of terminating the execution.
*/
define('K_TCPDF_THROW_EXCEPTION_ERROR', false);
 
//============================================================+
// END OF FILE
//============================================================+
/trunk/jrest/services/GenerateurPDF.php
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']))
);
}
 
}