Perl用ドライバはCopper PDF本体とは別に配布されています。 http://sourceforge.jp/projects/copper/releases/?package_id=8741 からダウンロードしてください。 アプリケーションは、codeディレクトリをライブラリパスに含め、 use CSSJ::Driver; でモジュールをインポートしてください。
ここではAPIによるアクセスの概要で説明した各手順に対応する関数を列挙します。 各関数の詳細はapidoc内のAPIドキュメントか、 オンラインのAPIドキュメントを参照してください。
Perl用インターフェースは、ファイルハンドルに対する出力をキャプチャしてサーバーに送ります。 以下の例では$session->start_mainと$session->flush_mainの間で出力されたHTMLが変換されます。
#!/usr/bin/perl =head1 NAME コンテンツ変換サンプル =head2 概要 start_mainとend_mainの間の出力結果をPDFに変換します。 =cut use lib '../code'; # ドライバのインポート use CSSJ::Driver(create_driver_for); # ドライバの作成 $driver = create_driver_for('localhost', 8099, 'EUC-JP'); # 接続 $session = $driver->create_session('user', 'kappa'); # Content-Lengthヘッダの送信 $session->set_content_length_func (sub { my $length = shift; print "Content-Length: $length\n\n"; binmode(STDOUT); }); # Content-Typeヘッダの送信 print "Content-Type: application/pdf\n"; # リソースの送信 $session->start_resource(STDOUT, 'file:/skin.css'); print << 'EOF'; p { background-color: Gray; } EOF $session->end_resource(STDOUT); # 本体の送信 $session->start_main(STDOUT, 'file:/test.html', 'text/html', 'EUC-JP'); print << 'EOF'; <html> <head> <title>テストドキュメント</title> <link rel="StyleSheet" type="text/css" href="skin.css"> </head> <body> <p>こんにちは</p> </body> </html> EOF $session->end_main(STDOUT); # セッションを閉じる $session->close();
start_resource,start_mainにファイルハンドルを渡すと、 それぞれend_resource,end_mainが呼び出されるまで、 ファイルハンドルに出力されたデータをcopperdに送ります。 その間、ファイルハンドルの本来の機能(STDOUTでは標準出力にデータを送るなど)は使えなくなります。
requireで他のプログラムを呼び出すことで、他のプログラムの出力結果を変換することもできます。 ただし、CGIとして作成されたPerlプログラムは、HTTPヘッダを出力するため、そのままではヘッダもPDF内に表示されてしまいます。 start_resource, start_mainの最後の引数に1を設定すると、最初の空行までの間をヘッダと認識して除去します。
$session->start_main(STDOUT, 'file:/test.html', 'text/html', 'EUC-JP', 1); require 'program.cgi'; $session->end_main(STDOUT);