TCPDF: text / cell rotation in table header

I am having trouble creating a table in TCPDF, in which all the header columns except the first and last should be rotated 90 degrees (or: the text in these cells should be vertical).

Is there a way to rotate only the test inside the cell, and not the full cell?

I want the table to look like this:

enter image description here

Thank you for your help.

+4
source share
3 answers

This is simple, please check the following code.

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

I have been working on this issue a lot over the past 2 weeks.

The TCPDF tag works well when calling the Rotate method, but not one that I don’t like. My solution was:

  • Create a method to get X and Y for each column with a TCPDF tag;
  • After writing the HTML table, you must set up the Rotate transformation of each column that you have, setting the new X and Y depending on the page title;
  • To decide if you have header replication for each page of your spreadsheet with multiple pages, I got the number of pages and set the rotated text for each page.

Now an example code ...


 // 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'); 
+3
source

This is an old discussion, but I still run into this problem. I made a workaround for my TCPDF fork. http://sourceforge.net/u/mnicolardi/tcpdf/ci/master/tree/

I added a parameter that tells MultiCell that it works in a rotating environment 90 degrees. In this case, it uses $ h to move the cell to the right.

New prototype method:

 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) 

Usage example:

  $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(); 

Hope this helps!

+1
source

All Articles