BASKET
Search
PDFlib

table/mixed_table_contents

Download Java Code        Switch to PHP Code      Show Output PDF

/* $Id: mixed_table_contents.java,v 1.7 2013/01/15 10:12:07 stm Exp $

 * Mixed table contents:

 * Demonstrate how to place various kinds of contents in table cells spanning

 * one or more columns or rows

 *

 * Create a table with various kinds of contents.

 * Place a text line spanning several columns and colorize the background of the

 * cell.

 * Place a text line and a Textflow in two neighbour cells of the same row and

 * vertically align them so that they have the same distance from the left and

 * upper cell borders.

 * Place an image in a cell spanning several rows and place a text line on top

 * of it in the same cell.

 *

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

 * Required data: image file

 */

package com.pdflib.cookbook.pdflib.table;


import com.pdflib.pdflib;

import com.pdflib.PDFlibException;


public class mixed_table_contents

{

    public static void main (String argv[])

    {

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

    String searchpath = "../input";

    String outfile = "mixed_table_contents.pdf";

    String title = "Mixed Table Contents";


    pdflib p = null;

    int normalfont, boldfont, image, tf=-1, tbl=-1;

    String tftext, result, optlist;

    String imagefile = "kraxi_logo.tif";

   

    /* Width of the first, second, and third column of the table */

    final int c1 = 50, c2 = 120, c3 = 90;

   

    /* Coordinates of the lower left and upper right corners of the table

     * fitbox. The width of the fitbox matches the sum of the widths of the

     * three table columns.

     */

    final double llx = 100, lly = 500, urx = 360, ury = 600;

   

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


        /* Load the font */

        boldfont = p.load_font("Helvetica-Bold", "unicode", "");

        if (boldfont == -1)

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

       

        normalfont = p.load_font("Helvetica", "unicode", "");

        if (normalfont == -1)

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


        p.begin_page_ext(0, 0, "width=a4.width height=a4.height");

               

       

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

         * Adding the first cell

         * ---------------------

         *

         * The cell will be placed in the first column of the first row and will

         * span three columns.

         * The first column has a width of 50 points.

         * The text line is centered vertically and horizontally, with a margin

         * of 4 points from all borders.

         */

        optlist = "fittextline={font=" + boldfont + " fontsize=12" +

            " position=center} margin=4 colspan=3 colwidth=" + c1;


        tbl = p.add_table_cell(tbl, 1, 1, "Our Paper Plane Models", optlist);

        if (tbl == -1)

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

 

       

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

         * Adding the second cell spanning two columns

         * -------------------------------------------

         *

         * The cell is placed in the first column of the second row and spans

         * two columns.

         * The first column has a width of 50 points.

         * The row height is 14 points.

         * The text line is horizontally positioned on the left and vertically

         * centered, with a margin of 4 points from all borders.

         * Since we want to vertically align text lines and a Textflow we would

         * like to have an exact font size of 8 but using the option

         * "fontsize=8" does not exactly represent the letter height but adds

         * some space below and above. However, the height of an uppercase

         * letter is exactly represented by the capheight value of the font. For

         * this reason use "fontsize={capheight=6}" which will approximately

         * result in a font size of 8 points and (along with "margin=4"), will

         * sum up to an overall height of 14 points corresponding to the

         * "rowheight" option.

         * Since the cell doesn't cover a complete row but only two of

         * three columns it cannot be filled with color using on of the

         * row-based shading options. We apply the Matchbox feature instead to

         * fill the rectangle covered by the cell with a gray background color.

         */

        optlist = "fittextline={position={left top} font=" + boldfont +

            " fontsize={capheight=6}} rowheight=14 colwidth=" + c1 +

            " margin=4 colspan=2 matchbox={fillcolor={gray .92}}";

       

        tbl = p.add_table_cell(tbl, 1, 2, "1  Giant Wing", optlist);

        if (tbl == -1)

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

       

       

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

         * Adding three more text line cells

         * ---------------------------------

         *

         * Add two more text lines in the first column of the third row as well

         * as in the first column of the fourth row. For a description of the

         * options see above,

         */

        optlist = "fittextline={position={left top} font=" + normalfont +

            " fontsize={capheight=6}} rowheight=14 colwidth=" + c1 +

            " margin=4";

       

        tbl = p.add_table_cell(tbl, 1, 3, "Material", optlist);

        if (tbl == -1)

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


        tbl = p.add_table_cell(tbl, 1, 4, "Benefit", optlist);

        if (tbl == -1)

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

       

        /* Add another text line in the second column of the third row with a

         * column width of 120. For a description of the options see above.

         */

        optlist = "fittextline={position={left top} font=" + normalfont +

            " fontsize={capheight=6}} rowheight=14 colwidth=" + c2 +

            " margin=4";


        tbl = p.add_table_cell(tbl, 2, 3, "Offset print paper 220g/sqm",

            optlist);

        if (tbl == -1)

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

       

       

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

         * Adding the Textflow cell

         * ------------------------

         *

         */

        tftext =

                "It is amazingly robust and can even do aerobatics. " +

                "But it is best suited to gliding.";

       

        /* Prepare the option list for adding the Textflow

         *

         * Use "fontsize={capheight=6}" which will approximately result in a

         * font size of 8 points and (along with "margin=4"), will sum up to an

         * overall height of 14 points as for the text lines above.

         */

        optlist = "font=" + normalfont + " fontsize={capheight=6} leading=110%";

       

        /* Add the Textflow to be placed in a table cell later */

        tf = p.add_textflow(-1, tftext, optlist);

        if (tf == -1)

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

       

        /* Prepare the option list for adding the Textflow table cell

         *

         * The first line of the Textflow should be aligned with the baseline of

         * the "Benefit" text line. At the same time, the "Benefit" text should

         * have the same distance from the top cell border as the "Material"

         * text. To avoid any space from the top add the Textflow cell using

         * "fittextflow={firstlinedist=capheight}". Then add a margin of 4

         * points, the same as for the text lines.

         */

        optlist = "textflow=" + tf + " fittextflow={firstlinedist=capheight} " +

            "colwidth=" + c2 + " margin=4";


        tbl = p.add_table_cell(tbl, 2, 4, "", optlist);

        if (tbl == -1)

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

       

       

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

         * Add the image cell with a text line

         * -----------------------------------

         *

         * The image is placed in a cell starting in the third column of the

         * second row and spans three rows.

         * The column width is 90 points. The cell margins are set to 4 points.

         */

        image = p.load_image("auto", imagefile, "");

        if (image == -1)

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


        optlist = "fittextline={font=" + boldfont + " fontsize=9} image=" +

            image +     " colwidth=" + c3 + " rowspan=3 margin=4";


        tbl = p.add_table_cell(tbl, 3, 2, "Amazingly robust!", optlist);

        if (tbl == -1)

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

       

       

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

         * Fit the table

         * -------------

         *

         * Using "header=1" the table header will include the first line.

         * The "fill" option and the suboptions "area=header" and

         * "fillcolor={rgb 0.8 0.8 0.87}" specify the header row(s) to be filled

         * with the supplied color.

         * The "stroke" option and the suboptions "line=frame linewidth=0.8"

         * define the ruling of the table frame with a line width of 0.8.

         * Using "line=other linewidth=0.3" the ruling of all cells is specified

         * with a line width of 0.3.

         */

        optlist = "header=1 fill={{area=header fillcolor={rgb 0.8 0.8 0.87}}}" +

            " stroke={{line=frame linewidth=0.8} {line=other linewidth=0.3}}";

       

        result = p.fit_table(tbl, llx, lly, urx, ury, optlist);

       

        /* Check the result; "_stop" means all is ok */

        if (!result.equals("_stop")) {

                if (result.equals( "_error"))

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

                else {

                        /* Other return values require dedicated code to deal with */

                }

        }

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

        } catch (Exception e) {

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

        } finally {

            if (p != null) {

                p.delete();

            }

        }

    }

}