web-dev-qa-db-fra.com

Joomla 3.8 PDF voir avec DomPDF

Je cherchais un moyen de sauvegarder une mise en page de mon composant personnalisé au format PDF.

J'ai essayé diverses bibliothèques JS/PHP. Ce que je voulais, c’était un support utf-8, des tableaux, des images correctement enregistrées dans le fichier pdf.

J'ai passé la dernière journée à essayer d'intégrer la bibliothèque DomPDF à mon composant. J'ai lu de nombreux guides et howtos sans succès.

Le problème majeur était que Joomla avait changé la bibliothèque Document Renderer après la version 3.8 (je ne suis pas à 100% relatif à la version) et à la dernière version de DomPDF qui n’exige plus le fichier de configuration [config.inc.php].

Dans les versions précédentes de Joomla, le guide suivant devrait fonctionner correctement: Création PDF vues

Donc, utiliser DomPDF dans la vue par défaut était un problème pour moi, car je voulais avoir l’option de pouvoir télécharger un lien en tant que PDF à partir de ma vue Liste et de ma vue Article.

Enfin, je l’ai fait en utilisant une vue brute et un nouveau fichier de présentation pour une sortie nette.

Je suis ouvert à toute correction, suggestion ou autre amélioration.

Merci

1
mixahlos
  1. Téléchargez la dernière version du DomPdf

  2. Dans le dossier Libraries, placez une copie du dossier dompdf de la version.

  3. Créez une copie du fichier de vue /components/mycom/views/item/view.html.php à /composants/mycom/views/item/view.raw.php

Supprimez tous les scripts, scripts et tout ce qui est inutile dans la vue brute. Cette vue sera uniquement une boîte de dialogue Enregistrer sous pour télécharger le fichier pdf.

  1. Créez une nouvelle présentation dans le dossier /components/mycom/views/item/tmpl nommé pdf.php avec le code suivant:

Le fichier n'aura rien à afficher, nous allons donc enregistrer toute la sortie dans une variable php.

defined('_JEXEC') or die('Restricted access');
require_once JPATH_LIBRARIES  . '/dompdf/autoload.inc.php';
use Dompdf\Dompdf;


$html ='<style type="text/css">';
$html .='/*place your css if any here*/';
$html .='</style>';

$html .='<h1>' . $this->item->title . '</h1>';
$html .='<div>';
$html .= $this->item->content; //or any other field you like
$html .='</div>';

$dompdf = new Dompdf();
$dompdf->set_option('isHtml5ParserEnabled', true);
$dompdf->setPaper('A4', 'portrait');
$dompdf->setBasePath(JPATH_LIBRARIES . '/dompdf');
$dompdf->loadHtml($html);
$dompdf->render();
$dompdf->output();

$filename = $this->item->alias . '.pdf';

$dompdf->stream($filename);

Ensuite, placez simplement un lien n'importe où dans votre fichier de mise en page /components/mycom/views/item/tmpl/default.php en utilisant un type brut pointant vers la nouvelle mise en page pdf.php

<a href="index.php?option=com_mycom&view=myview&type=raw&layout=pdf&id=<?php echo $this->item->id?>" target="_blank">Download PDF</a>
1
mixahlos