graphics/starter_graphics
Create some basic examples of vector graphics.
Download PHP Code Switch to Java Code Show Output
<?php
/*
* Starter Graphics:
* Create some basic examples of vector graphics
*
* Stroke a line, curve, circle, arc, and rectangle using the current line width
* and stroke color. Stroke and fill a rectangle.
* Draw an arc segment by drawing a line and an arc, closing the path and
* filling and stroking it.
* Draw a rectangle and use it as the clipping a path. Draw and fill a circle
* using the clipping path defined.
*
* Required software: PDFlib/PDFlib+PDI/PPS 9
* Required data: none
*/
/* This is where the data files are. Adjust if necessary. */
$searchpath = dirname(__FILE__,3)."/input";
$outfile = "";
$title = "Starter Graphics";
$xt=20; $x = 210; $y=770; $dy=90;
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. */
$font = $p->load_font("NotoSerif-Regular", "unicode", "");
if ($font == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Start an A4 page */
$p->begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* Set the font */
$p->setfont($font, 14);
/* Set the line width */
$p->setlinewidth(2.0);
/* Set the stroke color */
$p->set_graphics_option("strokecolor={rgb 0 0.5 0.5}");
/* Set the fill color */
$p->set_graphics_option("fillcolor={rgb 0 0.85 0.85}");
/* -------------
* Stroke a line
* -------------
*/
/* Set the current point for graphics output */
$p->moveto($x, $y);
/* Draw a line from the current point to the supplied point */
$p->lineto($x+300, $y+50);
/* Stroke the path using the current line width and stroke color, and
* clear it
*/
$p->stroke();
/* Output some descriptive black text */
$p->fit_textline("lineto() and stroke()", $xt, $y, "fillcolor={gray 0}");
/* --------------
* Stroke a curve
* --------------
*/
/* Set the current point for graphics output */
$p->moveto($x, $y-=$dy);
/* Draw a B�zier curve from the current point to (x3, y3), using three
* control points
*/
$p->curveto($x+50, $y+40, $x+200, $y+80, $x+300, $y+30);
/* Stroke the path using the current line width and stroke color, and
* clear it
*/
$p->stroke();
/* Output some descriptive black text */
$p->fit_textline("curveto() and stroke()", $xt, $y, "fillcolor={gray 0}");
/* ---------------
* Stroke a circle
* ---------------
*/
/* Draw a circle at position (x, y) with a radius of 40 */
$p->circle($x, $y-=$dy, 40);
/* Stroke the path using the current line width and stroke color, and
* clear it
*/
$p->stroke();
/* Output some descriptive black text */
$p->fit_textline("circle() and stroke()", $xt, $y, "fillcolor={gray 0}");
/* ---------------------
* Stroke an arc segment
* ---------------------
*/
/* Draw an arc segment counterclockwise at position (x, y) with a radius
* of 40 starting at an angle of 90 degrees and ending at 180 degrees
*/
$p->arc($x, $y-=$dy+20, 40, 90, 180);
/* Stroke the path using the current line width and stroke color, and
* clear it
*/
$p->stroke();
/* Output some descriptive black text */
$p->fit_textline("arc() and stroke()", $xt, $y, "fillcolor={gray 0}");
/* ------------------
* Stroke a rectangle
* ------------------
*/
/* Draw a rectangle at position (x, y) with a width of 200 and a height
* of 50
*/
$p->rect($x, $y-=$dy, 200, 50);
/* Stroke the path using the current line width and stroke color, and
* clear it
*/
$p->stroke();
/* Output some descriptive black text */
$p->fit_textline("rect() and stroke()", $xt, $y, "fillcolor={gray 0}");
/* ----------------
* Fill a rectangle
* ----------------
*/
/* Draw a rectangle at position (x, y) with a width of 200 and a height
* of 50
*/
$p->rect($x, $y-=$dy, 200, 50);
/* Fill the path using current fill color, and clear it */
$p->fill();
/* Output some descriptive black text */
$p->fit_textline("rect() and fill()", $xt, $y, "fillcolor={gray 0}");
/* ---------------------------
* Fill and stroke a rectangle
* ---------------------------
*/
/* Draw a rectangle at position (x, y) with a width of 200 and a height
* of 50
*/
$p->rect($x, $y-=$dy, 200, 50);
/* Fill and stroke the path using the current line width, fill color,
* and stroke color, and clear it
*/
$p->fill_stroke();
/* Output some descriptive black text */
$p->fit_textline("rect() and fill_stroke()", $xt, $y, "fillcolor={gray 0}");
/* -------------------------------------------------------------
* Draw a line and an arc, close the path and fill and stroke it
* -------------------------------------------------------------
*/
/* Set the current point for graphics output */
$p->moveto($x-40, $y-=$dy);
/* Draw a line from the current point to the supplied point */
$p->lineto($x, $y);
/* Draw an arc segment counterclockwise at position (x, y) with a radius
* of 40 starting at an angle of 90 degrees and ending at 180 degrees
*/
$p->arc($x, $y, 40, 90, 180);
/* Close the path and stroke and fill it, i.e. close the current subpath
* (add a straight line segment from the current point to the starting
* point of the path), and stroke and fill the complete current path
*/
$p->closepath_fill_stroke();
/* Output some descriptive black text */
$p->fit_textline("lineto(), arc(), and", $xt, $y+20, "fillcolor={gray 0}");
$p->fit_textline("closepath_fill_stroke()", $xt, $y, "fillcolor={gray 0}");
/* -----------------------------------------------------------------
* Draw a rectangle and use it as the clipping a path. Draw and fill
* a circle and clip it according to the clipping path defined.
* -----------------------------------------------------------------
*/
/* Save the current graphics state including the current clipping
* path which is set to the entire page by default
*/
$p->save();
/* Draw a rectangle at position (x, y) with a width of 200 and a height
* of 50
*/
$p->rect($x, $y-=$dy, 200, 50);
/* Use the current path as the clipping path for subsequent operations
*/
$p->clip();
/* Draw a circle at position (x, y) with a radius of 100 */
$p->circle($x, $y, 80);
/* Fill the path with the current fill color and clear it
*/
$p->fill();
/* Restore the graphics state which has been saved above */
$p->restore();
/* Output some descriptive black text */
$p->fit_textline("rect(), clip(),", $xt, $y+20, "fillcolor={gray 0}");
$p->fit_textline("circle(), and fill()", $xt, $y, "fillcolor={gray 0}");
$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_graphics.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;
?>