1

Bonjour,
Tout d'abord un grand chapeau bas pour cette superbe bibliothèque qui marche super bien... Je suis sur un projet à vocation non commerciale, mais dès que j'ai terminé je prendrai le temps de laisser une contribution pour vous permettre de continuer !

J'ai un souci qui me semble très récurrent : j'ai l'erreur 6 dès que je tente de charger une image. J'ai une arborescence un peu compliquée du fait qu'un multitude de documents seront transformés en PDF. J'ai donc essayé de morceller logiquement afin de réutiliser le plus de code possible et de rendre maintenable mon appli web. Cela donne (les [D] sont pour signaler des dossiers):
- [D] Export
   - [D] _class
   - [D] _tcpdf_5.0.002
   - [D] examples
   - [D] fiches
      - [D] css
         - fiche-activite.css
      - [D] images
         - fiche-activite-header.png
      - fiche-activite-content.php
      - fiche.php
   - export.php
   - html2pdf.class.php


export.php débute le buffering et inclut le fichier qui appelle HTML2PDF :
<?php
     // Start bufferization
     ob_start();  
     /*
      * Main switching export file
      */

     // Include Wordpress context
     define('WP_USE_THEMES', false);
     require(dirname(__FILE__).'/../../../../../wp-blog-header.php');
     

     $post_ID = $_GET['id'];

     // If we got ID we can export
     if(!empty ($post_ID))
     {
         $post = get_post($post_ID);
         switch($post->post_type)
         {
             case 'fiche':
                 include(locate_template('/functions/export/fiche/fiche.php'));
                 break;
             case 'livret':
                 break;
         }
     }
?>


HTML2PDF est appelé dans fiche.php :
<?php

/*
 * Export code for fiches
 */

    /* get the HTML*/    
    // Get fiche type
    $post_terms = get_the_terms(get_the_ID(),'type_fiche');
    $file_name = '';
    switch($post_terms[0]->slug)
    {
        case "activite":
            include(dirname(__FILE__).'/fiche-activite-content.php');
            $content = ob_get_clean();
            $file_name = 'Fiche_Activite_' . $post->post_name . '.pdf';
            break;
        
        case "evaluation":
            
            break;
    }               
    
    
    // convert in PDF
    require_once(dirname(__FILE__).'/../html2pdf.class.php');
    try
    {
        $html2pdf = new HTML2PDF('P', 'A4', 'fr', true, 'UTF-8', array(0,0,0,0));
        //$html2pdf->setModeDebug();
        $html2pdf->setDefaultFont('Arial');
        $html2pdf->pdf->SetDisplayMode('real');
        $html2pdf->writeHTML($content, isset($_GET['vuehtml']));
        $html2pdf->Output($file_name);
    }
    catch(HTML2PDF_exception $e) {
        echo $e;
        exit;
    }
?>


J'appelle donc HTML2PDF en lui passant le contenu html généré par fiche-activite-content.php, qui lui contient :
<link type="text/css" href="./fiche/css/fiche-activite.css" rel="stylesheet" >
<page backtop="150px">
    <page_header>
        <table id="page-header">
            <tr>
                <td>
                    <h1><?php the_title(); ?></h1>
                </td>
            </tr>            
        </table>        
    </page_header>    
    <table style="width: 80%;border: solid 1px #5544DD; border-collapse: collapse" align="center">
        <thead>
            <tr>
                <th style="width: 30%; text-align: left; border: solid 1px #337722; background: #CCFFCC">Header 1</th>
                <th style="width: 30%; text-align: left; border: solid 1px #337722; background: #CCFFCC">Header 2</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>
                    test corps
                </td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td>
                    footer
                </td>
            </tr>
        </tfoot>
    </table>
    <page_footer>
        <table style="width: 100%; border: solid 1px black;">
            <tr>
                <td style="text-align: left;    width: 50%">html2pdf.fr</td>
                <td style="text-align: right;    width: 50%">page [[page_cu]]/[[page_nb]]</td>
            </tr>
        </table>
    </page_footer>
</page>


Ma page fait référence à un fichier CSS :

h1 {
    color:#026232;
    text-transform: uppercase;
    
}

table#page-header tr td {    
    width: 100%;
    height: 150px;
    background: gray url(./fiche/images/fiche-activite-header.png) no-repeat;
}


Tout ça fonctionne jusqu'à ce que je rajoute la propriété css background dans table#page-header tr td. Là, j'obtiens l'erreur 6 qui me dit que l'image est introuvable.

D'après ce que j'ai pu lire dans les dizaines de posts de gens ayant eu ce problème, c'est par ce qu'il faut un chemin absolu vers l'image, partant de l'endroit où HTML2PDF est appelé.

Dans mon cas, il est appelé dans fiche.php, donc le chemin ./fiche/images/fiche-activite-header.png devrait marcher non? J'ai essayé plein de combinaisons partant d'autres dossiers et ça ne marche pas.

Je précise que je voudrais (à moins que ce soit impossible) garder tous les styles dans le fichier css, y compris ceux qui font référence à une image.

Merci de vos retours wink

2

Je m'auto-réponds smile
En fait, ce sont les simples cotes que je mets systématiquement à tort autour d'une URL dans la propriété css background-image qui semblent perdre la bibliothèque...
Une fois retirées, tout roule !!

Merci quand même, c'est souvent quand on formule corectement sa question qu'on y trouve une réponse !

wink