2014-09-04 1 views
4

Я искал в Интернете поиск решения моей проблемы. В настоящее время я использую CakePhp + dompdf для создания PDF-файла. Он отлично работает на обычных таблицах, но когда я добавляю rowspans и colspans, он создает таблицу, но границы разрушаются.Проблемы с отображением rowspan в dompdf и cakephp

Это мой HTML разметка для генерации PDF: экран

<style>table{border-collapse:collapse;}.rows td{border:1px solid brown;</style> 
<table class="sub_cat_table"> 
    <tbody><tr class="rows"> 
     <td colspan="2">カテゴリ</td> 
      <td>重要度</td> 
      <td>実現度</td> 
      <td colspan="2">項目(キーワード)</td> 
      <td colspan="2">重要度</td> 
      <td colspan="2">実現度</td> 
      <td colspan="2">格差</td> 
     </tr> 
     <tr class="rows"> 
      <td rowspan="2" class="sub_cat_letter"> A </td> 
      <td rowspan="2" class="sub_cat_name">Situation</td> 
      <td rowspan="2" class="sub_cat_imp">3.5</td> 
      <td rowspan="2" class="sub_cat_pos">2.0</td>            
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">1</td> 
      <td class="sub_cat_name">Complete</td> 
      <td class="sub_cat_imp_inner">3.0</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">2.0</td> 
      <td class="sub_cat_imp_inner"> ●</td> 
      <td class="sub_cat_imp_inner">-1</td> 
      <td class="sub_cat_imp_inner"></td> 
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">2</td> 
      <td class="sub_cat_name">Access</td> 
      <td class="sub_cat_imp_inner">4.0</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">2.0</td> 
      <td class="sub_cat_imp_inner">● </td> 
      <td class="sub_cat_imp_inner">-2</td> 
      <td class="sub_cat_imp_inner"></td> 
     </tr> 
     <tr class="rows"> 
      <td rowspan="3" class="sub_cat_letter">B</td> 
      <td rowspan="3" class="sub_cat_name">Technology</td> 
      <td rowspan="3" class="sub_cat_imp">3.4</td> 
      <td rowspan="3" class="sub_cat_pos">1.9</td>            
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">3</td> 
      <td class="sub_cat_name">Quality</td> 
      <td class="sub_cat_imp_inner">3.7</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">1.7</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">-2</td> 
      <td class="sub_cat_imp_inner">▼ </td> 
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">4</td> 
      <td class="sub_cat_name">Access</td> 
      <td class="sub_cat_imp_inner">3.0</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">2.0</td> 
      <td class="sub_cat_imp_inner">● </td> 
      <td class="sub_cat_imp_inner">-1</td> 
      <td class="sub_cat_imp_inner"></td> 
     </tr> 
    </tbody> 
</table> 

Печати в HTML (к сожалению, таблица имеет границы выше):

enter image description here

печать экран генерацию PDF в dompdf:

enter image description here

Я пытался играть с файлом dompdf/includes/cellmap.cls.php, но я не могу заставить его работать.

Я уже пробовал эти решения здесь:

И некоторые ссылки я уже забыл. Любые советы или обходные пути очень ценятся.

+1

мое правило, если один HTML в PDF, PHP конвертер не работает для проекта, попробуйте один из других. – 2014-09-04 02:24:34

+0

Да, я уже пробовал CakePdf, но я не могу заставить его работать. также пытался mpdf и не мог получить этот выход. самым близким было dompdf. – roullie

+0

html to pdf with php - это всегда хлопотно, как лента для кошек. Я в основном использую tcpdf http://www.tcpdf.org/ – 2014-09-04 02:32:23

ответ

2

Я думаю, что вам не нужно, чтобы изменить DOMPDF создать PDF, Вам просто нужно организовать ваш стол, специально правило диапазона строк. При создании таблицы с помощью строки охватывают это должно быть так:

<table border="1"> 
    <tr> 
    <td rowspan="3">&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
</table> 

enter image description here

+0

ahhh. теперь я вижу ..... спасибо за указание на меня. я просто попытался изменить свою разметку HTML на правило того, что вы говорите ... теперь все в порядке. – roullie

0

Его действительно не очень «ответ», но я предлагаю переключиться с помощью tcpdf. Я нашел, что это лучшая общая работа по рендерингу html в pdf, а также к тому, что проще настроить, чем другие библиотеки PDF.

код, используемый для создания примера:

<?php 


// Include the main TCPDF library (search for installation path). 
require_once('../tcpdf.php'); 

// create new PDF document 
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 


// set default monospaced font 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 

// set margins 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 

// set auto page breaks 
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 

// set image scale factor 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 

// set some language-dependent strings (optional) 
if (file_exists(dirname(__FILE__).'/lang/eng.php')) { 
    require_once(dirname(__FILE__).'/lang/eng.php'); 
    $pdf->setLanguageArray($l); 
} 

// --------------------------------------------------------- 

// set default font subsetting mode 
$pdf->setFontSubsetting(true); 

// Set font 
// dejavusans is a UTF-8 Unicode font, if you only need to 
// print standard ASCII chars, you can use core fonts like 
// helvetica or times to reduce file size. 
$pdf->SetFont('dejavusans', '', 6, '', true); 

// Add a page 
// This method has several options, check the source code documentation for more information. 
$pdf->AddPage(); 

// set text shadow effect 
//$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); 

// Set some content to print 
$html = <<<EOD 
<style>table{border-collapse:collapse;}.rows td{border:1px solid brown;</style> 
<table class="sub_cat_table"> 
    <tbody><tr class="rows"> 
     <td colspan="2">カテゴリ</td> 
      <td>重要度</td> 
      <td>実現度</td> 
      <td colspan="2">項目(キーワード)</td> 
      <td colspan="2">重要度</td> 
      <td colspan="2">実現度</td> 
      <td colspan="2">格差</td> 
     </tr> 
     <tr class="rows"> 
      <td rowspan="2" class="sub_cat_letter"> A </td> 
      <td rowspan="2" class="sub_cat_name">Situation</td> 
      <td rowspan="2" class="sub_cat_imp">3.5</td> 
      <td rowspan="2" class="sub_cat_pos">2.0</td> 
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">1</td> 
      <td class="sub_cat_name">Complete</td> 
      <td class="sub_cat_imp_inner">3.0</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">2.0</td> 
      <td class="sub_cat_imp_inner"> ●</td> 
      <td class="sub_cat_imp_inner">-1</td> 
      <td class="sub_cat_imp_inner"></td> 
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">2</td> 
      <td class="sub_cat_name">Access</td> 
      <td class="sub_cat_imp_inner">4.0</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">2.0</td> 
      <td class="sub_cat_imp_inner">● </td> 
      <td class="sub_cat_imp_inner">-2</td> 
      <td class="sub_cat_imp_inner"></td> 
     </tr> 
     <tr class="rows"> 
      <td rowspan="3" class="sub_cat_letter">B</td> 
      <td rowspan="3" class="sub_cat_name">Technology</td> 
      <td rowspan="3" class="sub_cat_imp">3.4</td> 
      <td rowspan="3" class="sub_cat_pos">1.9</td> 
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">3</td> 
      <td class="sub_cat_name">Quality</td> 
      <td class="sub_cat_imp_inner">3.7</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">1.7</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">-2</td> 
      <td class="sub_cat_imp_inner">▼ </td> 
     </tr> 
     <tr class="rows"> 
      <td class="sub_cat_number">4</td> 
      <td class="sub_cat_name">Access</td> 
      <td class="sub_cat_imp_inner">3.0</td> 
      <td class="sub_cat_imp_inner"></td> 
      <td class="sub_cat_imp_inner">2.0</td> 
      <td class="sub_cat_imp_inner">● </td> 
      <td class="sub_cat_imp_inner">-1</td> 
      <td class="sub_cat_imp_inner"></td> 
     </tr> 
    </tbody> 
</table> 
EOD; 

// Print text using writeHTMLCell() 
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); 

// --------------------------------------------------------- 

// Close and output PDF document 
// This method has several options, check the source code documentation for more information. 
$pdf->Output('example_001.pdf', 'I'); 

//============================================================+ 
// END OF FILE 
//============================================================+