writehtml color php tcpdf

php - color - tcpdf writehtml parameters



TCPDF: tabla HTML y saltos de página (8)

Estoy creando una tabla HTML grande y tengo problemas con los saltos de página, como puede ver en la siguiente imagen:

¿Hay algún método para resolver el problema automáticamente? ¿O cuál es la manera de hacerlo?


Algunos CSS resueltos para mí:

// Include the main TCPDF library (search for installation path). require_once(''tcpdf/tcpdf.php''); // create new PDF document $pdf = new TCPDF(''R'', PDF_UNIT, PDF_PAGE_FORMAT, true, ''UTF-8'', false); // set document information $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor(''Author''); $pdf->SetTitle(''TCPDF HTML Table''); $pdf->SetSubject(''TCPDF Tutorial''); $pdf->SetKeywords(''TCPDF, PDF, html,table, example, test, guide''); // set default header data $pdf->SetHeaderData('''', '''', '' HTML table'', ''''); // set header and footer fonts $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '''', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '''', PDF_FONT_SIZE_DATA)); // set default monospaced font //$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); // set margins $pdf->SetMargins(15, 15, 15); $pdf->SetHeaderMargin(15); $pdf->SetFooterMargin(15); // set auto page breaks $pdf->SetAutoPageBreak(TRUE, 15); // set image scale factor //$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // --------------------------------------------------------- // set font $pdf->SetFont(''times'', '''', 10); // add a page $pdf->AddPage(); $start = 1; $end = 254; $step = 1; $arr = range($start, $end, $step); $table_header .= sprintf("<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>", ''IP'', ''Computer'', ''User'', ''Fone''); foreach ($arr as $ar) { $row[] = $ar; } foreach ($row as $r): if (($r % 40) === 0): $table_header; endif; $table .= sprintf("<tr>/n<td>%s</td>/n<td>%s</td>/n<td>%s</td>/n<td>%s</td>/n</tr>/n", $r, $r, $r, $r); endforeach; $now = date("d/m/Y"); $caption = "<caption>IP addresses <em>$now</em></caption>/n"; $n = "/n"; $tbl = <<<EOD <style> table{ font-family: serif; font-size: 11pt; } table tr { } table tr td { padding:3px; border:#000000 solid 1px; } em { font-size: 4pt; } tr { white-space:nowrap; } </style> <h1>{$caption}</h1> {$table_begin} {$table_header} {$table} </table> EOD; $pdf->writeHTML($tbl, true, false, false, false, ''''); // reset pointer to the last page //$pdf->lastPage(); // --------------------------------------------------------- //Close and output PDF document $pdf->Output(''html_table.pdf'', ''I''); //============================================================+ // END OF FILE //============================================================+


Curiosamente, las soluciones mencionadas aquí no funcionaron para mí. Bueno, fue algo así, pero el contenido dentro de las etiquetas se repetiría (como se desea) pero luego causaría problemas de diseño para la celda de arriba o de abajo si se escribiera en filas. Como lo experimenté, empeoró.

Mi solución, aunque poco elegante, fue establecer AutoPageBreak en falso, poner un contador incrementador de filas hacia arriba, incrementando para cada fila, y luego verificaba si había excedido un cierto valor. Si es así, cerré la tabla, utilicé writeHTML (), llamé addPage () y luego continué, habiéndolo reconstruido como una nueva tabla, encabezados y todo.

Como dije, poco elegante, pero funcionó. Espero que esto ayude a alguien ... es una solución bastante obvia, pero la ejecución no siempre es tan obvia. Además, puede haber una mejor manera que funcione para su situación particular, pero si no es así, inténtelo. :)


Roney, muchas gracias, la escritura de HTML generado se solapa con el encabezado de las páginas 2,3 ... esto funcionó para mí:

class your_PDF extends TCPDF { var $top_margin = 20; function Header() { // set top margin to style pages 2, 3.. //title goes here $this->top_margin = $this->GetY() + 5; // padding for second page } }

en tu código

// set top margin to style pages 2, 3.. $pdf->SetMargins(15, $pdf->top_margin, 15);


Sé que es una pregunta bastante antigua, pero tuve el mismo problema hoy, mi tabla se dividió entre las páginas e investigué un poco más sobre el método de la respuesta de FastTrack y resultó que también puede usar el atributo nobr="true" también a la etiqueta <table> . Es decir, para mí tal código resolvió este problema:

<table nobr="true"> <tr> <td>Test</td> <td>Test 2</td> </tr> </table>

Advertencia: este código solo tiene sentido cuando sus tablas son más pequeñas que una página.


Tuve el mismo problema con los encabezados superpuestos. Probé la solución yevgeny, pero eso requería algunas ediciones más para el código de mi generador de PDF (tengo muchas salidas de PDFs escritas en FPDF y quería minimizar el proceso de miogración a TCPDF), así que utilicé esta solución más simple.

class MYPDF extenfs TCPDF { //your initialization code function header(){ //your code here //we change only the top margin and this executes for every header in every page, even the frst one $this->SetTopMargin($this->GetY()); } }


has probado

<table> <thead> <tr> <td> This is my header which appears on every page </td> </tr> </thead> <tr> <td> My Content </td> </tr> </table>

Estoy usando smarty, con esto tienes más posibilidades de romper la tabla manualmente (por ejemplo, si estás usando bordes). Si es necesario, voy a publicar esto, también ...


Para los interesados, simplemente haga lo siguiente y funcionará a la perfección:

$pdf->SetMargins(0, 0, 0); $pdf->SetHeaderMargin(0); $pdf->SetFooterMargin(0);


Intente agregar esto a sus etiquetas <tr> : nobr="true" .

Entonces un ejemplo rápido sería:

<table> <tr nobr="true"> <td>Test</td> <td>Test 2</td> </tr> </table>

El nobr="true" evita que las filas de la tabla se separen. También puede poner esto en las etiquetas <td> y <th> .