ColdFusion-開発効率を求められる今だから知りたい高性能Webアプリケーションサーバー

第6回 ColdFusionでPDFを扱う

この記事を読むのに必要な時間:およそ 4.5 分

第5回目の記事ではHTMLフォームからのデータの扱いについて学びました。フォームからPOSTで送信されたデータはFormスコープに,GETで送られたデータはUrlスコープに代入されることが分かりました。

それと併せて,あるスコープに変数が定義されているかどうかをStructKeyExists()関数で調べる方法を学びました。IsDefined()関数でも同様のことが可能ですが,IsDefined()関数は参照可能なスコープを全て辿っていってしまうため,予期しない値を返すことを学びました。

今回はAdobe製品群の一員となったことで強化されたPDF機能を学びます。

HTMLをPDFに変換する

ColdFusion MX 7からの機能ですが,cfdocumentタグを使用することで,cfdocumentタグで囲った中身のHTMLをPDFに変換することができます。簡単な例では以下のようなものになります。{cf_root}フォルダ({cf_root}はColdFusionをインストールしたディレクトリです。Windowsでは『C:\ColdFusion8』になります)内にある『wwwroot』の中に『gihyo』という名前のフォルダを作り,その中に『6』というフォルダを作ってください。『6』のフォルダの中に以下のような中身のファイルをcfdocument.cfmとして保存してください(ファイルのパスは{cf_root}/wwwroot/gihyo/6/cfdocument.cfmになります)。なお保存時の文字コードはUTF-8としてください。その後,http://127.0.0.1:8500/gihyo/6/cfdocument.cfmでアクセスしてみましょう。

<cfprocessingdirective pageEncoding="UTF-8" />
<cfdocument format="PDF">
<style>
h1{
  border-left: 5px solid #067499;
  border-bottom: 1px solid #067499;
  padding-left: 0.5em;
  font-size: 1.5em;
}
</style>
  <h1>ColdFusion-開発効率を求められる今だから知りたい高性能Webアプリケーションサーバー</h1>
  <p>2007年9月21日に最新版ColdFusion 8日本語版がアドビシステムズ株式会社よりリリースされました。この連載では,なぜColdFusionが長きに渡ってWeb開発者から支持を集めてきたのか,その魅力に迫ります。</p>
</cfdocument>

図1 cfdocument.cfmの実行結果

図1 cfdocument.cfmの実行結果

Adobe Readerなどのインストールが必要ですが,ご覧の通りcfdocumentタグで囲った中身がPDF化されて表示されていることが分かります。

また,cfdocumentタグの中身にはCFMLを含ませることができます。例えば,第4回の例で使ったcfchartタグでグラフを描画し,それをPDF化してみましょう。なお,cfchartタグをcfdocumentタグの中に入れることができるのはColdFusion 8からの機能になります。

以下の例をchartpdf.cfmとして保存し,アクセスすると,PDF化されたグラフがブラウザ上で表示またはダウンロードされるでしょう。

<cfprocessingdirective pageEncoding="UTF-8" />
<cfquery datasource="cfartgallery" name="qry">
  SELECT
    COUNT(art.artID) AS num, art.mediaID
  FROM
    art
  WHERE
    isSold=0
  GROUP BY
    mediaID
</cfquery>
<cfdocument format="PDF" name="aPdf">
  <cfchart format="png" chartheight="200" chartwidth="440" font="arialunicodeMS" xAxisTitle="メディアID " yAxisTitle="個">
    <cfchartseries type="bar" query="qry" itemColumn="mediaID" valueColumn="num" seriesLabel="在庫" ></cfchartseries>
  </cfchart>
</cfdocument>
<cfcontent type="application/pdf" variable="#aPdf#">

図2 chartpdf.cfmの実行結果

図2 chartpdf.cfmの実行結果

この例ではPDFのバイナリデータを「aPdf」と言う名前の変数に格納し,そのデータをcfcontentタグのvariable属性を使い直接ブラウザに送出しています。MIME media typeとしては「application/pdf」を指定しているので,お使いのブラウザ環境によって,ブラウザ内で開かれたり,ダウンロードダイアログが出るなどの動作になると思います。

このようにCFMLを組み合わせてクエリーを元にグラフなどを描画し,それをPDF化することも可能なので,決算短信や営業成績レポートなどの生成に使うこともできるでしょう。

cfpdfタグ

ColdFusion 8から,PDF操作専用のCFMLタグcfpdfタグが追加されました。cfpdfタグでは以下のようなことができます。

  • 透かしの追加・除去
  • PDFの情報の取得
  • 2つ以上のPDFファイルのマージ
  • PDFファイルのパスワードでの保護及び暗号化
  • PDFの各ページのサムネイルの作成
  • DDX(Document Description XML)を用いたLiveCycle Assemblerによる高度なPDF処理

著者プロフィール

酒井克幸(さかいかつゆき)

フリーのテクノロジーコンサルタント。サーバー選定やネットワーク設計などハードウェアレイヤーから,Webアプリケーションの実装(サーバーサイド,クライアントサイド共)などのソフトウェアレイヤーまでの幅広い経験を活かし,クライアント企業のWebアプリケーション構築支援を行っている。殊にAdobe製品(特にMacromedia)製品には精通している。

ブログcyano(シアノ)

コメント

コメントの記入