Concaténer des documents pdf en php

Lors de développement d’applications on peut être amené à assembler différents documents pdf, ajouter des conditions générales de ventes à une facture, une annexe à des documents techniques …

Je vous propose deux solutions pour assembler des documents pdf.
La première utilise l’interpréteur PostScript libre Ghostscript.
La deuxième utilise la classe php FPDI qui permet d’intégrer importer des documents pdf conjointement avec la classe FPDF.

1 – Utilisation de Ghostscript
On lance une commande système gs avec la la fonction php exec qui va assembler les fichiers
gs : la commande Ghostscript , gs -h pour avoir une aide sur la commande
-dBatch : Provoque la fermeture de Ghostscript après le traitement de tous les fichiers nommés dans la commande.
-dNOPAUSE : Désactive l’invite et la pause à la fin de chaque page
-sDEVICE=pdfwrite : Défini le format de sortie au format pdf , -sDEVICE=jpeg pour créer une image au format jpeg …
-sOutputFile=fichierAssemble.pdf : le nom du fichier créé
delta1.pdf delta2.pdf … les fichiers à assembler


exec('gs -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=fichierAssemble.pdf -dBATCH  delta1.pdf delta2.pdf'); 

2 – Utilisation de la classe FPDI
FPDI est une classe utilisée conjointement avec la célèbre classe fpdf qui permet de créer des fichiers pdf.
Télécharger FPDI et FPDF_TPL en suivant ce lien
Télécharger FPDF en suivant ce lien

Voici une petit exemple, le programme assemble deux fichiers pdf, et ajoute une nouvelle page d’annexe dynamiquement.


// tester sous php5
require_once('fpdf/fpdf.php');
require_once('fpdi/fpdi.php');

$pdf = new FPDI();

ajouteFichier($pdf,"pdf/delta1.pdf");
ajouteFichier($pdf,"pdf/delta2.pdf");

$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->SetTextColor(50,50,50);
$pdf->Cell(0,10,'Nouvelle Page Annexe',1,1,'C');

$pdf->Output('nouveau_fichier.pdf','F');

function ajouteFichier($pdf,$file)
{
$nbPage = $pdf->setSourceFile($file);
for ($i = 1; $i <= $nbPage; $i++) {
	$tplidx = $pdf->ImportPage($i);
	$size = $pdf->getTemplatesize($tplidx);
	$pdf->AddPage('P', array($size['w'], $size['h']));
	$pdf->useTemplate($tplidx);
	}
}

Pour aller plus loin :

Manuel d’utilisation de Ghostscript
Manuel de Fpdf

Problème avec les Gadgets

Voici un problème que j’ai rencontré avec les gadgets sous Windows 7.
Pour ouvrir la fenêtre des Gadgets, Click droit sur le bureau puis dans le menu contextuel sélectionner Gadgets.
Le programme de gestion des gadgets ne s’ouvre pas même en passant par le panneau de configuration.

La solution qui a marché a consisté tout simplement à arrêter le processus sidebar.exe.

Sous Windows 7 , pour accéder directement au gestionnaire des tâches, vous pouvez utilisez la combinaison CTRL + MAJ + ESC.
Puis onglet Processus pour accèder au processus en cours d’exécution. Sélectionner sidebar.exe puis click sur le bouton Arrêter le processus.

Ensuite Click droit sur le bureau puis dans le menu contextuel sélectionner Gadgets et là le programme s’ouvre normalement.

Doublon colonne mysql

Rechercher des doublons d’une colonne ou valeurs identiques sur plusieurs colonnes dans une table mysql. Imaginons une table salaries sur laquelle on souhaite trouver toutes les personnes ayant le même nom et prénom


mysql> select prenom,nom,count(prenom) as doublon
FROM `salaries`
group by prenom,nom having doublon>1

La clause GROUP BY prenom,non permet de faire un regroupement par prenom et nom
COUNT(prenom) AS doublon affecte l’alias doublon avec le nombre total de prenom,nom trouvé pour chaque groupement
HAVING doublon>1 filtre en intégrant que les prenom,nom en doublon

Convertion de type Mysql

La fonction CAST permet de convertir une donnée d’un type en un autre
CAST(expr AS type)

mysql> SELECT CAST('123;' AS SIGNED) ;
-> 123

Exemple d’utilsation de la fonction CAST pour rechercher les valeurs numériques distinctes d’une colonne de type varchar.

mysql> SELECT rowid,tech_id,an FROM salaire ;

+---------+---------+-------+
| rowid   | tech_id | an    |
+---------+---------+-------+
|    1    | 12      |  09   |
|    2    | 12;     |  10   |
|    3    | A       |       |
|    4    | 9       |  10   |
|    5    | 10      |  09   |
|    6    | 9       |  09   |
|    7    | 10;     |  10   |
+---------+---------+-------+

mysql> SELECT DISTINCT (
CAST( tech_id AS SIGNED )
)
FROM salaire
WHERE CAST( tech_id AS SIGNED ) !=0
ORDER BY CAST( tech_id AS SIGNED ) 

-> 9
-> 10
-> 12

Adresse ip serveur

Il peut être utile de déterminer l’adresse ip du serveur qui héberge un site internet depuis un script php (pour renseigner une base de données d’un annuaire par exemple). Il n’existe pas pour l’instant de fonction php permettant de trouver l’adresse ip d’un serveur hébergeant un nom de domaine.

Pour trouver l’adresse ip du serveur à partir d’un script php, nous allons utiliser la commande système ping.


$domaine = 'www.exalead.fr';
echo $domaine.' --> adresse ip :'.getIpAddress($domaine);

function getIpAddress($domainName)
	{
	if(!verifierDomaine($domainName)) {return -1 ;}

	if( substr(strtolower(PHP_OS),0,3) == 'win' ) {
	// ping syntaxe sous le système d'exploitation Microsoft Windows
	$commande = "ping $domainName -n 1 -w 1000" ;
	} else {
	// ping syntaxe sous le système d'exploitation Linux
	$commande = "ping $domainName -c 1 -w 1" ;
	}

	exec($commande,$tableau) ;	

	if(isset($tableau[1])) {
		if(preg_match('/([0-9]{1,3})(\.)([0-9]{1,3})(\.)([0-9]{1,3})(\.)([0-9]{1,3})/',$tableau[1],$regs)) {
			return $regs[0];
			}
		} else {
			// serveur ne ping pas, indisponible ou inexistant
		return -2 ;
		}

	return -3 ;
	}

function VerifierDomaine($adresse)
        {
        $Syntaxe='#^[\w]+[\w.-]+\.[a-zA-Z]{2,6}$#';
        return (preg_match($Syntaxe,$adresse))?true:false;
        }

Bonjour tout le monde !

Ceci est mon premier article. Ce blog a pour objectif de vous faire partager quelques retours d’expérience sur des développements web.