PDFlib
BASKET
PDFlib

pdf_import/starter_pcos

Dump information from an existing PDF document

Download Java Code     Switch to PHP Code     Show Output

/* $Id: starter_pcos.java,v 1.9 2007/10/06 19:31:07 katja Exp $

 * pCOS starter:

 * Dump information from an existing PDF document

 *

 * Required software: PDFlib+PDI/PPS 7

 * Required data: PDF document

 */

package com.pdflib.cookbook.pdflib.pdf_import;

import com.pdflib.pdflib;

import com.pdflib.PDFlibException;

import java.text.DecimalFormat;


public class starter_pcos

{

    public static void main (String argv[])

    {

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

    String searchpath = "../input";


    pdflib p = null;

    String pdfinput = "TET-datasheet.pdf";


    final String docoptlist = "requiredmode=minimum";

    int count, pcosmode;

    int i, doc;

    String  objtype;


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


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

         * begin_document() is required.

         */


        /* Open the input document */

        if ((doc = p.open_pdi_document(pdfinput, docoptlist)) == -1)

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


 

        /* --------- general information (always available) */


        pcosmode = (int) p.pcos_get_number(doc, "pcosmode");


        System.out.println("   File name: " +

            p.pcos_get_string(doc,"filename"));


        System.out.println(" PDF version: " +

        p.pcos_get_number(doc, "pdfversion")/10);


        System.out.println("  Encryption: " +

        p.pcos_get_string(doc, "encrypt/description"));


        System.out.println("   Master pw: " +

        ((p.pcos_get_number(doc, "encrypt/master") != 0) ? "yes":"no"));


        System.out.println("     User pw: " +

        ((p.pcos_get_number(doc, "encrypt/user") != 0) ? "yes" : "no"));


        System.out.println("Text copying: " +

        ((p.pcos_get_number(doc, "encrypt/nocopy") != 0) ? "no":"yes"));


        System.out.println("  Linearized: " +

        ((p.pcos_get_number(doc, "linearized") != 0) ? "yes" : "no"));


        System.out.println("      Tagged: " +

        ((p.pcos_get_number(doc, "tagged") != 0) ? "yes" : "no") +"\n");


        if (pcosmode == 0)

        {

        System.out.println(

            "Minimum mode: no more information available\n");

        p.delete();

        System.exit(0);

        }


        /* --------- more details (requires at least user password) */

        System.out.println("No. of pages: " +

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


        DecimalFormat page_dim_format = new DecimalFormat();

        page_dim_format.setMinimumFractionDigits(3);

        page_dim_format.setMaximumFractionDigits(3);


        System.out.println(" Page 1 size: width=" +

         page_dim_format.format(p.pcos_get_number(doc, "pages[0]/width")) +

         ", height=" +

         page_dim_format.format(p.pcos_get_number(doc, "pages[0]/height")));


        count = (int) p.pcos_get_number(doc, "length:fonts");

        System.out.println("No. of fonts: " +  count);


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

        {

        String fonts;


        fonts = "fonts[" + i + "]/embedded";

        if (p.pcos_get_number(doc, fonts) != 0)

            System.out.print("embedded ");

        else

            System.out.print("unembedded ");


        fonts = "fonts[" + i + "]/type";

        System.out.print(p.pcos_get_string(doc, fonts) + " font ");

        fonts = "fonts[" + i + "]/name";

        System.out.println(p.pcos_get_string(doc, fonts));

        }


        System.out.println("");


        if (pcosmode == 1)

        {

        System.out.print(

            "Restricted mode: no more information available");

        p.delete();

        System.exit(0);

        }


        /* ----- document info keys and XMP metadata (requires master pw) */


        count = (int) p.pcos_get_number(doc, "length:/Info");


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

        {

        String info;

        String key;

        int len;


        info = "type:/Info[" + i + "]";

        objtype = p.pcos_get_string(doc, info);


        info = "/Info[" + i + "].key";

        key = p.pcos_get_string(doc, info);

        len = 12 - key.length();

        while (len-- > 0) System.out.print(" ");


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


        /* Info entries can be stored as string or name objects */

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

        {

            info = "/Info[" + i + "]";

            System.out.println("'" + p.pcos_get_string(doc, info) +

                                "'");

        }

        else

        {

            info = "type:/Info[" + i + "]";

            System.out.println("(" + p.pcos_get_string(doc, info) +

             " object)");

        }

        }


        System.out.print("\n" + "XMP meta data: ");



        objtype = p.pcos_get_string(doc, "type:/Root/Metadata");

        if (objtype.equals("stream"))

        {

        byte[] contents;


        contents = p.pcos_get_stream(doc, "", "/Root/Metadata");

        System.out.println(contents.length + " bytes");

        }

        else

        {

        System.out.println("not present");

        }


        p.close_pdi_document(doc);


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

            }

        }

    }

}