BASKET
Search
PDFlib

blocks/dump_block_properties

Download Java Code      Switch to PHP code      Show Output File      Show Input File

/*

 * $Id: dump_block_properties.java,v 1.1 2016/01/12 16:46:55 stm Exp $

 *

 * Dump block information from an existing PDF document.

 *

 * Required software: PDFlib+PDI/PPS 9

 * Required data: PDF input file

 */


package com.pdflib.cookbook.pdflib.blocks;


import com.pdflib.pdflib;

import com.pdflib.PDFlibException;


public class dump_block_properties {

        static String getProperty(pdflib p, int doc, String info)

                        throws PDFlibException {

                String output = "";

                String objtype = p.pcos_get_string(doc, "type:" + info);

                if (objtype.equals("name") || objtype.equals("string")

                                || objtype.equals("boolean")) {

                        output += p.pcos_get_string(doc, info);

                } else if (objtype.equals("number")) {

                        output += p.pcos_get_number(doc, info);

                } else if (objtype.equals("array")) {

                        output += getArrayPropertyAsString(p, doc, info);

                } else if (objtype.equals("dict")) {

                        output += getDictPropertyAsString(p, doc, info);

                } else {

                        output += "[ info unknown type ($objtype)]";

                }

                return output;

        }


        static String getDictPropertyAsString(pdflib p, int doc, String path)

                        throws PDFlibException {

                String output = "";

                int length = (int) p.pcos_get_number(doc, "length:" + path);

                for (int i = 0; i < length; i++) {

                        String info = path + "[" + i + "].key";

                        String key = p.pcos_get_string(doc, info);

                        output += key + " [";

                        info = path + "[" + i + "]";

                        output += getProperty(p, doc, info);

                        output += "] ";

                }

                return "[ " + output + "]";

        }


        static String getArrayPropertyAsString(pdflib p, int doc, String path)

                        throws PDFlibException {

                String output = "";

                int length = (int) p.pcos_get_number(doc, "length:" + path);

                for (int i = 0; i < length; i++) {

                        String info = path + "[" + i + "]";

                        output += getProperty(p, doc, info);

                        output += " ";

                }

                return "[ " + output + "]";

        }


        public static void main(String argv[]) {

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

                String searchpath = "../input";

                String pdfinput = "announcement_blocks.pdf";

                String docoptlist = "requiredmode=minimum";


                pdflib p = null;


                int exitcode = 0;


                try {

                        String title = "Block properties for \"" + pdfinput + "\":";

                        System.out.println(title);

                        System.out.println();


                        p = new pdflib();


                        p.set_option("searchpath={" + searchpath + "}");


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

                        p.set_option("errorpolicy=return");


                        /*

                         * Enable the following line if you experience crashes on OS X (see

                         * PDFlib-in-PHP-HowTo.pdf for details):

                         * p.set_option("usehostfonts=false");

                         */


                        /*

                         * We do not create any output document, so no call to

                         * begin_document() is required.

                         */


                        /* Open the input document */

                        int doc = p.open_pdi_document(pdfinput, docoptlist);

                        if (doc == -1) {

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

                        }


                        int pagecount = (int) p.pcos_get_number(doc, "length:pages");

                        for (int page = 0; page < pagecount; page++) {


                                int count = (int) p.pcos_get_number(doc,

                                                "length:pages[" + page + "]/blocks");


                                for (int i = 0; i < count; i++) {

                                        String info = "type:pages[" + page + "]/blocks[" + i + "]";

                                        String objtype = p.pcos_get_string(doc, info);


                                        info = "pages[" + page + "]/blocks[" + i + "].key";

                                        String key = p.pcos_get_string(doc, info);

                                        System.out.println(key + ":");


                                        String pcospath = "pages[" + page + "]/blocks/" + key;

                                        int length = (int) p.pcos_get_number(doc,

                                                        "length:" + pcospath);

                                        for (int j = 0; j < length; j++) {

                                                info = pcospath + "[" + j + "].key";

                                                key = p.pcos_get_string(doc, info);

                                                String blockproppath = pcospath + "/" + key;

                                                objtype = p.pcos_get_string(doc,

                                                                "type:" + blockproppath);

                                                System.out.print("  " + objtype + "(" + blockproppath

                                                                + "\t" + key + "\t");

                                                System.out.println(getProperty(p, doc, blockproppath));

                                        }


                                        System.out.println();

                                }

                        }


                        p.close_pdi_document(doc);


                } 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.getMessage());

                        exitcode = 1;

                } finally {

                        if (p != null) {

                                p.delete();

                        }

                        System.exit(exitcode);

                }

        }

}