table/repeat_cell_contents
Show how table cell contents will be repeated on the next table instance if a cell or a row is split.
Download PHP Code Switch to Java Code Show Output
<?php
/*
*
*
* Repeat cell contents:
* Control the repetition of table cell contents in the next table instance if a
* cell or row is split.
*
* Use the "repeatcontent" option of add_table_cell() to control if the cell
* contents will be repeated in the next table instance if a cell or a row is
* split.
*
* Required software: PDFlib/PDFlib+PDI/PPS 9
* Required data: image file
*/
/* This is where the data files are. Adjust as necessary. */
$searchpath = dirname(__FILE__,3)."/input";
$outfile = "";
$title = "Repeat Cell Contents";
$imagefile = "kraxi_logo.tif";
$pagewidth = 842; $pageheight = 595;
/*
* Coordinates of the lower left and upper right corners of the table
* fitbox. The width of the fitbox matches the sum of the widths of the
* three table columns.
*/
$llx1 = 10; $lly1 = 300; $urx1 = 270; $ury1 = 500;
$llx2 = 280; $lly2 = 320; $urx2 = 540; $ury2 = 500;
$llx3 = 550; $lly3 = 320; $urx3 = 810; $ury3 = 500;
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);
/* Load the font */
$boldfont = $p->load_font("NotoSerif-Bold", "unicode", "");
if ($boldfont == 0)
throw new Exception("Error: " . $p->get_errmsg());
$normalfont = $p->load_font("NotoSerif-Regular", "unicode", "");
if ($normalfont == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Load the image */
$image = $p->load_image("auto", $imagefile, "");
if ($image == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Start page */
$p->begin_page_ext($pagewidth, $pageheight, "");
/* Output some descriptive text */
$p->setfont($boldfont, 10);
$p->fit_textline("Table is placed in one table instance", $llx1,
$ury1 + 35, "");
/*
* Output the first table. The supplied coordinates make up a fitbox
* which is large enough for the table to be placed completely in
* one table instance.
*/
output_table($p, $llx1, $lly1, $urx1, $ury1, true);
/* Output some descriptive text */
$p->fit_textline("Table is placed in two table instances", $llx2,
$ury2 + 35, "");
$p->fit_textline("with some cell contents being repeated", $llx2,
$ury2 + 25, "");
/*
* Output the second table. The supplied coordinates make up a
* fitbox which is pretty small so that the table will be placed in
* two table instances. The last parameter is supplied to enable the
* repetition of cell contents if a cell or row is split.
*/
output_table($p, $llx2, $lly2, $urx2, $ury2, true);
/* Output some descriptive text */
$p->fit_textline("Table is placed in two table instances", $llx3,
$ury3 + 35, "");
$p->fit_textline("with no cell contents being repeated", $llx3,
$ury3 + 25, "");
/*
* Output the third table. The supplied coordinates make up a fitbox
* which is pretty small so that the table will be placed in two
* table instances. The last parameter is supplied to control the
* "repeatcontent" option of add_table_cell(). The last parameter is
* supplied to disable the repetition of cell contents if a cell or
* row is split.
*/
output_table($p, $llx3, $lly3, $urx3, $ury3, false);
$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=repeat_cell_contents.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;
function output_table($p, $llx, $lly, $urx, $ury, $repeat) {
global $font, $boldfont, $fontsize, $normalfont, $image;
$tf = 0; $tbl = 0;
$rowheight = 14;
$yoffset = 180;
/* Width of the first, second, and third column of the table */
$c1 = 50; $c2 = 120; $c3 = 90;
$tftext = "Our paper planes are the ideal way of passing the time. We "
. "offer revolutionary new developments of the traditional common "
. "paper planes. If your lesson, conference, or lecture turn out "
. "to be deadly boring, you can have a wonderful time with our "
. "planes. All our mod­els are folded from one paper sheet. "
. "They are exclusively folded without using any adhesive. Several "
. "models are equipped with a folded landing gear enabling a safe "
. "landing on the intended location provided that you have aimed "
. "well. Other models are able to fly loops or cover long "
. "distances. Let them start from a vista point in the mountains "
. "and see where they touch the ground.";
$tftext2 = "It is amazingly robust and can even do aerobatics. "
. "But it is best suited to gliding.";
/*
* Adding a text line cell containing a header
*
* The cell will be placed in the first column of the first row and will
* span three columns. The first column has a width of 50 points. The
* text line is centered vertically and horizontally, with a margin of 4
* points from all borders.
*/
$optlist = "fittextline={font=" . $boldfont . " fontsize=12"
. " position=center} margin=4 colspan=3 colwidth=" . $c1;
$tbl = $p->add_table_cell($tbl, 1, 1, "Our Paper Plane Models", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* Adding a Textflow cell containing an introduction
*
* Add the Textflow to be placed in the table cell. Use
* "fontsize={capheight=6}" which will approximately result in a font
* size of 8 points and (along with "margin=4"), will sum up to an
* overall height of 14 points as for the text lines above. "charref"
* enables the substitution of character references.
*/
$optlist = "font=" . $normalfont . " fontsize={capheight=6} "
. "leading=110% charref";
$tf = $p->add_textflow(0, $tftext, $optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* Add the Textflow table cell. The cell is placed in column 1, row 2
* and spans three columns. To avoid any space from the top add the
* Textflow cell using "fittextflow={firstlinedist=capheight}". Then add
* a margin of 4 points, the same as for the text lines.
*/
$optlist = "textflow=" . $tf . " fittextflow={firstlinedist=capheight} "
. "colwidth=" . $c2 . " colspan=3 margin=4 rowheight=" . $rowheight;
$tbl = $p->add_table_cell($tbl, 1, 2, "", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* Adding a text line cell containing the name of the plane
*
* The cell is placed in column 1, row 3 and spans two columns. The
* first column has a width of 50 points. The row height is 14 points.
* The text line is horizontally positioned on the left and vertically
* centered, with a margin of 4 points from all borders. We use
* "fontsize={capheight=6}" which will approximately result in a font
* size of 8 points and (along with "margin=4"), will sum up to an
* overall height of 14 points corresponding to the "rowheight" option.
* We apply the Matchbox feature to fill the cell with a gray background
* color.
*/
$optlist = "fittextline={position={left top} font=" . $boldfont
. " fontsize={capheight=6}} rowheight=" . $rowheight . " colwidth="
. $c1 . " margin=4 colspan=2" . " matchbox={fillcolor={gray .92}}";
$tbl = $p->add_table_cell($tbl, 1, 3, "1 Giant Wing", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* Adding three more text line cells containing plane data
*
* For a description of the options see above.
*/
$optlist = "fittextline={position={left top} font=" . $normalfont
. " fontsize={capheight=6}} rowheight=14 colwidth=" . $c1
. " margin=4";
$tbl = $p->add_table_cell($tbl, 1, 4, "Material", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
$tbl = $p->add_table_cell($tbl, 1, 5, "Benefit", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
$optlist = "fittextline={position={left top} font=" . $normalfont
. " fontsize={capheight=6}} rowheight=14 colwidth=" . $c2
. " margin=4";
$tbl = $p->add_table_cell($tbl, 2, 4, "Offset print paper 220g/sqm",
$optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* Adding a Textflow cell containing the plane description
*
* Add the Textflow
*/
$optlist = "font=" . $normalfont . " fontsize={capheight=6} leading=110%";
$tf = $p->add_textflow(0, $tftext2, $optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Add the Textflow table cell */
$optlist = "textflow=" . $tf . " fittextflow={firstlinedist=capheight} "
. "colwidth=" . $c2 . " margin=4";
$tbl = $p->add_table_cell($tbl, 2, 5, "", $optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* Add the image cell with a text line
*
* The image is placed in a cell starting in column 3 and row 3 and
* spans three rows. The column width is 90 points. The cell margins are
* set to 4 points.
*/
$optlist = "fittextline={font=" . $boldfont . " fontsize=9} image="
. $image . " colwidth=" . $c3 . " rowspan=3 margin=4";
/*
* Additional options for marking the potentially repeating cell
*/
$mark_optlist = " matchbox={innerbox borderwidth=1 strokecolor=red "
. "linecap=projecting}";
if (!$repeat)
$optlist .= " repeatcontent=false";
$tbl = $p->add_table_cell($tbl, 3, 3, "Amazingly robust!", $optlist
. $mark_optlist);
if ($tbl == 0)
throw new Exception("Error: " . $p->get_errmsg());
/*
* ------------- Fit the table -------------
*
* Using "header=1" the table header will include the first line. The
* "fill" option and the suboptions "area=header" and
* "fillcolor={rgb 0.8 0.8 0.87}" specify the header row(s) to be filled
* with the supplied color. The "stroke" option and the suboptions
* "line=frame linewidth=0.8" define the ruling of the table frame with
* a line width of 0.8. Using "line=other linewidth=0.3" the ruling of
* all cells is specified with a line width of 0.3.
*/
$optlist = "header=1 fill={{area=header fillcolor={rgb 0.8 0.8 0.87}}}"
. " stroke={{line=frame linewidth=0.8} {line=other linewidth=0.3}}";
do {
/* Place the table instance */
$result = $p->fit_table($tbl, $llx, $lly, $urx, $ury, $optlist);
if ($result == "_error")
throw new Exception("Couldn't place table : " . $p->get_errmsg());
$lly -= $yoffset;
$ury -= $yoffset;
}
while ($result == "_boxfull");
/* Check the $result; "_stop" means all is ok */
if (!$result == "_stop") {
throw new Exception("Error when placing table: " . $p->get_errmsg());
}
}
?>