1

Bonjour, j'ai un léger problème smile
Je souhaite convertir une page html générée en php (avec récupération de contenu dans la base de données etc..).
Après pas mal d'essais infructueux avec divers outils, j'ai essayé html2pdf.
J'ai donc récupéré le contenu html de ma page :

<?php
ob_start()

<!-- Tout le contenu de la page en php/html -->

$content = ob_get_clean();

require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php');
$html2pdf = new HTML2PDF('P','A4','fr');
$html2pdf->setTestTdInOnePage(false);
$html2pdf->WriteHTML($content, isset($_GET['vuehtml']));
$Fichierpdf = $html2pdf->Output('', true);
file_put_contents("./CompteRendu.pdf", $Fichierpdf);
?>


Avec ceci en bas de page, j'ai bien un fichier 'CompteRendu.pdf' qui est créé, avec tout mon contenu à l'intérieur, mais.. j'ai l'impression que le résultat est zoomé ^^'
J'ai utilisé un css pour dimensionner ma page et faire en sorte qu'elle rentre dans une feuille format A4 avec les marges de chaque côté, mais la plupart de mes blocs sont coupé sur la droite, voyez plutôt :

Aperçu du pdf

Mon tableau en haut est sensé être centré (les blocs rouges sont des logos), et les bordures du tableau ne devraient pas être si épaisses (1px dans mon css), là on dirait qu'elle sont zoomées, le contour est flou ^^'

Le titre ('Entreprise Test') devraient être plu gros et centré (mais vu que la page déborde sur la droite, il doit être centré quand même).

Le bloc en gris est bon si ce n'est qu'il dépasse sur la droite (il devrait y avoir la même marge à gauche et à droite), et autre problème plus loin dans le document, d'autre blocs avec le même style ne veulent pas s'afficher en gris (même 'class' dans le css pourtant)...

Voila le code & le css de la partie affichée si ça peut vous aider :

<table class="CRhead">
    <tr>
        <td class="tdBord"><img src="..." alt="logo" title="logo" /></td>
        <td class="tdCentre">
            <img src="..." alt="logo2" title="logo2'" />
            <?php echo $annee; /* Correspond à l'année en cours */ ?>
        </td>
        <td class="tdBord">
            <img src="..." alt="logo3" title="logo3" />
            <img src="..." alt="logo3" title="logo3" />
        </td>
    </tr>
</table>
<div class="nomEtp">
    <?php echo $NomEtpAE; /* Correspond au nom de l'entreprise :) */ ?>
</div>
<div class="donneesEtp">
    <table>
        <tr><td colspan="2" class="sousTitreDonnee">Fiche signalétique de l'entreprise<br /><br /></td></tr>
        <?php
        /* Boucle qui parcourt un array contenant les intitulés de chaque ligne ($FSEtp) et affiche leur valeur correspondante dans un 2e array ($FSEtpDonnees) */
        for($i=0;$i<sizeof($FSEtp);$i++){
            echo "<tr><td>".$FSEtp[$i]." :</td>";
            echo "<td class='valeurDonnee'>".$FSEtpDonnees[$i]."</td></tr>";
        }
        ?>
        <tr><td colspan="2" class="sousTitreDonnee"><br/><br/>Données relatives à l'entretien<br /><br /></td></tr>
        <?php
        /* Même chose que la boucle précédente ^^ */
        for($i=0;$i<sizeof($DonneesEntretien);$i++){
            echo "<tr><td>".$DonneesEntretien[$i]." :</td>";
            echo "<td class='valeurDonnee'>".$DonneesEntretienVal[$i]."</td></tr>";
        }
        ?>
    </table>
</div>

// Tableau (entête de la première page)
.CRhead {
margin-top:15px;
margin-left:auto;
margin-right:auto;
height:50px;
width:750px;
border:1px black solid;
}

// Style qui s'applique aux 3 cellules du tableau
.CRhead td{
vertical-align:middle;
text-align:center;
border:1px black solid;
font-weight:bold;
}

// Style qui s'applique aux cellules gauche et droite du tableau
.tdBord {
width:25%;
}

// Div qui contient le nom de l'entreprise
.nomEtp {
margin-bottom:60px;
margin-top:60px;
text-align:center;
font-size:3em;
font-weight:bold;
text-decoration:underline;
}

// Div qui contient un tableau dans lequel sont affichées des informations (fond en gris)
.donneesEtp {
margin-top:50px;
margin-left:auto;
margin-right:auto;
background-color:#C1C1C1;
width:100%;
}

// Sous titre dans la partie grise
.sousTitreDonnee {
text-transform:uppercase;
font-weight:bold;
letter-spacing:1px;
padding-left:50px;
}

// Valeur de droite (floutées) dans la partie grise
.valeurDonnee{
font-style:italic;
font-weight:bold;
}


Voila, j'avoue avoir perdu les 3/4 de mes neurones avant même d'utiliser html2pdf, alors un peu d'aide serait la bienvenue tongue
C'est peut être une erreur toute bête, mais là je sèche ^^'

Si jamais vous avez besoin d'autre chose pour pouvoir me répondre, hésitez pas à demander smile (je répondrai ptet pas avant demain, je travaille là dessus au boulot seulement ^^)

2

tu utilises de partout des pixels. il faut largement préférer l'utilisation des mm pour un document PDF.

ensuite, pour ton CRhead essaye margin: auto (regroupe en un seul les left et right)

enfin, HTML2PDF ne sait pas automatiquement déduire la taille de tous les éléments table, td, th, div... (bcp trop gourmand en ressource) si tu veux avoir un résultat précis, il faut préciser la largeur de tous les éléments.
Ancien pseudo : lolo

3

Merci pour cette réponse love
En effet en précisant les tailles de tous les éléments, et en millimètres, j'arrive à obtenir le rendu que je souhaite ^^

Une dernière question, est-il possible d'appliquer un css spécifique à la création du pdf ou pas? (à la manière d'un css réservé au media print) Histoire de pouvoir afficher/masquer certains éléments sur la version web et pas sur la version pdf ^^

4

ben je dirais qu'il suffit juste de mettre le bon CSS suivant si tu fais une sortie web ou pdf. car sinon, les media ne sont pas pris en compte
Ancien pseudo : lolo

5

D'accord, je vois comment faire ^^

Merci pour ces réponses! top