PDFlib
KAUFEN
PDFlib

interchange/dumper

pCOS sample application for dumping PDF information.

Download Java Code     Show Output     Show Input PDF

package com.pdflib.cookbook.pcos.interchange;


import java.text.DecimalFormat;


import com.pdflib.pCOSException;

import com.pdflib.pCOS;

import com.pdflib.cookbook.pcos.pcos_cookbook_example;


/**

 * pCOS sample application for dumping PDF information

 *

 * Required software: pCOS interface 3 (pCOS 3.x, PDFlib+PDI/PPS 7.x, TET 2.2,

 * PLOP 3.x) <br>

 * Required data: PDF document

 *

 * @version $Id: dumper.java,v 1.12 2010/09/27 13:24:26 stm Exp $

 */

public class dumper extends pcos_cookbook_example {

    // private static final String DOCOPTLIST = "requiredmode=minimum";

    private static final String DOCOPTLIST = "requiredmode=restricted password=demo";


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

    private final static String SEARCH_PATH = "../input";


    public void example_code(pCOS p, String filename) throws pCOSException,

        Exception {

        int count, pcosmode;

        int i;

        boolean plainmetadata;

        String objtype;


        /* Open the PDF document */

        int doc = p.open_document(filename, DOCOPTLIST);

        if (doc == -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_string(doc, "pdfversionstring"));


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


        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("PDF/X status: " + p.pcos_get_string(doc, "pdfx"));


        System.out.println("PDF/A status: " + p.pcos_get_string(doc, "pdfa"));


        boolean xfa_present = !p

            .pcos_get_string(doc, "type:/Root/AcroForm/XFA").equals("null");

        System.out.println("    XFA data: " + (xfa_present ? "yes" : "no"));


        System.out.println("  Tagged PDF: "

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


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

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


        DecimalFormat page_dim_format = new DecimalFormat();

        page_dim_format.setMinimumFractionDigits(0);

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


        plainmetadata = p.pcos_get_number(doc, "encrypt/plainmetadata") != 0;


        if (pcosmode == 1 && !plainmetadata

            && p.pcos_get_number(doc, "encrypt/nocopy") != 0) {

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

        System.out.print("XMP metadata: ");


        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.print(contents.length + " bytes ");

            System.out.println("");

        }

        else {

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

        }


        p.close_document(doc);

    }


    public dumper(String[] argv, String readable_name, String search_path,

        String full_rcs_file_name, String revision) {

        super(argv, readable_name, search_path, full_rcs_file_name, revision);

    }


    public static void main(String argv[]) {

        dumper example = new dumper(argv, "General info", SEARCH_PATH,

            "$RCSfile: dumper.java,v $", "$Revision: 1.12 $");

        example.execute();

    }

}