table/colorize_cells
Provide some table cells with a colored background.
Download PHP Code Switch to Java Code Show Output
<?php
/*
* Colorize cells:
* Provide some table cells with a colored background.
*
* Create a table and use matchboxes to provide some table cells with a
* colored background.
*
* Required software: PDFlib/PDFlib+PDI/PPS 10
* Required data: none
*/
/* This is where the data files are. Adjust as necessary. */
$searchpath = dirname(__FILE__,3)."/input";
$outfile = "";
$title = "Colorize cells";
$nrows = 4;
$tbl = 0;
$margin = 3;
$fontsize = 12;
/* Height of a table row which is the sum of a font size of 12 and the upper
* and lower cell margin of 3 each
*/
$rowheight = 18;
/* Width of the first and second column of the table */
$c1 = 120; $c2 = 120;
/* Coordinates of the lower left corner of the table fitbox */
$llx = 30; $lly = 400;
/* Color names */
$names = array( "Chocolate", "CornflowerBlue", "Gold" );
/* RGB color values used in PDFlib in the range 0...1. They are calculated
* by dividing the RGB value by 255. For example, a PDFlib value of
* (0.82 0.4 0.1) corresponds to an RGB value of (210 105 30) since
* 0.82 = 210/255, 0.4 = 105/255, and 0.1 = 30/255.
*/
$pdflib = array( "0.82 0.4 0.1", "0.4 0.58 0.93", "1 0.84 0" );
try {
$p = new pdflib();
$p->set_option("searchpath={" . $searchpath . "}");
/* This means we must check return values of load_font() etc. */
$p->set_option("errorpolicy=return");
if ($p->begin_document($outfile, "") == 0)
throw new Exception("Error: " . $p->get_errmsg());
$p->set_info("Creator", "PDFlib Cookbook");
$p->set_info("Title", $title );
$p->begin_page_ext(0, 0, "width=a5.width height=a5.height");
/* ---------------------------------------
* Add a heading line spanning two columns
* ---------------------------------------
*/
/* Set the current row */
$row = 1;
$optlist = "fittextline={fontname=NotoSerif-Regular fontsize=" .
$fontsize . " position=center} rowheight=" . $rowheight . " margin=" .
$margin . " colspan=2 " . "colwidth=" . $c1;
$tbl = $p->add_table_cell($tbl, 1, $row, "Color Table", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* ---------------------------------------------------------------
* Adding two cells in the second, third, and fifth table row each
* ---------------------------------------------------------------
*/
for ($row = 2; $row <= 4; $row++)
{
/* Adding a cell in the first column of the current row.
* The text line is centered horizontally, with a margin
* from all borders.
*/
$optlist =
"fittextline={fontname=NotoSerif-Regular fontsize=" .
$fontsize . " position={left center}} rowheight=" . $rowheight .
" margin=" . $margin . " colwidth=" . $c1;
$tbl = $p->add_table_cell($tbl, 1, $row, $names[$row-2], $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* ----------------------------------
* Adding a cell in the second column
* ----------------------------------
*
* The cell is placed in the second column of the current row.
* Since the cell doesn't cover a complete row but only one column
* it cannot be filled with color using one of the row-based shading
* options. We apply the Matchbox feature instead to fill the
* rectangle covered by the cell with a gray background color.
*/
$optlist = "colwidth=" . $c2 . " margin=" . $margin .
" matchbox={fillcolor={rgb " . $pdflib[$row-2] . "}}";
$tbl = $p->add_table_cell($tbl, 2, $row, "", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
} /* for */
/* -------------
* Fit the table
* -------------
*
* Using "header=1" the table header will include the first line.
* Using "line=horother linewidth=0.3" the ruling is specified with a
* line width of 0.3 for all horizontal lines.
*/
$optlist = "header=1 stroke={ {line=horother linewidth=0.3}}";
$result = $p->fit_table($tbl, $llx, $lly, $llx + $c1 + $c2,
$lly + $nrows * $rowheight, $optlist);
/* Check the $result; "_stop" means all is ok */
if (!$result == "_stop") {
if ($result == "_error")
throw new Exception("Error: " . $p->get_errmsg());
else {
/* Other return values require dedicated code to deal with */
}
}
$p->end_page_ext("");
$p->end_document("");
$buf = $p->get_buffer();
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=colorize_cells.pdf");
print $buf;
} catch (PDFlibException $e) {
echo("PDFlib exception occurred:\n".
"[" . $e->get_errnum() . "] " . $e->get_apiname() .
": " . $e->get_errmsg() . "\n");
exit(1);
} catch (Throwable $e) {
echo("PHP exception occurred: " . $e->getMessage() . "\n");
exit(1);
}
$p = 0;
?>