PDFlib Cookbook

cookbook

color/spot_color_shading

Define and use several spot colors as shading.

Download PHP Code  Switch to Java Code  Show Output 

<?php
/*
 * $Id$
 * 
 * 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
 */
/* This is where the data files are. Adjust as necessary. */
$searchpath = "../input";
$outfile = "";
$title = "Spot color shading";

$y = 600; $x = 30; $width = 700; $height = 50; $fontsize = 14; $leading = 21;
$exitcode = 0;

try {
    $p = new pdflib();

    $version = 100 * $p->get_option("major", "")
                + 10 * $p->get_option("minor", "")
                + $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 stringformat=utf8");

    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("");
    $buf = $p->get_buffer();
    $len = strlen($buf);

    header("Content-type: application/pdf");
    header("Content-Length: $len");
    header("Content-Disposition: inline; spot_color_shading.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;