PDFlib Cookbook

cookbook

color/spot_color_shading

Download Java Code     Switch to PHP Code     Show Output PDF

/*
 * Shadings with N=2/3/4 Pantone spot colors as stop colors
 * PDFlib automatically creates a suitable DeviceN color space in which
 * a shading between multiple spot colors can be expressed.
 *
 * Required software: PDFlib/PDFlib+PDI/PPS 9.1.1
 * (in older PDFlib versions the shading() method will complain
 * "Color spaces of shading's colors must not be different")
 * 
 * Required data: none
 */
package com.pdflib.cookbook.pdflib.color;

import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

public class spot_color_shading {
    public static void main(String argv[]) {
        /* This is where the data files are. Adjust as necessary. */
        String searchpath = "../input";
        String outfile = "spot_color_shading.pdf";
        String title = "Spot color shading";

        pdflib p = null;
        int font, sh, shp;
        int y = 600, x = 30, width = 700, height = 50, fontsize = 14,
                leading = 21;
        int exitcode = 0;

        try {
            p = new pdflib();

            int version = 100 * (int) p.get_option("major", "")
                            + 10 * (int) p.get_option("minor", "")
                            + (int) p.get_option("revision", "");

            if (version < 911) {
                throw new Exception(
                        "Error: spot_color_shading requires PDFlib 9.1.1 or newer");
            }

            p.set_option("searchpath={" + searchpath + "}");

            /* This means that errors in load_font() etc. throw an exception */
            p.set_option("errorpolicy=exception");

            if (p.begin_document(outfile, "") == -1)
                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("Helvetica-Bold", "unicode", "");

            /* Start the page */
            p.begin_page_ext(0, 0, "width=a4.height height=a4.width");

            p.setfont(font, fontsize);

            /*
             * *******************************************************
             * Define a shading color based on two Pantone spot colors
             */
            p.fit_textline(
                    "Shading with spot colors PANTONE 123 U, PANTONE 289 U:", x,
                    y -= 2 * leading, "fillcolor=black");

            y -= height + fontsize;

            /* Create axial shading based on two Pantone spot colors */
            sh = p.shading("axial", x, y, x + width, y, 0, 0, 0, 0,
                    "startcolor={spotname {PANTONE 123 U} 1} "
                            + "  endcolor={spotname {PANTONE 289 U} 1}");

            shp = p.shading_pattern(sh, "");
            p.set_graphics_option("fillcolor={pattern " + shp + "}");

            /* Fill a rectangle with the shading */
            p.rect(x, y, width, height);
            p.fill();

            /*
             * *******************************************************
             * Define a shading based on three Pantone spot colors
             */
            p.fit_textline(
                    "Shading with spot colors PANTONE 123 U, PANTONE 289 U, PANTONE Rubine Red U:",
                    x, y -= 2 * leading, "fillcolor=black");

            y -= height + fontsize;

            /*
             * Create axial shading based on three Pantone spot colors, using
             * 100% of each component at 0%, 50%, 100%, respectively.
             */
            sh = p.shading("axial", x, y, x + width, y, 0, 0, 0, 0,
                    "stopcolors={  0%  {spotname {PANTONE 123 U} 1} "
                            + " 50%  {spotname {PANTONE 289 U} 1} "
                            + "100%  {spotname {PANTONE Rubine Red U} 1} }");

            shp = p.shading_pattern(sh, "");
            p.set_graphics_option("fillcolor={pattern " + shp + "}");

            /* Fill a rectangle with the shading */
            p.rect(x, y, width, height);
            p.fill();

            /*
             * *******************************************************
             * Define a shading based on four Pantone spot colors
             */
            p.fit_textline(
                    "Shading with spot colors PANTONE 123 U, PANTONE 289 U, PANTONE Rubine Red U, PANTONE 1215 U:",
                    x, y -= 2 * leading, "fillcolor=black");
            y -= height + fontsize;

            /*
             * Create axial shading based on DeviceN color, using 100% of each
             * component distributed over the range 0%-100%
             */
            sh = p.shading("axial", x, y, x + width, y, 0, 0, 0, 0,
                    "stopcolors={  0%  {spotname {PANTONE 123 U} 1} "
                            + " 33%  {spotname {PANTONE 289 U} 1} "
                            + " 66%  {spotname {PANTONE Rubine Red U} 1} "
                            + "100%  {spotname {PANTONE 1215 U} 1} }");

            shp = p.shading_pattern(sh, "");
            p.set_graphics_option("fillcolor={pattern " + shp + "}");

            /* Fill a rectangle with the shading */
            p.rect(x, y, width, height);
            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);
        }
    }
}