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; ?>