Cocoonで動的にデータを作成し、PDFで出力するには、いくつか方法がある。
1.指定したURLに応じて、ジェネレーターのXMLファイルを変えられる方法を利用する
2.XSPを利用して、動的にXMLデータを作成し、読み込ませる
3.ジェネレーターをJSPにして、JSPが動的にXMLデータを作成する。
まだまだ方法はあると思うが、今回は、とりあえず、1を説明する。
■指定したURLに応じて、ジェネレーターのXMLファイルを変えるとは、
つまり、
http://127.0.0.1:8080/cocoon/mytest/test1.pdf
と指定すると、test1.xmlファイルを読み込み
http://127.0.0.1:8080/cocoon/mytest/testsaaaN.pdf
と指定すると、testsaaaN.xmlファイルを読み込むように、
指定したpdfファイル名に応じたXMLファイル名を読み込ませる方法
■やりかた
これは、sitemap.xmapで、ワイルドカード指定すればよい。
そして、そのワールドカードに対応する部分のXMLファイルを用意する
以下、具体的な内容について説明する。
今回は、上記test1.pdfのとき、test1.xml,testsaaaN.pdfのとき、testsaaaN.xml
を読むようにする。
■具体的方法
(1)まず、XMLファイルを用意する
mytestフォルダに、test1.xml,testsaaaN.xmlのXMLファイルを用意する
(2)sitemap.xmapを用意
以下のような感じで、*.pdfにし、xmlファイルは{1}.xmlにする
<?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:pipelines> <map:pipeline> <map:match pattern="*.pdf"> <map:generate src="{1}.xml"/> <map:transform src="page2fo.xsl"/> <map:serialize type="fo2pdf"/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap> |
(上記< >は、本当は半角)
このファイルをmytestフォルダの下に、sitemap.xmapとして置く
(3)そのほかは、昨日の設定と同じ
cocoonの下のsitemap.xmapは同じ。mytestフォルダに、page2fo.xslをおくのも同じ。
(4)あとは、起動して、アクセスしてみましょう。
http://127.0.0.1:8080/cocoon/mytest/test1.pdf
と
http://127.0.0.1:8080/cocoon/mytest/testsaaaN.pdf
にアクセスします。
■この方法で、動的に生成するには・・・
cocoonの下では、JSPとかは、このままでは動かせない(マッチしないとでてくる)ので、
1.違うサーブレットから、このxmlファイルを置くところに、(上記例だとmytestフォルダの下)
一意になるようなファイル名にして(たとえばセッションIDなどを使って)、XMLファイルを書き出す
2.そのサーブレットから、上記XMLファイル名に対応するpdfファイルを
リダイレクトする
→ほかのサーブレットからだと、フォワードはできない。
という方法で、できることはできるけど、あんまりかっちょ良くはない。
どっちかというと、
・ジェネレーターをJSPにして
・ただ、PDFファイルを呼び出すだけで
書き出して欲しい。
この方法は、上記に書いたように、このままでは出来ないが、JSPGeneratorというのがあって、それを使うように設定すれば、簡単に出来る・・・・
・・・出来るのだが、次回は、XSPについて、説明する(^^;)