PDFlib Cookbook

cookbook
/* $Id: starter_pcos.java,v 1.12 2013/01/15 10:12:02 stm Exp $
 * pCOS starter:
 * Dump information from an existing PDF document
 *
 * Required software: PDFlib+PDI/PPS 9
 * 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_option("searchpath={" + searchpath + "}");

			/* This means we must check return values of load_font() etc. */
			p.set_option("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") + "\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("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();

			boolean 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.print("\nXMP 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.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();
			}
		}
	}
}

pdf_import/starter_pcos

Download Java Code     Switch to PHP Code     Show Output