前に、Cocoonで動的にデータを作成し、PDFで出力するというのを書いて、そこで
1.指定したURLに応じて、ジェネレーターのXMLファイルを変えられる方法を利用する
2.XSPを利用して、動的にXMLデータを作成し、読み込ませる
3.ジェネレーターをJSPにして、JSPが動的にXMLデータを作成する。
と3とおり挙げた。1については、前回書いた。
なので、今回は、2.XSPを利用して、動的にXMLデータを作成し、読み込ませる。
■XSPとは
XMLファイル中にxspあるいはxsp-requestなどのタグを入れて、URLで渡した引数とか、JavaScriptで実行した結果とかを使えるようにしたもの。
こんなかんじ
<?xml version="1.0" ?> <xsp:page language="java" xmlns:xsp="http://apache.org/xsp" xmlns:xsp-request="http://apache.org/xsp/request/2.0"> <xsp:structure> <xsp:include>java.util.*</xsp:include> </xsp:structure> <xsp:logic> String mincho="明朝です"; String gothic= new Date().toString(); </xsp:logic> <page> <title><xsp-request:get-parameter-values name="title"/></title> <mincho><xsp:expr>mincho</xsp:expr></mincho> <gothic><xsp:expr>gothic</xsp:expr></gothic> </page> </xsp:page> |
(上記< >は、本当は半角。赤字がXSPのタグ部分)
これで、XMLファイルが出来るので、あとは、これを読み込ませて、PDFをつくる。
なお、xsp-request:get-parameter-valuesのところに引数のtitleの値が入り、xsp:exprは、xsp:logicで書いたJSPに対して、xsp:expで示した変数の値が入ります。
■具体的方法
(1)まず、XSPファイルを用意する
上記のファイルを、test.xspというファイル名で保存し、前々回のmytestフォルダの下に入れます。
(2)sitemap.xmapを書き換え
こんなかんじ
<?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:pipelines> <map:pipeline> <map:match pattern="test.pdf"> <map:generate type="serverpages" src="test.xsp" /> <map:transform src="page2fo.xsl"/> <map:serialize type="fo2pdf"/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap> |
(上記< >は、本当は半角。赤字が今回書き換え部分)
で書いて保存、mytestフォルダの下に置きます。
generateのtypeがserverpagesになっている点に注意
(3)page2fo.xslは、そのままmytestフォルダへ
■アクセス
Tomcatを起動。ブラウザから
http://127.0.0.1:8080/mytest/test.pdf?title=test
(注意!:test.pdfを指定する。xspではない)
でやると表示するけど、これだと、ブラウザのフォームの値を表示するていどならいいけど、
複雑なことするとなると・・・やっぱ、jspということで、次回はJSPを設定する方法を書きます。