えーっと、表題ですが、LinuxとJavaが入るとクリック数が上がりそうな気がするので入れただけで、もちろん、WindowsでもOKでーす。
今回は、XMLファイルをフリーソフトのFOPを使ってPDFにするお話。
フリーソフトにしないでいいなら、XMLファイルをAccessで読み込み、それを出力する。
終了
となってしまうので、ここでは、フリーソフトの話(つーか、そういう意味ではLinuxっていうのも意味あるね)
前のブログで 「統一伝票なんかも、クラスにしておいて,setterとgetter作っておいてくれて、FOPで出力できるように、XSLT書いておいてくれればいいのに」と書きましたが、そのやり方。
ちなみに統一伝票とは、ここ。お菓子業界とか、スポーツ用品業界とか、その業界ごとに、発注・納品のための伝票を統一したもの。
つまり、統一伝票をクラス化して、そのクラスから伝票を出力できるようにすれば、納品や発注の伝票出力の際に再利用できるわけ。
Java的にみても、再利用価値の高い業務用クラスといえるわけなのだ(本当かいな??)
で、まず、FOPとは、foファイルという、出力内容を書いたXMLファイルを読み込んで、PDFなどファイルを作成するものです。くわしい説明&FOPのダウンロード先なんか書いてあるサイトはここ
つまり、
データをPDFにするには
ってことです。ここで、出力したいレイアウトを統一伝票の形式にすれば、出力できます。
その際、伝票のようなレイアウトだと、指定したい位置のところに書き出すわけですが、それは、fo:blockの外側に、fo:block-containerっていうのを使い、その引数でabsolute-position="fixed"にすると、ページの初めからの絶対位置で指定できたはずです。
(そうしないと、文章の流し込みみたいに、自動に文字が流れてしまう)
で、ここでデータが、javaのクラスの中にデータが入っているのであれば、そのクラスがfoを書き出せばOKです。
foは、XMLの形なので、JAXPを使ってDOMかなんかにしてから書き出してもいいし、そんな面倒なことしないで、ファイルのOutputStreamに直接、”<fo:root”みたいな感じで、文字列で書き出してもOKです。
問題は、データがXMLに入っているときです。
この場合は、2とおり考えられます。
1.データのXMLファイルをFOの形式に変換するXSLを書き
そのXMLファイルとXSLをXSLTに読み込ませる。(とFO形式のファイルになる)
2.JAXPを使ってJAVAの中に読み込む
ということは、1の方式でやる場合、
データをフリーソフトをつかってPDFにするには
(あ).必要なもの
XSLT(Xalanなど)、FOP、(あとJavaのランタイム)
(い).必要なファイル
XMLファイル(元データ=毎回作成)
XMLファイルをFOファイルに変換するXSLファイル(一度作成すれば、基本的にはOK)
(う)やりかた
・XMLファイルをXSLTを使って、FOファイルに変換する(XSL必要)
・FOファイルをFOPに読み込ませ、PDFにする
統一伝票をPDFにするには、したがって、
・統一伝票に書くデータをXMLにする
→そのために統一伝票の項目をXMLのどのタグにするかをきめて、
データをそのタグでかきださないといけない(そういうソフトを作る必要もあるかも)
・そのXMLを統一伝票の形式で書くXSLを書かないといけない
なお、ここで、統一伝票の枠とかは、あらかじめ印刷されているもので、文字出力だけすればいいとします。。。って、バーコード、あった気が。。。どうしよう(>_<!)
きっと、バーコードのソフトで、イメージにしておいて、それを貼り込むのです。
そこに、お金かかるじゃん。だめじゃん(>_<!)。
今回は、XMLファイルをフリーソフトのFOPを使ってPDFにするお話。
フリーソフトにしないでいいなら、XMLファイルをAccessで読み込み、それを出力する。
終了
となってしまうので、ここでは、フリーソフトの話(つーか、そういう意味ではLinuxっていうのも意味あるね)
前のブログで 「統一伝票なんかも、クラスにしておいて,setterとgetter作っておいてくれて、FOPで出力できるように、XSLT書いておいてくれればいいのに」と書きましたが、そのやり方。
ちなみに統一伝票とは、ここ。お菓子業界とか、スポーツ用品業界とか、その業界ごとに、発注・納品のための伝票を統一したもの。
つまり、統一伝票をクラス化して、そのクラスから伝票を出力できるようにすれば、納品や発注の伝票出力の際に再利用できるわけ。
Java的にみても、再利用価値の高い業務用クラスといえるわけなのだ(本当かいな??)
で、まず、FOPとは、foファイルという、出力内容を書いたXMLファイルを読み込んで、PDFなどファイルを作成するものです。くわしい説明&FOPのダウンロード先なんか書いてあるサイトはここ
つまり、
データをPDFにするには
1.データの内容を、FOファイルに書き出す(出力したいレイアウトで) 2.そのFOファイルをFOPで読み込み、変換 3.PDFができるということになります。 |
ってことです。ここで、出力したいレイアウトを統一伝票の形式にすれば、出力できます。
その際、伝票のようなレイアウトだと、指定したい位置のところに書き出すわけですが、それは、fo:blockの外側に、fo:block-containerっていうのを使い、その引数でabsolute-position="fixed"にすると、ページの初めからの絶対位置で指定できたはずです。
(そうしないと、文章の流し込みみたいに、自動に文字が流れてしまう)
で、ここでデータが、javaのクラスの中にデータが入っているのであれば、そのクラスがfoを書き出せばOKです。
foは、XMLの形なので、JAXPを使ってDOMかなんかにしてから書き出してもいいし、そんな面倒なことしないで、ファイルのOutputStreamに直接、”<fo:root”みたいな感じで、文字列で書き出してもOKです。
問題は、データがXMLに入っているときです。
この場合は、2とおり考えられます。
1.データのXMLファイルをFOの形式に変換するXSLを書き
そのXMLファイルとXSLをXSLTに読み込ませる。(とFO形式のファイルになる)
2.JAXPを使ってJAVAの中に読み込む
ということは、1の方式でやる場合、
データをフリーソフトをつかってPDFにするには
(あ).必要なもの
XSLT(Xalanなど)、FOP、(あとJavaのランタイム)
(い).必要なファイル
XMLファイル(元データ=毎回作成)
XMLファイルをFOファイルに変換するXSLファイル(一度作成すれば、基本的にはOK)
(う)やりかた
・XMLファイルをXSLTを使って、FOファイルに変換する(XSL必要)
・FOファイルをFOPに読み込ませ、PDFにする
統一伝票をPDFにするには、したがって、
・統一伝票に書くデータをXMLにする
→そのために統一伝票の項目をXMLのどのタグにするかをきめて、
データをそのタグでかきださないといけない(そういうソフトを作る必要もあるかも)
・そのXMLを統一伝票の形式で書くXSLを書かないといけない
なお、ここで、統一伝票の枠とかは、あらかじめ印刷されているもので、文字出力だけすればいいとします。。。って、バーコード、あった気が。。。どうしよう(>_<!)
きっと、バーコードのソフトで、イメージにしておいて、それを貼り込むのです。
そこに、お金かかるじゃん。だめじゃん(>_<!)。