PDFlib
BASKET
PDFlib

blocks/starter_block

Import a PDF page containing blocks, and process all blocks. The blocks are retrieved via pCOS, and the block filling functions are used to visualize the blocks on the output page. A real-world application would of course fill the blocks with data retrieved from some external data source.

Download PHP Code     Switch to Java Code      Show Output PDF

<?

/* $Id: starter_block.php,v 1.5 2012/05/03 14:00:41 stm Exp $

 *

 * Block starter:

 * Import a PDF page containing blocks and fill text and image

 * blocks with some data. For each addressee of the simulated

 * mailing a separate page with personalized information is

 * generated.

 * A real-world application would of course fill the blocks with data

 * retrieved from some external data source.

 *

 * Required software: PPS 8 or above

 * Required data: input PDF, image

 */


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

$searchpath = dirname(dirname(dirname(__FILE__)))."/input";

$outfile = "";

$infile = "block_template.pdf";

$imagefile = "new.jpg";


/* Names of the person-related blocks contained on the imported page */

$addressblocks = array(

    "name", "street", "city"

);


/* number of address blocks */

$nblocks = count($addressblocks);


/* Data related to various persons used for personalization */

$persons = array(

    array("Mr Maurizio Moroni", "Strada Provinciale 124", "Reggio Emilia"),

    array("Ms Dominique Perrier", "25, rue Lauriston", "Paris"),

    array("Mr Liu Wong", "55 Grizzly Peak Rd.", "Butte")

);


$npersons = count($persons);


/* Static text simulates database-driven variable contents */

$intro = "Dear";

$goodbye = "Yours sincerely,\nVictor Kraxi";

$announcement =

    "Our <fillcolor=red>BEST PRICE OFFER<fillcolor=black> includes today:" .

    "\n\n" .

    "Long Distance Glider\nWith this paper rocket you can send all your " .

    "messages even when sitting in a hall or in the cinema pretty near " .

    "the back.\n\n" .

    "Giant Wing\nAn unbelievable sailplane! It is amazingly robust and " .

    "can even do aerobatics. But it is best suited to gliding.\n\n" .

    "Cone Head Rocket\nThis paper arrow can be thrown with big swing. " .

    "We launched it from the roof of a hotel. It stayed in the air a " .

    "long time and covered a considerable distance.\n\n" .

    "Super Dart\nThe super dart can fly giant loops with a radius of 4 " .

    "or 5 meters and cover very long distances. Its heavy cone point is " .

    "slightly bowed upwards to get the lift required for loops.\n\n" .

    "Visit us on our Web site at www.kraxi.com!";


try {

    $p = new pdflib();


    $p->set_parameter("SearchPath", $searchpath);


    /* This means we must check return values of load_font() etc. */

    $p->set_parameter("errorpolicy", "return");


    if ($p->begin_document($outfile,

            "destination={type=fitwindow} pagelayout=singlepage") == 0) {

        throw new Exception("Error: " . $p->get_errmsg());

    }


    $p->set_info("Creator", "PDFlib starter sample");

    $p->set_info("Title", "starter_block");


    /* Open the Block template which contains PDFlib Blocks */

    $indoc = $p->open_pdi_document($infile, "");

    if ($indoc == 0) {

        throw new Exception("Error: " . $p->get_errmsg());

    }


    /* Open the first page and clone the page size */

    $inpage = $p->open_pdi_page($indoc, 1, "cloneboxes");

    if ($inpage == 0) {

        throw new Exception("Error: " . $p->get_errmsg());

    }


    $image = $p->load_image("auto", $imagefile, "");


    if ($image == 0) {

        throw new Exception("Error: " . $p->get_errmsg());

    }


    /* Based on the imported page generate several pages with the blocks

     * being filled with data related to different persons

     */

    for ($i = 0; $i < $npersons; $i++)

    {

        /* Start the output page with a dummy size */

        $p->begin_page_ext(10, 10, "");


        /* Place the imported page on the output page, and clone all

         * page boxes which are present in the input page; this will

         * override the dummy size used in begin_page_ext().

         */

        $p->fit_pdi_page($inpage, 0, 0, "cloneboxes");


        /* Option list for text blocks */

        $optlist = "encoding=winansi embedding";


        /* Loop over all person-related blocks. Fill the j-th block with the

         * corresponding entry of the persons array.

         */

        for ($j = 0; $j < $nblocks; $j++) {

            if ($p->fill_textblock($inpage, $addressblocks[$j],

                    $persons[$i][$j], $optlist) == 0)

                printf("Warning: %s\n", $p->get_errmsg());

        }


        /* Fill the "intro" block */

        $buf = sprintf( "%s %s,", $intro, $persons[$i][0]);

        if ($p->fill_textblock($inpage, "intro", $buf, $optlist) == 0)

            printf("Warning: %s\n", $p->get_errmsg());


        /* Fill the "announcement" block */

        if ($p->fill_textblock($inpage, "announcement", $announcement,

                $optlist) == 0)

            printf("Warning: %s\n", $p->get_errmsg());


        /* Fill the "goodbye" block */

        if ($p->fill_textblock($inpage, "goodbye", $goodbye,

                $optlist) == 0)

            printf("Warning: %s\n", $p->get_errmsg());


        /* Fill the image block */

        $optlist = "";

        if ($p->fill_imageblock($inpage, "icon", $image, $optlist) == 0)

            printf("Warning: %s\n", $p->get_errmsg());


        $p->end_page_ext("");

    }


    $p->close_pdi_page($inpage);

    $p->close_pdi_document($indoc);

    $p->close_image($image);


    $p->end_document("");


    $buf = $p->get_buffer();

    $len = strlen($buf);


    header("Content-type: application/pdf");

    header("Content-Length: $len");

    header("Content-Disposition: inline; filename=starter_block.pdf");

    print $buf;


}

catch (PDFlibException $e) {

    die("PDFlib exception occurred in starter_block sample:\n" .

        "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .

        $e->get_errmsg() . "\n");

}

catch (Exception $e) {

    die($e);

}


$p = 0;

?>