2017-01-19 3 views
0

J'ai une table php qui contient des informations sur la facturation de certains nombres. Après avoir généré cette table, je l'exporte en pdf en utilisant mpdf. Si la table a un certain nombre de lignes, elle casse la page d'une manière étrange, conduisant les en-têtes à répéter sur la page suivante sans lignes. Voici le format de la table:page de pause de table php sans lignes sur la page suivante

Le tableau contient jusqu'à 3 têtes à l'intérieur <thead> balises, comme ceci:

<table class="items" width="100%" style="font-size: 9pt; border-collapse: collapse;" cellpadding="8"> 
    <thead> 
     <tr> 
      <td width="30.3%">Forbrug</td> 
      <td width="23.1%">Periode</td> 
      <td width="10.76%">Tid/MB</td> 
      <td width="9.28%">Enheder</td> 
      <td width="12.9%" align="right">I alt</td> 
      <td width="13.3%" align="right">I alt+<b>moms</b></td> 
     </tr> 
    </thead> 

lignes sont ajoutées dans un certain temps de la base de données de cette façon .. rien de spécial

<tr> 
    <td>'.$produktNameFromDatabase.'</td> 
    <td>'.$periodeFromDatabase.'</td> 
    <td>'.$tidMbFromDatabase.'</td> 
    <td>'.$enhederFromDatabase.'</td> 
    <td align="right">'.number_format((float)$produktpris, 2, ',', '.').' kr.</td> 
    <td align="right"><b>'.number_format((float)$produktpris*(1 + (0.25 * $moms)) - $momsDiscount, 2, ',', '.').' kr.</b></td> 
</tr> 

avec les lignes totales à la fin

 <tr> 
      <td class="blanktotal" colspan="1" rowspan="6"></td> 
      <td class="blanktotal" colspan="1" rowspan="6"></td> 
      <td class="totals" colspan="2">Subtotal:</td> 
      <td class="totals" colspan="2">'.number_format((float)$pris1, 2, ',', '.').' kr.</td> 
     </tr> 
     <tr> 
      <td class="totals1" colspan="2">Moms:</td> 
      <td class="totals1" colspan="2">'.number_format((float)$pris1*(0.25 * $moms) - $momsTotal, 2, ',', '.').' kr.</td> 
     </tr> 
     <tr> 
      <td class="totals1" colspan="2"><b>TOTAL:</b></td> 
      <td class="totals1" colspan="2"><b>'.number_format((float)$pris1*(1 + (0.25 * $moms)) - $momsTotal, 2, ',', '.').' kr.</b></td> 
     </tr> 
    </tbody> 
</table> 

!!! TOUT ce que vous avez vu maintenant, y compris les totaux sont une partie de la table!

Voici les paramètres de MPDF que j'ai:

En PhP:

$mpdf=new mPDF('win-1252','A4','','',20,15,48,25,10,10); 
$mpdf->useOnlyCoreFonts = true; // false is default 
$mpdf->SetProtection(array('print')); 
$mpdf->SetTitle("Suggestive Title"); 
$mpdf->SetAuthor("Author"); 
$mpdf->SetWatermarkText("Faktura"); 
$mpdf->showWatermarkText = true; 
$mpdf->watermark_font = 'DejaVuSansCondensed'; 
$mpdf->watermarkTextAlpha = 0.1; 
$mpdf->SetDisplayMode('fullpage'); 

En HTML:

$html .= '<!--mpdf 
    <htmlpageheader name="myheader"> 
     <table width="100%"><tr> 
      <td width="50%" style="color:#000000;"> 
       <span style="font-weight: bold; font-size: 14pt;"> 
        Company Name 
       </span> 
       Company Information 
      </td> 
      <td width="50%" style="text-align: right;"> 
       <img src="image.jpg" /> 
        Invoice Information <br />Side: {PAGENO} af {nb} 
       </td> 
     </tr></table> 
    </htmlpageheader> 

    <htmlpagefooter name="myfooter"> 
     <div style="border-top: 1px solid #000000; font-size: 9pt; text-align: center; padding-top: 3mm; "> 
      Footer Stuff 
     </div> 
     <div style="font-size: 9pt; text-align: center;"> 
      Other Footer Stuff 
     </div> 
    </htmlpagefooter> 

    <sethtmlpageheader name="myheader" value="on" show-this-page="1" /> 
    <sethtmlpagefooter name="myfooter" value="on" /> 
mpdf-->'; 

Certains style que j'utilise

body {font-family: sans-serif; 
    font-size: 10pt; 
} 
p { margin: 0pt; 
} 
td { vertical-align: top; } 
.items td { 
    border-left: 0.1mm solid #000000; 
    border-right: 0.1mm solid #000000; 
} 
table thead td { background-color: #d4ffaa; 
    border: 0.1mm solid #000000; 
} 
.items td.blanktotal { 
    background-color: #FFFFFF; 
    border: 0mm none #000000; 
    border-top: 0.1mm solid #000000; 
    border-right: 0.0mm solid #000000; 
} 
.items td.totals { 
    text-align: right; 
    border-top: 0.1mm solid #000000; 
    border-right: 0.0mm solid #000000; 
    border-left: 0.0mm solid #000000; 
} 
.items td.totals1 { 
    text-align: right; 
    border-top: 0.0mm solid #000000; 
    border-right: 0.0mm solid #000000; 
    border-left: 0.0mm solid #000000; 
} 

