path_objects/starter_path
Starter sample for path objects: create basic examples of path object construction and use.
Download PHP Code Switch to Java Code Show Output
<?php
/*
* Starter sample for pathobjects:
* Create some basic examples of pathobject construction and use
*
* 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";
$outfilename = "";
$text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " .
"sed do eiusmod tempor incididunt ut labore et dolore magna " .
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation " .
"ullamco laboris nisi ut aliquip ex ea commodo consequat. " .
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum " .
"dolore eu fugiat nulla pariatur. Excepteur sint occaecat " .
"cupidatat non proident, sunt in culpa qui officia deserunt mollit anim " .
"id est laborum. ";
try {
$p = new PDFlib();
$p->set_option("searchpath={" . $searchpath . "}");
$p->set_option("errorpolicy=return");
if ($p->begin_document($outfilename, "") == 0) {
echo("Error: " . $p->get_errmsg(p));
exit(1);
}
$p->set_info("Creator", "PDFlib Cookbook");
$p->set_info("Title", "starter_path");
/* Start an A4 page */
$p->begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* Construct a pathobject for an arrow shape */
$path= 0;
/* The tip of the arrow gets rounded corners */
$path= $p->add_path_point($path, 200.0, 25.0, "move", "round=10");
$path= $p->add_path_point($path, 200.0, 75.0, "line", "");
/* assign a name to the arrow's tip */
$path= $p->add_path_point($path, 300.0, 0.0, "line", "name=tip");
$path= $p->add_path_point($path, 200.0, -75.0, "line", "");
$path= $p->add_path_point($path, 200.0, -25.0, "line", "");
/* Start a new sub$pathfor the straight base of the arrow */
$path= $p->add_path_point($path, 200.0, -25.0, "move", "");
$path= $p->add_path_point($path, 0.0, -25.0, "line", "");
/* The center of the base can serve as a named attachment point */
$path= $p->add_path_point($path, 0.0, 0.0, "line", "name=base");
$path= $p->add_path_point($path, 0.0, 25.0, "line", "");
$path= $p->add_path_point($path, 200.0, 25.0, "line", "");
$x = 100.0;
$y = 850.0;
/* ----------------------------------------
* Place arrow in its original direction
* ----------------------------------------
*/
$y -= 100.0;
$p->draw_path($path, $x, $y,
"stroke linewidth=3 fill fillcolor=Turquoise " .
"linecap=projecting attachmentpoint=base ");
/* ----------------------------------------
* Scale down arrow and align it to north east
* ----------------------------------------
*/
$y -= 200.0;
$p->draw_path($path, $x, $y,
"stroke linewidth=3 fill fillcolor=Turquoise " .
"linecap=projecting attachmentpoint=base scale=0.5 align={1 1}");
/* ----------------------------------------
* Scale to 50%, use the arrow tip as attachment point,
* and align the arrow to the left
* ----------------------------------------
*/
$y -= 100.0;
$p->draw_path($path, $x, $y,
"stroke linewidth=3 fill fillcolor=Turquoise " .
"linecap=projecting attachmentpoint=tip scale=0.5 align={-1 0}");
/* ----------------------------------------
* Place text on the $path; round all corners to
* allow smoother text at the corners
* ----------------------------------------
*/
$y -= 100.0;
$optlist = sprintf("textpath={path=%d round=10} position={center bottom} " .
"fontname=NotoSerif-Regular fontsize=8",
$path);
$p->fit_textline($text, $x, $y, $optlist);
/* ----------------------------------------
* Use the $pathas clipping $pathfor a Textflow
* ----------------------------------------
*/
$y -= 300.0;
/* Feed the text to the Textflow object */
$tf = $p->add_textflow(0, $text,
"fontname=NotoSerif-Regular fontsize=10 alignment=justify");
/* Use text twice to fill the arrow */
$tf = $p->add_textflow($tf, $text,
"fontname=NotoSerif-Regular fontsize=10 alignment=justify");
if ($tf == 0) {
echo("Error: " . $p->get_errmsg());
exit(1);
}
/* Attach the $path's reference point to the middle left (0%, 50%)
* of the fitbox, and wrap the text inside the $path(inversefill)
*/
$optlist = sprintf( "wrap={inversefill " .
"paths={{path=%d refpoint={0%% 50%%} scale=1.5 }}}",
$path);
$result = $p->fit_textflow($tf, $x, $y, $x+450, $y+225, $optlist);
if ($result == "_stop")
{
/* In this example we don't care about overflow text */
}
$p->delete_textflow($tf);
/* ----------------------------------------
* Query information about the pathobject
* ----------------------------------------
*/
$n = (int) $p->info_path($path, "numpoints", "");
$p->delete_path($path);
$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=starter_path.pdf");
print $buf;
}
catch (PDFlibException $e) {
echo("PDFlib exception occurred in starter_path sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
exit(1);
}
catch (Throwable $e) {
echo($e);
exit(1);
}
$p = 0;
?>