Afficher un contenu en pdf

Réduire
Ce sujet est fermé.
X
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] Afficher un contenu en pdf

    Bonjour,

    En Joomla 2.5, il existait une manière très simple d'exporter un contenu dans un pdf :
    Create a PDF view for your component

    Then for any component you wish to create a pdf view for you should
    • copy the view's view.html.php file and rename it to view.pdf.php.

    E.g. to make a PDF view of an article, copy:
    components/com_content/views/article/view.html.php
    and rename it to:
    components/com_content/views/article/view.pdf.php
    Then to view a pdf article you need to append &format=pdf to your articles URL.
    E.g.




    En Joomla 3.5, l'option de ligne de commande "format=pdf" bogue.

    Avez-vous des informations ?
    Yann

  • #2
    Re : Afficher un contenu en pdf

    Salut
    As-tu regardé phoca pdf http://www.phoca.cz/phocapdf
    Auto-entrepreneur spécialiste Joomla https://www.stylitek.com

    Joomladay 2023 https://www.joomladay.fr/ 2 jours à ne pas manquer

    Commentaire


    • #3
      Re : Afficher un contenu en pdf

      Bonjour,

      La procédure que vous décrivez n'est pas aussi simple que ça....https://docs.joomla.org/J2.5:Creating_PDF_views

      Il faut copier la librairie domPDF, copier des répertoires html en pdf ,.... et, après, vous avez une chance que cela marche, s'il n'y a pas trop d'incompatibilités ou de fichiers déplacés.

      Par exemple, dans le fichier pdf.php que vous avez créé le require doit être modifié pour devenir
      Code:
      require_once(JPATH_LIBRARIES .'/joomla/document/html.php');
      Mais, je ne suis pas allé plus loin pour l'instant.

      Pascal
      If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

      Commentaire


      • #4
        Re : Afficher un contenu en pdf

        Envoyé par toffffe Voir le message
        Salut
        As-tu regardé phoca pdf http://www.phoca.cz/phocapdf
        Chez moi, phocapdf est méga buggé (J3.5.1, composant + plugins system et content installés et publiés)...
        probable incompatibilité avec ma version php (3.5)
        Me renvoie des "fatal error" en série, quelle que soit le paramétrage...
        Jamais pu sortir le moindre pdf...
        Je crois bien que cette extension n'a pas été mise à jour depuis 2015 (et même courant 2014 pour les extensions...).
        Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
        Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
        Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

        Commentaire


        • #5
          Re : Afficher un contenu en pdf

          Encore moi,

          Je viens de faire un petit essai, avec quelques adaptations, la procédure décrite a fini par fonctionner:

          La librairie a évolué, on est désormais en version 0.7.0 (https://github.com/dompdf/dompdf/releases/tag/v0.7.0), la procédure iniDomPdf est donc à modifier dans le fichier pdf.php et cela devient :

          Code:
          <?php
          /**
           * @package		Joomla.Framework
           * @subpackage	Document
           * @copyright	Copyright (C) 2005 - 2012 Rob Clayburn
           * @license		GNU/GPL, see LICENSE.php
           * Joomla! is free software. This version may have been modified pursuant
           * to the GNU General Public License, and as distributed it includes or
           * is derivative of works licensed under the GNU General Public License or
           * other free or open source software licenses.
           * See COPYRIGHT.php for copyright notices and details.
           */
           
          // Check to ensure this file is within the rest of the framework
          defined('JPATH_BASE') or die();
           
          require_once(JPATH_LIBRARIES .'/joomla/document/html.php');
          // reference the Dompdf namespace
          use Dompdf\Dompdf; 
          /**
           * DocumentPDF class, provides an easy interface to parse and display a pdf document
           *
           * @package		Joomla.Framework
           * @subpackage	Document
           * @since		1.5
           */
          class JDocumentpdf extends JDocumentHTML
          {
          	private $engine	= null;
           
          	private $name = 'joomla';
           
          	/**
          	 * Class constructore
          	 * @param	array	$options Associative array of options
          	 */
           
          	function __construct($options = array())
          	{
          		parent::__construct($options);
           
          		//set mime type
          		$this->_mime = 'application/pdf';
           
          		//set document type
          		$this->_type = 'pdf';
           
          		if (!$this->iniDomPdf())
          		{
          			JError::raiseError(500, 'No PDF lib found');
          		}
          	}
           
          	protected function iniDomPdf()
          	{
          		$file = JPATH_LIBRARIES .'/dompdf/autoload.inc.php';
          		if (!JFile::exists($file))
          		{
          			return false;
          		}
          		if (!defined('DOMPDF_ENABLE_REMOTE'))
          		{
          			define('DOMPDF_ENABLE_REMOTE', true);
          		}
          		//set the font cache directory to Joomla's tmp directory
          		$config = JFactory::getConfig();
          		if (!defined('DOMPDF_FONT_CACHE'))
          		{
          			define('DOMPDF_FONT_CACHE', $config->get('tmp_path'));
          		}
          		require_once($file);
          
          		
          		// Default settings are a portrait layout with an A4 configuration using millimeters as units
          		$this->engine =new Dompdf();
          		return true;
          	}
           
          	/**
          	 * Sets the document name
          	 * @param   string   $name	Document name
          	 * @return  void
          	 */
           
          	public function setName($name = 'joomla')
          	{
          		$this->name = $name;
          	}
           
          	/**
          	 * Returns the document name
          	 * @return	string
          	 */
           
          	public function getName()
          	{
          		return $this->name;
          	}
           
          	/**
          	 * Render the document.
          	 * @access public
          	 * @param boolean 	$cache		If true, cache the output
          	 * @param array		$params		Associative array of attributes
          	 * @return	string
          	 */
           
          	function render($cache = false, $params = array())
          	{
          		$pdf = $this->engine;
          		$data = parent::render();
           		$this->fullPaths($data);
          		//echo $data;exit;
          		$pdf->load_html($data);
          		$pdf->render();
          		$pdf->stream($this->getName() . '.pdf');
          		return '';
          	}
           
          	/**
          	 * (non-PHPdoc)
          	 * @see JDocumentHTML::getBuffer()
          	 */
           
          	public function getBuffer($type = null, $name = null, $attribs = array())
          	{
          		if ($type == 'head' || $type == 'component')
          		{
          			return parent::getBuffer($type, $name, $attribs);
          		}
          		else
          		{
          			return '';
          		}
          	}
           
           
          	/**
          	 * parse relative images a hrefs and style sheets to full paths
          	 * @param	string	&$data
          	 */
           
          	private function fullPaths(&$data)
          	{
          		$data = str_replace('xmlns=', 'ns=', $data);
          		libxml_use_internal_errors(true);
          		try
          		{
          			$ok = new SimpleXMLElement($data);
          			if ($ok)
          			{
          				$uri = JUri::getInstance();
          				$base = $uri->getScheme() . '://' . $uri->getHost();
          				$imgs = $ok->xpath('//img');
          				foreach ($imgs as &$img)
          				{
          					if (!strstr($img['src'], $base))
          					{
          						$img['src'] = $base . $img['src'];
          					}
          				}
          				//links
          				$as = $ok->xpath('//a');
          				foreach ($as as &$a)
          				{
          					if (!strstr($a['href'], $base))
          					{
          						$a['href'] = $base . $a['href'];
          					}
          				}
           
          				// css files.
          				$links = $ok->xpath('//link');
          				foreach ($links as &$link)
          				{
          					if ($link['rel'] == 'stylesheet' && !strstr($link['href'], $base))
          					{
          						$link['href'] = $base . $link['href'];
          					}
          				}
          				$data = $ok->asXML();
          			}
          		} catch (Exception $err)
          		{
          			//oho malformed html - if we are debugging the site then show the errors
          			// otherwise continue, but it may mean that images/css/links are incorrect
          			$errors = libxml_get_errors();
          			if (JDEBUG)
          			{
          				echo "<pre>";print_r($errors);echo "</pre>";
          				exit;
          			} 
          		}
           
          	}
           
          }
          Remarque: dans ce nouveau DomPdf, le fichier dompdf_config.inc.php a été supprimé, tous les paramètres sont à positionner à l'exécution. Je n'ai pas essayé. En gardant les paramètres par défaut, cela fonctionne pour le peu que j'ai testé.

          Pascal
          If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

          Commentaire


          • #6
            Re : Afficher un contenu en pdf

            Pas si compliqué que cela.
            Cela fonctionne très bien chez moi en Joomla 2.5.

            Par contre, je n'arrive pas à migrer en Joomla 3.5.

            J'ai deux fichiers "view" : view.php et view.pdf.php (ces fichiers peuvent être identiques).
            Si l'on ajoute l'option "&format=pdf" sur l'url, c'est le view.pdf.php qui est activé.
            En Joomla 3.5, le view.pdf.php ne s'exécute pas, que la classe soit JViewLegacy ou JView

            La librairie domPDF n'aurait pas de version compatible J3.5 ?
            Yann

            Commentaire


            • #7
              Re : Afficher un contenu en pdf

              Réponse avant la question, on s'améliore

              Pascal
              If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

              Commentaire


              • #8
                Re : Afficher un contenu en pdf

                Attention, il y a
                Code:
                // reference the Dompdf namespace
                use Dompdf\Dompdf;
                en début de fichier.

                Pascal
                If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                Commentaire


                • #9
                  Re : Afficher un contenu en pdf

                  l'extension que j'utilise pour ce besoin.....
                  &amp;quot;ARI Docs Viewer&amp;quot; extension helps to embed remote pages, Joomla! articles and files in the following formats into any Joomla! content:

                  Commentaire


                  • #10
                    Re : Afficher un contenu en pdf

                    Bonjour,

                    Sauf erreur de ma part, le problème de Yann n'est pas d'afficher un pdf, mais, de transformer un article en pdf.

                    Pascal
                    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                    Commentaire


                    • #11
                      Re : Afficher un contenu en pdf

                      Effectivement, c'est bien cela mon besoin.
                      Voilà le site J2.5 que je veux migrer en J3.x
                      http://www.eurojumelages.eu/index.ph...ours-intensifs
                      Yann

                      Commentaire


                      • #12
                        Re : Afficher un contenu en pdf

                        Bonjour Yann,

                        Avez-vous réussi ?

                        Pascal
                        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                        Commentaire


                        • #13
                          Re : Afficher un contenu en pdf

                          Bonjour Pascal,

                          Malheureusement je bloque encore.

                          J'ai supprimé mon ancienne librairie "dompdf", et ajouté la nouvelle version.
                          J'ai ajouté ton fichier php.php.

                          Et toujours l'écran blanc. Je ne vois pas où ça bloque.

                          Yann
                          Yann

                          Commentaire


                          • #14
                            Re : Afficher un contenu en pdf

                            Bonjour,

                            Je viens de faire un essai à partir d'une version "neuve" Joomla 3.5.1 avec succès , en respectant la procédure décrite et en remplaçant uniquement le pdf.php par le mien en complet.

                            Donc, en résumé:
                            - copie du répertoire dompdf dans libraries (attention: en dézippant, il crée un 1er répertoire dompdf, notre répertoire est son sous-répertoire)
                            - création d'un répertoire /libraries/joomla/document/pdf
                            - création du fichier pdf.php à partir de celui que j'ai donné plus haut, sans ajouter ou retirer quoi que ce soit (j'avais ajouté un ?> en fin et cela m'a mis le bazar...)
                            - copie du répertoire libraries/joomla/document/html/renderer en libraries/joomla/document/pdf/renderer
                            - copie de components/com_content/views/article/view.html.php en components/com_content/views/article/view.pdf.php
                            - création d'un article avec un lien terminé par le fameux &format=pdf

                            et voilà,

                            Pascal
                            If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                            Commentaire


                            • #15
                              Re : Afficher un contenu en pdf

                              Ca y est, cela fonctionne chez moi.
                              Pour cela, j'ai dû remplacer une ligne du pdf.php
                              Dans la fonction function iniDomPdf()
                              if (!file_exists($file))
                              et non pas
                              if (!JFile::exists($file))

                              Merci Pascal.
                              Yann

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X