2017-01-19 1 views
0

У меня есть таблица php, в которой содержится информация о выставлении счетов определенных номеров. После создания этой таблицы я экспортирую его в pdf, используя mpdf. Если таблица имеет определенное количество строк, она разбивает страницу странным образом, заставляя заголовки повторяться на следующей странице без строк. Вот формат таблица:php table break page без строк на следующей странице

Таблица содержит до 3 заголовков внутри <thead> тегов, например:

<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> 

строк добавляются в то время как из базы данных таким образом .. ничего особенного

<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> 

с общими линиями в конце

 <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> 

!!! ВСЕ, что вы уже видели, включая итоговые данные, являются частью таблицы!

Вот настройки MPDF, что у меня есть:

В 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'); 

В 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-->'; 

Некоторые стиль, который я использую

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; 
} 

Результат выглядит примерно так:

enter image description here

Эта проблема возникает только, когда число строк заполняет страницу. Если он переполняется, это не является серьезной проблемой, поскольку заголовки таблиц все еще присутствуют на следующей странице (все они, к сожалению, не только последние), а остальные строки добавляются далее.

Как я могу избавиться от этих пустых строк, в этом особом случае?

Спасибо!

!! EDIT:Добавлено больше информации, код и лучший образ дела. Извините, что не делал этого в первый раз!

!! EDIT # 2:Я просто наблюдал на других примерах, которые имели более 1 страницы строк, что <thead> s сохранить свои позиции на следующих страницах. Так происходит все время. Есть ли способ отключить это, чтобы другие <thead> s просто продолжали на следующей странице с верхней части страницы, не запомнив позицию с предыдущей страницы?

ответ

0

В конце концов я нашел решение. Лучший способ избавиться от этих вещей - заменить теги <thead> на <th>. <thead> имеет предопределенный стиль, который заставляет заголовок таблицы повторяться на каждой странице. <th> сделает остановку заголовка повторяющейся на следующих страницах (удачливой или неудачной), но это устранит пространство, вызванное стилем <thead>.

0

Вам необходимо установить заголовки (и колонтитулы) в отдельных строках, например:

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

Я добавил все заголовки, как вы показали мне, и установили заголовки в mpdf, Но это не работает. Таким образом, проблема здесь заключается в том, что строки таблицы заполняют таблицу (не превышают). Он добавляет заголовки на вторую страницу без строк. Если строки превышают страницу, нет проблем с повторением заголовка на второй странице, только если он заполняет страницу ... –

+0

Ну, если вы не покажете свой код, невозможно будет убедиться в том, что действительно происходит;) – ShutUpMagda

+0

Приношу свои извинения за это. Я добавил немного больше материала и объяснил немного лучше, чтобы вы могли лучше понять дело. Я не могу показать все, к сожалению, потому что это не моя индивидуальная работа, но я стараюсь показать все, что имеет значение, чтобы я мог решить проблему. Пожалуйста, скажите мне, насколько это актуально, что я добавил сейчас. Спасибо! –