goo blog サービス終了のお知らせ 

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

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

LinuxでXMLをフリーソフトを使ってPDFにする方法と、Javaを使った統一伝票の出力

2005-04-13 15:19:34 | JavaとWeb
 えーっと、表題ですが、LinuxとJavaが入るとクリック数が上がりそうな気がするので入れただけで、もちろん、WindowsでもOKでーす。
 今回は、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を書かないといけない

 なお、ここで、統一伝票の枠とかは、あらかじめ印刷されているもので、文字出力だけすればいいとします。。。って、バーコード、あった気が。。。どうしよう(>_<!)
 きっと、バーコードのソフトで、イメージにしておいて、それを貼り込むのです。

 そこに、お金かかるじゃん。だめじゃん(>_<!)。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

流通XML-EDIのJAVA化計画:その1:クラスをきめてみる(14日修正)

2005-04-13 08:43:51 | 業務のモデル化
 前のブログで、流通XML-EDIをJavaで開発する流通業システムに流用する話。

 まずは、概説書をもとに、クラスをきってみましょう。
 クラスには、佐藤 正美氏の考え方に基づき(?)リソースとイベントの2種類があると考えますと、


■■ リソース
 リソースは、以下のとおり

  1.小売(発注先)
    これには、以下の2種類
     1-1:支払先(支払う会社)
     1-2:納入先
  メソッドの定義は概説書にないので、CRUD(登録、照会、更新、削除)とします。

  2.卸(受注先)
    これも、本来は2種類に分かれるはずである
     2-1:入金先
     2-2:物流センター
    ところが、この2種類は、はっきりしていない。
(よくある話で、ものが送ってくるのは、工場直送とか、大きな卸会社なんだけど、お金は、小さな商社に払うなんていうケース)メソッドの定義は概説書にないので、CRUD(登録、照会、更新、削除)とします。

  3.商品
 メソッドの定義は、概説書14ページの商品マスタ管理は、契約単価の提案であり、これは商談に当たると思います。ふつうのマスタ管理とはちょっと離れているので、それらは除き、ここではCRUD(登録、照会、更新、削除)をメソッドとします。

■■ イベント
 概説書14ページの赤と黄色の四角をもとにわけます。
 メソッドについては、詳しく書きません(こまかくなってしまうので)

・小売側
  小売-4.商談
  商談を受けるほうになります。

  小売-5.発注

  小売-6.入荷
  入荷予定と、入荷確定をまとめます
  (14日修正)
   これ、まとめないほうがいいみたいです。
   つまり、以下のようにします。

  小売-6.入荷予定

  小売-7.検品
   これ以降、1番ずつ番号ずらしました

  小売-8.請求書受理
   請求を、このように書いておきます。買掛も、ここに入れておきます

  小売-9.支払
   買掛消しこみもここに入れます。

・卸側
  卸-4.商談
  小売側と逆で、商談をするほうになります

  卸-5.受注

  卸-6.出荷
  出荷予定と、出荷確定をまとめます
  (14日修正)
   これも、まとめないほうがいいみたいです。
   つまり、以下のようにします。

  卸-6.出荷予定

  卸-7.納品
   以下、番号がずれます

  卸-8.請求書発行
   請求を、このように書いておきます。売掛も、ここに入れておきます

  卸-9.支払確認
   支払を、このように書いておきます。小売からの売り上げを確認します。
   売掛消しこみもここに入れます。




 なお、リソースの、小売、卸、商品に関しては、小売側、卸側にも、どちらにも共通してあることになります。
 ただし、小売の場合には、小売には、自社情報、卸には、発注先情報(仕入先情報)が入ることになり、
 卸の場合には、受注先情報(得意先情報)、自社情報が入ることになります。
 ここで口座開設の業務が抜けていますが、これは、小売の場合は、卸マスタの登録、卸の場合は、小売マスタの登録に相当します。

 したがって、小売も卸も、この8(14日訂正)9つのクラスが基本で、そこにメソッドを配置することになります。
 その前に、小売・卸間のメッセージをXMLで表現したものについてですが、それは、また記事を改めて、近いうちに書きます。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする