BASKET
Search
PDFlib

graphics/fill_pattern

Download Java Code     Switch to PHP Code        Show Output PDF

/*

 * $Id: fill_pattern.java,v 1.14 2016/10/26 09:47:40 tm Exp $

 *

 * Fill pattern:

 * Define some hatching patterns and use them to fill arbitrary shapes.

 *

 * Create a green pattern with a hatching of rising lines and fill a rectangle

 * with it. Create pattern with a hatching of falling lines and fill a

 * rectangle with it using the colors currently being set. Create a colored pie

 * chart using the two hatchings and various stroke colors. Create a more

 * complex hatching pattern and fill a circle with it.

 *

 * Required software: PDFlib/PDFlib+PDI/PPS 9.0.2

 * Required data: none

 */

package com.pdflib.cookbook.pdflib.graphics;


import com.pdflib.pdflib;

import com.pdflib.PDFlibException;


public class fill_pattern

{

    public static void main (String argv[])

    {

        /* This is where the data files are. Adjust if necessary. */

        String searchpath = "../input";

        String outfile = "fill_pattern.pdf";

        String title = "Fill Pattern";


        pdflib p = null;

       

        double w, h;

        int pattern1, pattern2, pattern3;

        int exitcode = 0;


        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, "") == -1)

                throw new Exception("Error: " + p.get_errmsg());


            p.set_info("Creator", "PDFlib Cookbook");

            p.set_info("Title", title + " $Revision: 1.14 $");


            

            /* -----------------------------------------------------------------

             * 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=uncolored).

             */

            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("");


        } catch (PDFlibException e) {

            System.err.print("PDFlib exception occurred:\n");

            System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +

                ": " + e.get_errmsg() + "\n");

            exitcode = 1;

        } catch (Exception e) {

            System.err.println(e.getMessage());

            exitcode = 1;

        } finally {

            if (p != null) {

                p.delete();

            }

            System.exit(exitcode);

        }

    }

}