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"); //各種操作 ...
ここではAPIによるアクセスの概要で説明した各手順に対応する関数を列挙します。 各関数の詳細はドライバのapidocディレクトリ内のJavadocか、 オンラインのAPIドキュメントを参照してください。
以下は、サーバー側から取り出したデータを変換するサンプルです。
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に収められています。
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); } }); ...変換処理...
ウェブアプリケーションのサンプルに含まれるjp.cssj.cti.servlet.CSSJFilterは、 Servlet 2.3の「フィルタ」を利用してServletまたはJSPの出力結果をPDFに変換するものです。
サンプルでは、filterディレクトリ内に置かれたファイルをPDFに変換します。 ファイルは静的なファイルのほか、JSPなど動的なファイルでも構いません。
CSSなどのリソースはresourcesファイルに置いています。 これらのファイルに直接アクセスされるのを防ぐために、jp.cssj.cti.servlet.AccessFilterを使うことができます。 このフィルタは、CSSJFilter以外からのアクセスに対して、404エラーを返します。
ドライバのソースはドライバの配布ファイルのsrcディレクトリに収められています。 このソースは、JDK1.4.2以降でコンパイルすることができます。