TCPDF:在表头中旋转文本/单元格

时间:2011-07-20 09:38:45

标签: tcpdf

我在TCPDF中创建一个表有些麻烦,其中除了第一个和最后一个之外的所有标题列都应该旋转90度(或者:该单元格中的文本应该是垂直的)。

有没有办法只在单元格内旋转测试,而不是整个单元格?

我希望桌子看起来像这样:

enter image description here

感谢您的帮助。

3 个答案:

答案 0 :(得分:18)

这很简单,请检查以下代码。

$pdf->StartTransform();
$pdf->Rotate(-90);
$pdf->Cell(0,0,'This is a sample data',1,1,'L',0,'');
$pdf->StopTransform();

答案 1 :(得分:2)

我在过去两周内在这个问题上努力工作。

TCPDF标记在调用Rotate方法时效果很好,但不是我不喜欢的。 我的解决方案是:

  1. 创建一个方法,使用TCPDF标记获取每列的X和Y;
  2. 编写HTML表格后,您必须设置每个列的转换“旋转”,根据页眉设置新的X和Y;
  3. 要解决此问题,如果您对多页表的每个页面都有一个标题复制,我会获得页数,并为每个页面设置旋转的文本。
  4. 现在,代码示例......


    // Extend the TCPDF class to create custom Header and Footer
    class MYPDF extends TCPDF {
        //Page header
        public function Test( $ae ) {
            if( !isset($this->xywalter) ) {
                $this->xywalter = array();
            }
            $this->xywalter[] = array($this->GetX(), $this->GetY());
        }
    }
    
    // create new PDF document
    $pdf = new MYPDF('L', PDF_UNIT, 'A1', true, 'UTF-8', false);
    
    // set Rotate
    $params = $pdf->serializeTCPDFtagParameters(array(90));
    
    // other configs
    $pdf->setOpenCell(0);
    $pdf->SetCellPadding(0);
    $pdf->setCellHeightRatio(1.25);
    
    // create some HTML content
    $html = '<table width="100%" border="1" cellspacing="0" cellpadding="5">
    <thead>
    <tr bgcolor="#E6E6E6">
    <th rowspan="2" width="15%" align="center">ATIVIDADES E PROCESSOS</th>
    <th rowspan="2" width="10%" align="center" valign="bottom">ASPECTOS</th>
    <th rowspan="2" width="10%" align="center">IMPACTOS</th>
    <th colspan="3" width="6%" align="center">MEIO</th>
    <th rowspan="2" width="3%" align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th colspan="9" width="18%" align="center">CLASSIFICA&Ccedil;&Otilde;ES</th>
    <th rowspan="2" width="3%" align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th rowspan="2" width="10%" align="center">PROGRAMA</th>
    <th rowspan="2" width="10%" align="center">SUBPROGRAMA</th>
    <th rowspan="2" width="15%" align="center">A&Ccedil;&Otilde;ES DE CONTROLE, MEDIDAS MITIGADORAS, COMPENSAT&Oacute;RIAS E POTENCIALIZADORAS</th>
    </tr>
    <tr bgcolor="#E6E6E6">
    <th align="center" height="200"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    <th align="center"><tcpdf method="Test" params="'.$params.'" /></th>
    </tr>
    </thead>
    <tr bgcolor="#E6E6E6">
    <td colspan="20" align="center">Planejamento</td>
    </tr>
    <tr bgcolor="#FFFFFF">
    <td rowspan="3" width="15%" align="left" bgcolor="#FFFFFF">Divulga&ccedil;&atilde;o do empreendimento</td>
    <td rowspan="2" width="10%" align="left">Oferta de empregos diretos e indiretos</td>
    <td rowspan="2" width="10%" align="left">Atra&ccedil;&atilde;o de popula&ccedil;&atilde;o para as comunidades do entorno</td>
    <td rowspan="2" width="2%" align="center"></td>
    <td rowspan="2" width="2%" align="center"></td>
    <td rowspan="2" width="2%" align="center">X</td>
    <td rowspan="2" width="3%" align="center">AII</td>
    <td rowspan="2" width="2%" align="center">-</td>
    <td rowspan="2" width="2%" align="center">Ind</td>
    <td rowspan="2" width="2%" align="center">T</td>
    <td rowspan="2" width="2%" align="center">Mp</td>
    <td rowspan="2" width="2%" align="center">Po</td>
    <td rowspan="2" width="2%" align="center">D</td>
    <td rowspan="2" width="2%" align="center">R</td>
    <td rowspan="2" width="2%" align="center">M</td>
    <td rowspan="2" width="2%" align="center">M</td>
    <td rowspan="2" width="3%" align="center">M</td>
    <td width="10%">Programa de Apoio ao Desenvolvimento Socioeconomico da Regi&atilde;o</td>
    <td width="10%">Subprograma de Apoio ao Desenvolvimento Habitacional</td>
    <td width="15%">Coibir ocupa&ccedil;&atilde;o indevida de &aacute;reas inadequadas</td>
    </tr>
    <tr bgcolor="#FFFFFF">
    <td>Programa de Comunica&ccedil;&atilde;o Social</td>
    <td> -</td>
    <td>A&ccedil;&otilde;es de comunica&ccedil;&atilde;o sobre o empreendimento e quest&otilde;es ambientais</td>
    </tr>
    <tr bgcolor="#FFFFFF">
    <td align="left">Gera&ccedil;&atilde;o de expectativas na popula&ccedil;&atilde;o</td>
    <td align="left">Gera&ccedil;&atilde;o de expectativas junto a popula&ccedil;&atilde;o</td>
    <td align="center"></td>
    <td align="center"></td>
    <td align="center">X</td>
    <td align="center">AII</td>
    <td align="center">-</td>
    <td align="center">Dir</td>
    <td align="center">T</td>
    <td align="center">Im</td>
    <td align="center">Co</td>
    <td align="center">L</td>
    <td align="center">R</td>
    <td align="center">P</td>
    <td align="center">P</td>
    <td align="center">B</td>
    <td>Programa de Comunica&ccedil;&atilde;o Social</td>
    <td> -</td>
    <td>A&ccedil;&otilde;es de comunica&ccedil;&atilde;o sobre o empreendimento e questoes ambientais</td>
    </tr>
    </table>';
    
    // output the HTML content
    $pdf->writeHTML($html, true, false, true, false, '');
    
    // array with names of columns
    $arr_nomes = array(
        array("ABRANGÊNCIA", 8, 59), // array(name, new X, new Y);
        array("SIGNIFICÂNCIA", 8, 59),
        array("FÃSICO", 4, 52),
        array("BIÓTICO", 4, 52),
        array("SOCIOECONÔMICO", 4, 52),
        array("NATUREZA", 4, 52),
        array("ORIGEM", 4, 52),
        array("DURAÇÃO", 4, 52),
        array("OCORRÊNCIA / TEMPORALIDADE", 4, 52),
        array("FREQUÊNCIA", 4, 52),
        array("ESPACIALIZAÇÃO", 4, 52),
        array("REVERSIBILIDADE", 4, 52),
        array("MAGNITUDE", 4, 52),
        array("RELEVÂNCIA", 4, 52)
    );
    
    // num of pages
    $ttPages = $pdf->getNumPages();
    for($i=1; $i<=$ttPages; $i++) {
        // set page
        $pdf->setPage($i);
        // all columns of current page
        foreach( $arr_nomes as $num => $arrCols ) {
            $x = $pdf->xywalter[$num][0] + $arrCols[1]; // new X
            $y = $pdf->xywalter[$num][1] + $arrCols[2]; // new Y
            $n = $arrCols[0]; // column name
            // transforme Rotate
            $pdf->StartTransform();
            // Rotate 90 degrees counter-clockwise
            $pdf->Rotate(90, $x, $y);
            $pdf->Text($x, $y, $n);
            // Stop Transformation
            $pdf->StopTransform();
        }
    }
    
    // reset pointer to the last page
    $pdf->lastPage();
    
    // ---------------------------------------------------------
    
    //Close and output PDF document
    $pdf->Output('example_006.pdf', 'I');
    

答案 2 :(得分:2)

这是一个陈旧的讨论,但我仍然面临着这个问题。我在我的TCPDF fork上做了一个解决方法。 http://sourceforge.net/u/mnicolardi/tcpdf/ci/master/tree/

我添加了一个参数,通知MultiCell方法它在90度旋转环境中运行。在这种情况下,它使用$ h将单元格移动到右侧。

新方法原型是:

public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0, $valign='T', $fitcell=false,$rotated90Degrees=false) 

用法示例:

 $pdf->StartTransform();          
 $pdf->Rotate(90);
 $pdf->MultiCell(100, 10, "rotated text", 1, 'C', false, 0, "", "", true, 0, false, true, 0, "T", false, true);
 $pdf->StopTransform();

希望它有所帮助!