textflow/vertical_alignment_in_fitbox
Control the vertical alignment of text in the fitbox.
Download PHP Code Switch to Java Code Show Output
<?php
/*
* Vertical alignment in fitbox:
* Control the vertical alignment of text in the fitbox
*
* Use the "verticalalign" option of fit_textflow() to vertically align $text in
* the fitbox in different ways.
*
* 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 = "Vertical Alignment in Fitbox";
$tf = 0;
$ystart = 630;
$x = 20; $y = $ystart; $yoffset = 200;
$boxheight = 190; $boxwidth = 250;
$xtext = 300; $ytext = $y + $boxheight/2;
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");
/* Set an output path according to the name of the topic */
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 */
$font = $p->load_font("NotoSerif-Regular", "unicode", "");
if ($font == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Create an A4 page */
$p->begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* Set the font with a font size of 14 */
$p->setfont($font, 10);
/* Text to be created */
$text =
"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 models are folded from one paper sheet.";
/* Option list to create the Textflow. It is similar in all cases.
* The leading is set to 120% and the alignment to justify.
*/
$cr_optlist = "fontname=NotoSerif-Regular fontsize=14 " .
"leading=120% alignment=justify";
/* -------------------------------------------
* Case 1: Align the text on top of the fitbox
* -------------------------------------------
*/
/* Output some descriptive text */
$p->fit_textline("Case 1: Fit Textflow with default settings",
$xtext, $ytext, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* The "showborder" option illustrates the borders of the fitbox. No
* further options are supplied so the default setting
* "verticalalign=top" and "firstlinedist=leading" are used implicitly
* and the text will be aligned on top of the fitbox with the baseline
* of the first text line having a distance from the top of the fitbox
* corresponding to the leading value of the font size.
*/
$fit_optlist = "showborder";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
/* -------------------------------------------------------------------
* Case 2: Align the text on top of the fitbox with a defined distance
* from the top
* -------------------------------------------------------------------
*/
$y -= $yoffset;
$ytext = $y + $boxheight/2;
/* Output some descriptive text */
$p->fit_textline("Case 2: firstlinedist=capheight",
$xtext, $ytext, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* "showborder" illustrates the borders of the fitbox.
* The default setting "verticalalign=top" is used implicitly.
* "firstlinedist=capheight" defines the distance between the top of the
* fitbox and the baseline of the first text line as the capheight of
* the font size.
*/
$fit_optlist = "showborder firstlinedist=capheight";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
/* --------------------------------------------------
* Case 3: Align the text at the bottom of the fitbox
* --------------------------------------------------
*/
$y -= $yoffset;
$ytext = $y + $boxheight/2;
/* Output some descriptive text */
$p->fit_textline("Case 3: verticalalign=bottom",
$xtext, $ytext, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* "showborder" illustrates the borders of the fitbox.
* "verticalalign=bottom" aligns the text at the bottom of the fitbox.
*/
$fit_optlist = "showborder verticalalign=bottom";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
/* -----------------------------------------------------------------
* Case 4: Align the text at the bottom of the fitbox with a defined
* distance from the bottom
* -----------------------------------------------------------------
*/
$y -= $yoffset;
$ytext = $y + $boxheight/2;
/* Output some descriptive text */
$p->fit_textline("Case 4: verticalalign=bottom lastlinedist=descender",
$xtext, $ytext, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* "showborder" illustrates the borders of the fitbox.
* "verticalalign=bottom" aligns the text at the bottom of the fitbox.
* "lastlinedist=descender" defines the distance between the baseline
* of the last text line and the bottom of the fitbox as the descender
* of the font size.
*/
$fit_optlist = "showborder verticalalign=bottom lastlinedist=descender";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
$p->end_page_ext("");
/* Create an A4 page */
$p->begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* Set the font with a font size of 14 */
$p->setfont($font, 10);
$y = $ystart;
$yoffset = 230;
$ytext = $y + $boxheight/2;
/* ------------------------------------------------
* Case 5: Center the text in the fitbox vertically
* ------------------------------------------------
*/
/* Output some descriptive text */
$p->fit_textline("Case 5: ",
$xtext, $ytext, "");
$p->fit_textline("verticalalign=center firstlinedist=capheight " .
"lastlinedist=descender", $xtext, $ytext-15, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* "showborder" illustrates the borders of the fitbox.
* The default setting "firstlinedist=leading" is used implicitly.
* "verticalalign=center" aligns the text in the center of the fitbox.
* "firstlinedist=capheight" defines the distance between the top of the
* fitbox and the baseline of the first text line as the capheight of
* the font size.
* "lastlinedist=descender" defines the distance between the baseline
* of the last text line and the bottom of the fitbox as the descender
* of the font size.
*/
$fit_optlist = "showborder verticalalign=center " .
"firstlinedist=capheight lastlinedist=descender";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
/* --------------------------------------------------------------
* Case 6: Fit the text by justifying it vertically in the fitbox
* --------------------------------------------------------------
*/
$y -= $yoffset;
$ytext = $y + $boxheight/2;
/* Output some descriptive text */
$p->fit_textline("Case 6: verticalalign=justify linespreadlimit=200%",
$xtext, $ytext, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* "showborder" illustrates the borders of the fitbox.
* "verticalalign=justify" justifies the text vertically in the fitbox.
* "linespreadlimit=200% defines maximum distance between two text lines
* as 200% of the font size.
*/
$fit_optlist = "showborder verticalalign=justify linespreadlimit=200%";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
/* --------------------------------------------------------------------
* Case 7: Fit the text by justifying it vertically in the fitbox, with
* a defined distance from the top and from the bottom
* --------------------------------------------------------------------
*/
$y -= $yoffset;
$ytext = $y + $boxheight/2;
/* Output some descriptive text */
$p->fit_textline("Case 7:",
$xtext, $ytext+15, "");
$p->fit_textline("verticalalign=justify linespreadlimit=200%",
$xtext, $ytext, "");
$p->fit_textline("firstlinedist=capheight lastlinedist=descender",
$xtext, $ytext-15, "");
/* Create the Textflow */
$tf = $p->create_textflow($text, $cr_optlist);
if ($tf == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Fit the Textflow.
* "showborder" illustrates the borders of the fitbox.
* The default setting "firstlinedist=leading" is used implicitly.
* "verticalalign=justify" justifies the text vertically in the fitbox.
* "linespreadlimit=200% defines maximum distance between two text lines
* as 200% of the font size.
* "firstlinedist=capheight" defines the distance between the top of the
* fitbox and the baseline of the first text line as the capheight of
* the font size.
* "lastlinedist=descender" defines the distance between the baseline
* of the last text line and the bottom of the fitbox as the descender
* of the font size.
*/
$fit_optlist = "showborder verticalalign=justify linespreadlimit=200% " .
"firstlinedist=capheight lastlinedist=descender";
$result = $p->fit_textflow($tf, $x, $y, ($x + $boxwidth), ($y + $boxheight),
$fit_optlist);
if (!$result == "_stop")
{
/* Check for errors */
}
$p->delete_textflow($tf);
$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=vertical_alignment_in_fitbox.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;
?>