Le résultat ressemble à ceci:

enter image description here

Ce problème se produit ne lorsque le nombre de lignes remplit la page. Si elle déborde, ce n'est pas un problème majeur, car les en-têtes de la table sont toujours là sur la page suivante (malheureusement, pas seulement la dernière) et le reste des lignes est ajouté.

Comment puis-je me débarrasser de ces lignes vides, dans ce cas particulier?

Merci!

!! EDIT:Ajout d'informations, le code et une meilleure image de l'affaire. Désolé de ne pas le faire à la première fois!

!! EDIT # 2:Je viens observé sur d'autres exemples qui ont plus de 1 page de lignes que les <thead> s maintiennent leur position sur les pages suivantes. Cela arrive tout le temps. Y a-t-il un moyen de désactiver cela afin que les autres <thead> s continuent à la page suivante du haut de la page sans se souvenir de la position de la page précédente?

Répondre

0

J'ai finalement trouvé une solution. Le meilleur moyen de se débarrasser de ces choses est de remplacer <thead> tags par <th>. <thead> a un style prédéfini qui fait que l'en-tête du tableau se répète sur chaque page. <th> fera en sorte que l'en-tête cesse de se répéter sur les pages suivantes (heureuses ou malheureuses), mais éliminera l'espace créé par le style <thead>

0

Vous devez définir les en-têtes et pieds de page() dans les chaînes individuelles, comme ceci:

require_once __DIR__ . '/../vendor/autoload.php'; 

$stylesheet = ' 
.table-header{ 
    border: none; 
    background-color: yellow; 
    width: 100%; 
} 
.table-header td{ 
    border-right: 1px solid; 
} 
.table-body{ 
    border: none; 
    background-color: transparent; 
    width: 100%; 
} 
.table-body td{ 
    border-right: 1px solid; 
    border-bottom: 1px solid; 
} 
.table-footer{ 
    border: none; 
    background-color: transparent; 
    width: 100%; 
} 
.table-footer .td-number{ 
    text-align: right; 
} 
'; 

/* Sample data */ 
$html = '<table class="table-body">'; 
for ($i = 1; $i <= 100; $i++) { 
    $html.='<tr> 
    <td width="30.3%">Forbrug '.$i.'</td> 
    <td width="23.1%">Periode '.$i.'</td> 
    <td width="10.76%">'.$i.' MB</td> 
    <td width="9.28%">Val '.$i.'</td> 
    <td width="12.9%" align="right">I alt '.$i.'</td> 
    <td width="13.3%" align="right"><b>moms</b> '.$i.'</td> 
    </tr>'; 
} 
$html.= '</table>'; 

$header = '<table class="table-header"><tr> 
<td width="30.3%">Forbrug</td> 
<td width="23.1%">Periode</td> 
<td width="10.76%">Tid/MB</td> 
<td width="9.28%">Enheder</td> 
<td width="12.9%" align="right">I alt</td> 
<td width="13.3%" align="right">I alt+<b>moms</b></td> 
</tr></table>'; 

$footer = '<table class="table-footer"><tr> 
<td>Footer here</td> 
<td class="td-number"><b>Page N. {PAGENO}</b></td> 
</tr></table>'; 

$mpdf = new mPDF('c','A4','','',15,15,18,15,10,5); 
$mpdf->mirrorMargins = 1; 
/* Declare headers */ 
$mpdf->SetHTMLHeader($header); 
$mpdf->SetHTMLHeader($header,'E'); 
/* Declare footers */ 
$mpdf->SetHTMLFooter($footer); 
$mpdf->SetHTMLFooter($footer,'E'); 
$mpdf->WriteHTML($stylesheet,1); 
$mpdf->WriteHTML($html); 
$mpdf->Output(); 
+0

J'ai ajouté tous les en-têtes comme vous me l'avez montré et mis les en-têtes en mpdf, mais ça ne marche pas. Donc, le problème ici est dans le cas exact où les lignes de la table remplissent la table (ne pas dépasser). Il ajoute les en-têtes sur la deuxième page sans lignes. Si les lignes dépassent la page, il n'y a aucun problème à avoir l'en-tête sur la deuxième page, seulement si elle remplit la page ... –

+0

Eh bien, vous si vous ne montrez pas votre code, il sera impossible de vous assurer de quoi est vraiment passe;) – ShutUpMagda

+0

Je m'excuse pour cela. J'ai ajouté un peu plus de choses et expliqué un peu mieux afin que vous puissiez mieux comprendre l'affaire. Je ne peux malheureusement pas tout montrer, parce que ce n'est pas mon travail individuel, mais j'essaie de montrer tout ce qui compte pour que je puisse résoudre le problème. S'il vous plaît dites-moi si c'est pertinent ce que j'ai ajouté maintenant. Je vous remercie! –