PDFlib Cookbook

cookbook

color/web_colornames updated

Create a list of Web colors with color names and RGB color patches.

Download PHP Code  Switch to Java Code  Show Output 

<?php
/*
 * Web color names:
 * Create a list of Web colors with color names and RGB color patches.
 * 
 * The color names are a collection of nearly 150 color names which
 * are supported in many Web contexts. Names and RGB values are built
 * into PDFlib. They are taken from http://www.w3.org/TR/SVG/types.html.
 * 
 * Required software: PDFlib/PDFlib+PDI/PPS 9
 *    
 * Required data: none
 */

/* This is where the data files are. Adjust as necessary. */
$searchpath = dirname(__FILE__,3)."/input";
$outfile = "";
$title = "Web Color Names";

$tbl=0;

$margin = 4;
$fontsize = 10;

/* number of columns */
$nocol = 3*2;
$vertline = "";

/* Height of a table row which is the sum of a font size of 12 and the upper
 * and lower cell margin of 3 each
 */
$rowheight = 18;

/* Width of the first, second, and third column of the table */
$colwidth= array(150, 100);

/* Coordinates of the lower left corner of the table fitbox */
$llx = 35; $lly = 30;
/* Coordinates of the upper right corner of the table fitbox */
$urx = 565; $ury = 807;

$header = array("Web Color name", "color");

