PDFlib

高度なPDFアプリケーションの開発を支援する定番プログラムライブラリー Supported by インフォテック株式会社

PDFlib pCOS サンプル集(クックブック)

本サンプルプログラムは、PDF の情報を取得する pCOS インターフェースの基本的な機能を実際のプログラムで紹介したものです。

本サイトでダウンロードした PDFlib 製品は、一部機能の制限を除き、評価版として無償でお使いいただけます。

ラッパークラス

PDFlib pCOS サンプル集のサンプルを実行するためのラッパークラスです。この抽象クラスは pCOS サンプル集のソースコードを実行するのに必要です。それぞれのサンプルで pcos_cookbook_example クラスを継承したクラスを作成し、example_code 関数を実装することで使用します。

pCOS サンプル集のソースコードを実行するためには、下記のソースコードを classpath に配置してください。


/*
 * Wrapper class for running the IpCOS Cookbook examples.
 *
 * This abstract class provides a wrapper to run pCOS Cookbook example code over
 * one or multiple files. The user of this class must implement the
 * example_code function.
 *
 * The wrapper class is written without an explicit reference to a specific
 * PDFlib GmbH product. Instead it uses the IpCOS Java interface that
 * exposes the pCOS-related functions.
 *
 * To create the actual object to be used for calling pCOS functions Java
 * reflection is used. This makes it possible to compile the pCOS Cookbook
 * without tying it to a specific PDFlib product. This is not recommended
 * for production code. In production code always the concrete object
 * should be created by normal Java means.
 */
package com.pdflib.cookbook.pcos;

import com.pdflib.IpCOS;

public abstract class pcos_cookbook_example {
    private static final int HEADER_LINE_LENGTH = 65;

    private String[] argv;
    private String readable_name;
    private String search_path;

    /**
     * Constructor taking data for banner, search path and usage.
     * 
     * @param argv
     *            array with input file names
     * @param readable_name
     *            one or two word human readable description of example
     * @param search_path
     *            this directory will be passed to pCOS as search path
     */
    public pcos_cookbook_example(String[] argv, String readable_name,
        String search_path) {
        this.argv = argv;
        this.readable_name = readable_name;
        this.search_path = search_path;
    }

    /**
     * Execute the wrapper that calls example_code for each file.
     *
     * This method is intended to be called from the derived class'
     * main routine. It will check the args array and
     * prints a usage message if it is empty.
     * 
     * Otherwise it will create a IpCOS object, open each filename
     * argument to obtain a document handle and call the
     * example_code routine for each document handle.
     * 
     * If any document provokes an exception the
     * execute function will terminate and the remaining documents
     * will not be processed.
     */
    protected void execute() {
        String class_name = getClass().getSimpleName();
        
        if (argv.length == 0) {
            System.err.println("usage: " + class_name + " <PDF file> ...");
            return;
        }

        String banner = readable_name + " (" + class_name + ".java): ";
        System.out.print(banner);

        int dash_length = HEADER_LINE_LENGTH - banner.length();
        if (dash_length > 0) {
            StringBuffer buffer = new StringBuffer(dash_length);
            for (int i = 0; i < dash_length; i += 1) {
                buffer.append('-');
            }
            System.out.print(buffer.toString());
        }
        System.out.println();

        IpCOS p = null;
        
        // PDFlib product classes that have the IpCOS interface
        String[] pcos_classes = new String[] { "com.pdflib.pdflib",
            "com.pdflib.TET", "com.pdflib.plop" };

        try {
            int i, used_class_index;
            
            for (used_class_index = i = 0; p == null && i < pcos_classes.length; i += 1) {
                try {
                    Class <?> c = Class.forName(pcos_classes[i]);
                    
                    p = (IpCOS) c.getDeclaredConstructor().newInstance();
                    
                    // Remember index for output below
                    used_class_index = i;
                }
                catch (ClassNotFoundException class_not_found) {
                    // continue search
                }
            }
            
            if (p != null) {
                p.set_option("SearchPath=" + search_path);
    
                boolean class_info_printed = false;
                
                for (i = 0; i < argv.length; i += 1) {
                    int doc = p.pcos_open_document(argv[i], "requiredmode=minimum");
                    if (doc == -1)
                        throw new Exception("Error: " + p.get_errmsg());
                    
                    if (!class_info_printed) {
                        /* Print once the class used and the pCOS interface number */
                        int pcosinterface = (int) p.pcos_get_number(0, "pcosinterface");
                        System.out.println("Using class '" + pcos_classes[used_class_index]
                            + "' for running Cookbook example (pCOS Interface "
                            + pcosinterface + ")");
                        class_info_printed = true;
                    }
                    
                    example_code(p, doc);
                    
                    p.pcos_close_document(doc, "");
                }
            }
            else {
                System.err.println("No PDFlib product found for calling pCOS functions!");
                System.err.println("Please add the JAR file of one of the following " +
                                   "PDFlib products to the classpath:");
                System.err.println("PDFlib, TET, PLOP");
            }
        }
        catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
        finally {
            if (p != null) {
                p.delete();
            }
        }
    }

    /**
     * The function that executes the actual Cookbook example code.
     *
     * The wrapper calls this method once for each file provided on the command
     * line. The wrapper passes a IpCOS object created in the
     * execute function and a valid document handle.
     * 
     * @param p
     *            a valid IpCOS object
     * @param doc
     *            document handle of the current input document
     * @throws Exception
     *             the example code throws an exeption if it detects an error
     */
    public abstract void example_code(IpCOS p, int doc) throws Exception;
}

(Nov 10, 2010 - Oct 23, 2020)