ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

Cocoonで動的にデータを作成し、PDFで出力する(その2)


 前に、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を設定する方法を書きます。