/* HTML color values and names */
$colors  =array(
    "aliceblue",
    "antiquewhite",
    "aqua",
    "aquamarine",
    "azure",
    "beige",
    "bisque",
    "black",
    "blanchedalmond",
    "blue",
    "blueviolet",
    "brown",
    "burlywood",
    "cadetblue",
    "chartreuse",
    "chocolate",
    "coral",
    "cornflowerblue",
    "cornsilk",
    "crimson",
    "cyan",
    "darkblue",
    "darkcyan",
    "darkgoldenrod",
    "darkgray",
    "darkgreen",
    "darkgrey",
    "darkkhaki",
    "darkmagenta",
    "darkolivegreen",
    "darkorange",
    "darkorchid",
    "darkred",
    "darksalmon",
    "darkseagreen",
    "darkslateblue",
    "darkslategray",
    "darkslategrey",
    "darkturquoise",
    "darkviolet",
    "deeppink",
    "deepskyblue",
    "dimgray",
    "dimgrey",
    "dodgerblue",
    "firebrick",
    "floralwhite",
    "forestgreen",
    "fuchsia",
    "gainsboro",
    "ghostwhite",
    "gold",
    "goldenrod",
    "gray",
    "grey",
    "green",
    "greenyellow",
    "honeydew",
    "hotpink",
    "indianred",
    "indigo",
    "ivory",
    "khaki",
    "lavender",
    "lavenderblush",
    "lawngreen",
    "lemonchiffon",
    "lightblue",
    "lightcoral",
    "lightcyan",
    "lightgoldenrodyellow",
    "lightgray",
    "lightgreen",
    "lightgrey",
    "lightpink",
    "lightsalmon",
    "lightseagreen",
    "lightskyblue",
    "lightslategray",
    "lightslategrey",
    "lightsteelblue",
    "lightyellow",
    "lime",
    "limegreen",
    "linen",
    "magenta",
    "maroon",
    "mediumaquamarine",
    "mediumblue",
    "mediumorchid",
    "mediumpurple",
    "mediumseagreen",
    "mediumslateblue",
    "mediumspringgreen",
    "mediumturquoise",
    "mediumvioletred",
    "midnightblue",
    "mintcream",
    "mistyrose",
    "moccasin",
    "navajowhite",
    "navy",
    "oldlace",
    "olive",
    "olivedrab",
    "orange",
    "orangered",
    "orchid",
    "palegoldenrod",
    "palegreen",
    "paleturquoise",
    "palevioletred",
    "papayawhip",
    "peachpuff",
    "peru",
    "pink",
    "plum",
    "powderblue",
    "purple",
    "red",
    "rosybrown",
    "royalblue",
    "saddlebrown",
    "salmon",
    "sandybrown",
    "seagreen",
    "seashell",
    "sienna",
    "silver",
    "skyblue",
    "slateblue",
    "slategray",
    "slategrey",
    "snow",
    "springgreen",
    "steelblue",
    "tan",
    "teal",
    "thistle",
    "tomato",
    "turquoise",
    "violet",
    "wheat",
    "white",
    "whitesmoke",
    "yellow",
    "yellowgreen"
);

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

    /* Load the font */
    $font = $p->load_font("NotoSerif-Regular", "unicode", "embedding");
    if ($font == 0)
        throw new Exception("Error: " . $p->get_errmsg());
    
    /* Set some general cell options shared between all cells */
    $optlist = "fittextline={font=" . $font . " fontsize=" . $fontsize .
        " position={left center}} rowheight=" . $rowheight .
        " margin=" . $margin . " ";
     
    
    /* ------------
     * Add a header
     * ------------
     */
 
    /* Set the current row */
    $row = 1;
    for ($i=0; $i< $nocol; $i++){
        $cellopts = $optlist . "colwidth=" . $colwidth[$i%2];
        $tbl = $p->add_table_cell($tbl, $i+1, $row, $header[$i%2], $cellopts);
        if ($tbl == 0)
            throw new Exception("Error: " . $p->get_errmsg());
    }
   
    
    /* ------------------------------------------------
     * For each color, add a row containing three cells
     * ------------------------------------------------
     */
    
    for ($i = 0; $i < count($colors); $i++)
    {
        $col = 1 + 2*($i % ($nocol/2));
        if ($col == 1 ){
            /* when colo is 1 we are in a new row */
            $row++;
        }

        /* --------------------------------------------------------------
        *  Add the HTML color name in the odd column
        * --------------------------------------------------------------
        */
        $cellopts = $optlist . "colwidth=" . $colwidth[$col % 2];

        $tbl = $p->add_table_cell($tbl, $col, $row, $colors[$i], $cellopts);
        if ($tbl == 0)
            throw new Exception("Error: " . $p->get_errmsg());
        
        
        /* --------------------------------------------------------------
        * Add a rectangle filled with the HTML color in the even column
        * --------------------------------------------------------------
        *
        * Since the cell doesn't cover a complete row but only one column it
        * cannot be filled with color using one of the row-based shading
        * options. We apply the Matchbox feature instead to fill the rectangle
        * covered by the cell with the color specified by the HTML color name. 
        */
        $cellopts = "colwidth=" . $colwidth[$col%2] . " matchbox={fillcolor="
                        . $colors[$i] . "}";
        
        $tbl = $p->add_table_cell($tbl, $col+1, $row, "", $cellopts);
        if ($tbl == 0)
            throw new Exception("Error: " . $p->get_errmsg());
        
    } /* for */
    
    
    /* -----------------------------------------------------------------
     * Fit the table. Using "header=1" the table header will include the
     * first line. Using "line=horother linewidth=0.3" the ruling is 
     * specified with a line width of 0.3 for all horizontal lines. 
     * Also draw a vertical line after every second column
     * -----------------------------------------------------------------
     */
    for ($i = 2; $i < ($nocol); $i += 2){
        $vertline .= "{line=vert" . $i . "} ";
    }

    $optlist = "header=1 stroke={ {line=horother linewidth=0.3} " . $vertline . "}";
    
    do {
        $p->begin_page_ext(0, 0, "width=a4.width height=a4.height");

        /* Place the table instance */
        $result = $p->fit_table($tbl, $llx, $lly, $urx, $ury, $optlist);

        if ($result == "_error")
            throw new Exception ("Couldn't place table : " .
                $p->get_errmsg());

        $p->end_page_ext("");

    } while ($result == "_boxfull");

    /* Check the result; "_stop" means all is ok. */
    if (!$result == "_stop")
    {
        if ($result ==  "_error")
        {
            throw new Exception ("Error when placing table: " .
                $p->get_errmsg());
        }
    }
    
    /* This will also delete Textflow handles used in the table */
    $p->delete_table($tbl, "");  
    
    $p->end_document("");

    $buf = $p->get_buffer();
    $len = strlen($buf);

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