set_option("searchpath={" . $searchpath . "}"); /* This means we must check return values of load_font() etc. */ $p->set_option("errorpolicy=return"); $p->set_option("stringformat=utf8"); if ($p->begin_document($outfile, "") == 0) throw new Exception("Error: " . $p->get_errmsg()); $p->set_info("Creator", "PDFlib Cookbook"); $p->set_info("Title", $title); /* ----------------------------------------------------------------- * Define Pattern I, a green pattern with a hatching of rising lines * ----------------------------------------------------------------- * * Define a pattern with a width of w and a height of h. When * repeatedly placing the pattern an x-offset of w and an y-offset * of h is used. The stroke color is defined within the pattern * (painttype=colored, which is default). */ $w = 10; $h = 10; $pattern1 = $p->begin_pattern_ext($w, $h, ""); /* Set the stroke color for the pattern to green. * Draw three lines with an angle of sin(h/w). For a smooth transition * from one line segment to the adjacent when output the pattern * repeatedly: First, set the line cap to beyond the line end. Second, * stroke not one but three line elements with a distance of w between * each other (while having a pattern's x-offset of w). */ $p->setlinewidth($w / 20); $p->set_graphics_option("linecap=2"); $p->setcolor("stroke", "rgb", 0.0, 0.5, 0.5, 0); $p->moveto(0, 0); $p->lineto($w, $h); $p->moveto($w, 0); $p->lineto(2*$w, $h); $p->moveto(-$w, 0); $p->lineto(0, $h); $p->stroke(); $p->end_pattern(); /* -------------------------------------------------- * Define Pattern II with a hatching of falling lines * -------------------------------------------------- * * Define a pattern with a width of w and a height of h. When * repeatedly placing the pattern an x-offset of w and an y-offset * of h is used. The pattern will have no color on its own but will * be colorized later by the fill color which is set at the time the * pattern will be used (painttype=colored, which is default). */ $w = 10; $h = 10; $pattern2 = $p->begin_pattern_ext($w, $h, "painttype=uncolored"); /* Draw three lines with an angle of -sin(h/w). For a smooth transition * from one line segment to the adjacent when output the pattern * repeatedly: First, set the line cap to beyond the line end. Second, * stroke not one but three line elements with a distance of w between * each other (while having a pattern's x-offset of w). */ /* Set the stroke line width for the pattern */ $p->setlinewidth($w / 20); /* Set the line cap beyond the line ends */ $p->set_graphics_option("linecap=2"); /* Define and stroke the path for the pattern */ $p->moveto(0, $h); $p->lineto($w, 0); $p->moveto($w, $h); $p->lineto(2*$w, 0); $p->moveto(-$w, $h); $p->lineto(0, 0); $p->stroke(); $p->end_pattern(); /* --------------------------------------------------------------- * Define Pattern III, a more complex light green hatching pattern * --------------------------------------------------------------- * * The stroke color is defined within the pattern (painttype=colored, * which is default) as a shade of green. */ $w = 5; $h = 10; $pattern3 = $p->begin_pattern_ext($w, $h, ""); /* Define a custom color for the pattern */ $p->setcolor("stroke", "rgb", 0.4, 0.5, 0.2, 0); $p->setlinewidth($w / 10); /* Set the line cap beyond the line end */ $p->set_graphics_option("linecap=2"); /* Define and stroke the path for the pattern to be used */ $p->moveto(0, 0); $p->lineto($w, $h / 2); $p->lineto(0, $h); $p->stroke(); $p->moveto(0, $h / 2); $p->lineto($w / 2, $h / 4); $p->stroke(); $p->moveto($w, $h); $p->lineto($w / 2, 3 * $h / 4); $p->stroke(); $p->end_pattern(); $p->begin_page_ext(500, 500, ""); /* ------------------------------ * Output graphics with pattern I * ------------------------------ * * Set the stroke color to black. * Set the green pattern I as the fill color. */ $p->setcolor("stroke", "gray", 0.0, 0.0, 0.0, 0); $p->setcolor("fill", "pattern", $pattern1, 0, 0, 0); /* Draw a rectangle with the current fill color, i.e. filled with * pattern I repeatedly applied. The rectangle will have a border * colored with the current stroke color which as been set to black * above. */ $p->rect(50, 300, 150, 100); $p->fill_stroke(); /* ------------------------------- * Output graphics with pattern II * ------------------------------- * * Set the fill and stroke color to light red. * Set pattern II as the fill color. Since pattern II has no inherent * stroke color it will use the stroke color currently being set. */ $p->setcolor("fillstroke", "rgb", 1.0, 0.5, 0.5, 0); $p->setcolor("fill", "pattern", $pattern2, 0, 0, 0); /* Draw a rectangle with the current fill color, i.e. filled with * pattern II repeatedly applied. Set the line width of the rectangle * borders to the line width of the pattern */ $p->setlinewidth(0.5); $p->rect(250, 300, 150, 100); $p->fill_stroke(); /* Set the current stroke color to green. Draw an arc segment * as part of a pie chart. The arc will be filled with the green * pattern II set as current fill color above. The borders will be * stroked with the stroke color currently being set to green. */ $p->setlinewidth(1); $p->setcolor("stroke", "rgb", 0.0, 0.5, 0.5, 0); $p->moveto(100, 150); $p->lineto(100, 200); $p->arcn(100, 150, 50, 90, 120); $p->closepath_fill_stroke(); /* Set pattern I as the current fill color */ $p->setcolor("fill", "pattern", $pattern1, 0, 0, 0); /* Set the current stroke color to light red */ $p->setcolor("stroke", "rgb", 1.0, 0.5, 0.5, 0); /* Draw another smaller arc segment as part of the pie chart */ $p->moveto(100, 150); $p->lineto(100, 200); $p->arc(100, 150, 50, 90, 120); $p->closepath_fill_stroke(); /* -------------------------------- * Output graphics with pattern III * -------------------------------- * * Set pattern III as the fill color */ $p->setcolor("fill", "pattern", $pattern3, 0, 0, 0); /* Draw a circle with the current fill color, i.e. filled with * the light green pattern III repeatedly being applied */ $p->circle(350, 150, 100); $p->fill(); $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=fill_pattern.pdf"); print $buf; } catch (PDFlibException $e){ echo("PDFlib exception occurred:\n" . "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " . $e->get_errmsg() . "\n"); exit(1); } catch (Exception $e) { echo($e->getMessage()); exit(1); } $p = 0; ?>