←前へ 目次↑ 次へ→

3.3. Javaドライバ1

Copper PDF 2.1.0からは、より強力な Javaドライバ バージョン2 が利用可能です。 従来のドライバもサポートされていますが、新しいドライバの使用を検討してください。

3.3.1. 使用方法

Java用ドライバはCopper PDF本体とは別に配布されています。 http://sourceforge.jp/projects/copper/releases/?package_id=8742 からcssj-driver-java 1.x.xをダウンロードしてください。 アーカイブを展開した後にできるlibディレクトリ内のcssj-driver-1.x.x.jarがドライバのライブラリです。 このファイルをクラスパスに追加(あるいはアプリケーションのライブラリディレクトにコピー)してください。

ドライバの窓口となるクラスはjp.cssj.cti.CTIDriverManagerです。 例えばlocalhostの8099番ポートで起動しているcopperdに、ユーザーID"user"、パスワード"kappa"で接続するには、以下のようにします。

//ドライバクラスのインポート
import jp.cssj.cti.CTIDriver;
import jp.cssj.cti.CTIDriverManager;
import jp.cssj.cti.CTISession;

...

CTIDriver driver = CTIDriverManager.createDriverFor("localhost", "8099");
CTISession session = driver.createSession("user", "kappa");

//各種操作
...

3.3.2. APIの概要

ここではAPIによるアクセスの概要で説明した各手順に対応する関数を列挙します。 各関数の詳細はドライバのapidocディレクトリ内のJavadocか、 オンラインのAPIドキュメントを参照してください。

サーバーへの接続・認証

エラーハンドラ・プログレスリスナの設定

出力先の設定

プロパティの設定

リソースの送信・アクセス許可

本体の送信

通信の終了

3.3.3. サンプル

以下は、サーバー側から取り出したデータを変換するサンプルです。

package jp.cssj.cti.examples;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

import jp.cssj.cti.CTIDriver;
import jp.cssj.cti.CTIDriverManager;
import jp.cssj.cti.CTISession;
import jp.cssj.cti.helpers.StdioErrorHandler;

/**
 * サーバーでデータを取得して変換します。
 */
public class ServerResource {
	/** 接続先のホスト名。 */
	private static final String HOST = "localhost";

	/** 接続先のポート番号。 */
	private static final int PORT = 8099;

	/** パスワード。 */
	private static final String PASSWORD = "kappa";

	public static void main(String[] args) throws Exception {
		//ドライバを取得
		CTIDriver driver = CTIDriverManager.createDriverFor(HOST, PORT);
		//接続する(ユーザー名は"user"で固定)
		CTISession session = driver.createSession("user", PASSWORD);
		try {
			//test.pdfに結果を出力する
			OutputStream out = new BufferedOutputStream(new FileOutputStream(
					"test.pdf"));
			try {
				session.setOutput(out, "application/pdf");
				//エラーメッセージを標準出力に表示する
				session.setErrorHandler(StdioErrorHandler.getInstance());
				
				//ハイパーリンクとブックマークを作成する
				session.setProperty("output.pdf.hyperlinks", "true");
				session.setProperty("output.pdf.bookmarks", "true");

				// http://www.cssj.jp/以下にあるリソースへアクセスする
				session.includeResource("http://www.cssj.jp/**");
				// index.htmlを変換
				session.formatMain("http://www.cssj.jp/index.html");
			} finally {
				out.close();
			}
		} finally {
			//セッションを閉じる(忘れやすいので注意!)
			session.close();
		}
	}
}

クライアント側のデータを変換するサンプルを含め、これらのファイルはドライバのsrc/examplesに収められています。

3.3.4. サーブレットの作成

webappにウェブアプリケーションのサンプルが収められています。 このサンプルのソースコードはwebapp/WEB-INF/srcにあります。

このサンプルは、index.pdfにアクセスすると、index.jspの出力結果をPDFに変換されたものが 表示されるというものです。 webappディレクトリをサーブレット・コンテナに配備することで実際に動かすことができます。 web.xml内のcontext-paramの部分を接続先のcopperdに合わせて設定してください。

サンプルのjp.cssj.cti.servlet.AbstractCSSJServletを継承することで、 PDFを出力するサーブレットを簡単に作ることができます。 ドライバを利用してユーザーが全く独自にサーブレットを作ることも可能ですが、 変換結果を直接クライアントを送る場合は、以下のようにContent-Lengthヘッダを送ることを 忘れないで下さい。 Content-Lengthヘッダを送らないと、Acrobat Readerプラグインで表示されない場合があります。

...
import jp.cssj.cti.helpers.ProgressAdapter;
...セッションの作成...
session.setProgressListener(new ProgressAdapter(true) {
	public void contentLength(long contentLength) {
		response.setContentLength((int) contentLength);
	}
});
...変換処理...

3.3.5. フィルターを使ったServlet/JSPの変換

ウェブアプリケーションのサンプルに含まれるjp.cssj.cti.servlet.CSSJFilterは、 Servlet 2.3の「フィルタ」を利用してServletまたはJSPの出力結果をPDFに変換するものです。

サンプルでは、filterディレクトリ内に置かれたファイルをPDFに変換します。 ファイルは静的なファイルのほか、JSPなど動的なファイルでも構いません。

CSSなどのリソースはresourcesファイルに置いています。 これらのファイルに直接アクセスされるのを防ぐために、jp.cssj.cti.servlet.AccessFilterを使うことができます。 このフィルタは、CSSJFilter以外からのアクセスに対して、404エラーを返します。

3.3.6. ソースコード

ドライバのソースはドライバの配布ファイルのsrcディレクトリに収められています。 このソースは、JDK1.4.2以降でコンパイルすることができます。


←前へ 目次↑ 次へ→
Copper PDF ©2012 Zamasoft. All rights reserved.