PDFlib Cookbook

cookbook

interactive/starter_portfolio updated

Package multiple PDF and other documents into a PDF portfolio.

Download Java Code  Switch to PHP Code  Show Output 

/*
 * PDF portfolio starter:
 * Package multiple PDF and other documents into a PDF portfolio.
 * The documents in the portfolio will be assigned predefined
 * and custom metadata fields; for the custom fields a schema description
 * is created.
 *
 * Required software: PDFlib/PDFlib+PDI/PPS 10
 * Required data: PDF and other input documents
 */

package com.pdflib.cookbook.pdflib.interactive;

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

class starter_portfolio {
    public static void main(String argv[]) {
        /* This is where the data files are. Adjust as necessary. */
        final String searchpath = "../input";
        String optlist;
        int i, folder;
        pdflib p = null;
        int exitcode = 0;

        class document {
            document(String filename, String description, String status, int id) {
                this.filename = filename;
                this.description = description;
                this.status = status;
                this.id = id;
            }

            String filename;
            String description;
            String status;
            int id;
        }

        /* The documents for the Portfolio along with description and metadata */
        document root_folder_docs[] = {
            new document("nesrin.jpg", "Zabrisky point", "archived", 300),
            new document("markup_annotations_input.pdf", 
                    "PDF sample with markup annotations",
                    "published", 101),
         };
        document datasheet_docs[] = {

            new document("PLOP-datasheet.pdf",
                    "PDF Linearization, Optimization, Protection", "published",
                    103),
            new document("pCOS-datasheet.pdf",
                    "PDF Information Retrieval Tool", "published", 104) };

        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("starter_portfolio.pdf", "") == -1) {
                throw new Exception("Error: " + p.get_errmsg());
            }

            p.set_info("Creator", "PDFlib starter sample");
            p.set_info("Title", "starter_portfolio");

            /*
             * Insert two files in the root folder along with their description
             * and the following custom fields: status string describing the
             * document status id numerical identifier, prefixed with "PHX"
             */
            for (i = 0; i < root_folder_docs.length; i++) {
                optlist = "description={" + root_folder_docs[i].description
                        + "} " + "fieldlist={ {key=status value="
                        + root_folder_docs[i].status + "} {key=id value="
                        + root_folder_docs[i].id + " prefix=PHX type=text} }";

                /* -1 means root folder */
                p.add_portfolio_file(-1, root_folder_docs[i].filename, optlist);
            }

            /* Create the "datasheets" folder in the root folder */
            folder = p.add_portfolio_folder(-1, "datasheets", 
                "description={Folder with datasheets}");

            /*
             * Insert documents in the "datasheets" folder along with
             * description and custom fields
             */
            for (i = 0; i < datasheet_docs.length; i++) {
                optlist = "description={" + datasheet_docs[i].description
                        + "} fieldlist={ {key=status value="
                        + datasheet_docs[i].status + "} {key=id value="
                        + datasheet_docs[i].id + " prefix=PHX type=text} }";

                /* Add the file to the "datasheets" folder */
                p.add_portfolio_file(folder, datasheet_docs[i].filename,
                        optlist);
            }

            /* Create a single-page document as cover sheet */
            p.begin_page_ext(0, 0, "width=a4.width height=a4.height");

            p.fit_textline("Welcome to the PDFlib Portfolio sample!", 50, 700, 
                "fontname=NotoSerif-Regular fontsize=24");

            p.end_page_ext("");

            /* Set options for Portfolio display */
            optlist = "portfolio={initialview=detail ";

            /* Add schema definition for Portfolio metadata */
            optlist += 
                "schema={ "
                
                /* Some predefined fields are included here to make them visible. */
                + "{order=1 label=Name key=_filename visible editable} "
                + "{order=2 label=Description key=_description visible} "
                + "{order=3 label=Size key=_size visible} "
                + "{order=4 label={Last edited} key=_moddate visible} "

                /* User-defined fields */
                + "{order=5 label=Status key=status type=text editable} "
                + "{order=6 label=ID key=id type=text editable} ";

            optlist += "}}";

            p.end_document(optlist);
        }
        catch (PDFlibException e) {
            System.err.println("PDFlib exception occurred:");
            System.err.println("[" + e.get_errnum() + "] " + e.get_apiname()
                + ": " + e.get_errmsg());
            exitcode = 1;
        }
        catch (Exception e) {
            System.err.println(e);
            exitcode = 1;
        }
        finally {
            if (p != null) {
                p.delete();
            }
            System.exit(exitcode);
        }
    }
}