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