Bonjour,
Pour corriger le problème de génération des PDF quand il y a des images, j'ai installé une autre librairie (HTML2PDF à la place de FPDF).
Par contre HTML2PDF est très chiant sur la mise en forme html, la moindre balise non fermée, ou la moindre image inexistante, et c'est la page blanche. C'est à savoir tout de même ;).
Il ne gère à priori pas non plus les URL absolues (corrigé plus bas)
Donc pour ceux que ça intéresse voici la procédure :
-Télécharger la librairie HTML2PDF sur le site
http://html2pdf.fr/ et la copier dans le module news (nom du répertoire html2pdf)
-Fichier makepdf.php, après ces deux lignes :
$content = $myts->undoHtmlSpecialChars($hometext) . '<br /><br />' . $myts->undoHtmlSpecialChars($bodytext);
$content = str_replace('[pagebreak]','<br /><br />',$content);
Rajouter ces lignes :
Pour réécrire les BR mal écrits... :
$content = str_replace('<BR>','<br />',$content);
$content = str_replace('<br>','<br />',$content);
Pour remplacer les balises non gérées par des balises span :
$content = str_replace('<sous_titre_article>','<span>',$content);
$content = str_replace('</sous_titre_article>','</span>',$content);
$content = str_replace('<caption>','<span>',$content);
$content = str_replace('</caption>','</span>',$content);
Pour remplacer l'URL absolue par l'URL relative (en fonction de votre cas bien sur à adapter) :
$content = str_replace( '/uploads/','../../uploads/',$content);
Gestion de l'encodage utf8
if (!is_utf8($content)){
$content = utf8_encode($content);
}
Mettre en commentaire à partir de $pdf=new PDF(); jusqu'à $pdf->Output();
Mettre ce code à la place :
$html_pdf .= $pdf_config['slogan'];
$html_pdf .= "<br/><hr/>";
$html_pdf .= $pdf_data['title'];
if ($pdf_data['subtitle']<>''){
$html_pdf .= " ".$pdf_data['subtitle'];
}
if ($pdf_data['subsubtitle']<>'') {
$html_pdf .= " ".$pdf_data['subsubtitle'];
}
$html_pdf .= '<br/>';
$out=NEWS_PDF_AUTHOR.': ';
$out.=$pdf_data['author'];
$html_pdf .= $out.'<br/>';
$out=NEWS_PDF_DATE;
$out.=$pdf_data['date'];
$html_pdf .= $out;
$html_pdf .= "<hr/><br/>";
$html_pdf .= $pdf_data['content'];
createPDF($html_pdf ,$pdf_data['filename']);
Vous pouvez bien sur adapter le contenu de la variable $html_pdf.
- Fichier include/functions.php
Ajouter les fonctions suivantes :
function createPDF( $content, $nomFichier ) {
global $xoopsModule;
require(XOOPS_ROOT_PATH.'/modules/'.$xoopsModule->dirname().'/html2pdf/html2pdf.class.php');
//Nom du fichier pour le téléchargement
$nomFichier = str_replace(" ","_",$nomFichier);
$nomFichier .= ".pdf";
//Création du PDF
$html2pdf = new HTML2PDF('P','A4','fr',true,'UTF-8',array(5, 5, 5, 8));
$html2pdf->WriteHTML($content);
ob_end_clean();
$html2pdf->Output($nomFichier,'D');
}
function is_utf8($string) {
return !strlen(
preg_replace(
',[x09x0Ax0Dx20-x7E]' # ASCII
. '|[xC2-xDF][x80-xBF]' # non-overlong 2-byte
. '|xE0[xA0-xBF][x80-xBF]' # excluding overlongs
. '|[xE1-xECxEExEF][x80-xBF]{2}' # straight 3-byte
. '|xED[x80-x9F][x80-xBF]' # excluding surrogates
. '|xF0[x90-xBF][x80-xBF]{2}' # planes 1-3
. '|[xF1-xF3][x80-xBF]{3}' # planes 4-15
. '|xF4[x80-x8F][x80-xBF]{2}' # plane 16
. ',sS',
'', $string));
}
Voilà, par contre ça serait pas mal de résoudre le problème des url absolues, si quelqu'un a une idée n'hésitez pas à me la communiquer, merci d'avance.
Bonne journée,
Séverine