#freeze
* [[JooReports]]

帳票作成ツールです。フリー http://jooreports.sourceforge.net/
WEB+DB PRESS Vol23で紹介されてます。OpenOfficeを使ったJavaの帳票ツールです。
帳票ツールでいつも気になるのは大量データがきちんと出力されるかです。レイアウトがつくりやすいかはとりあえず、目をつぶっています。だいたい、100万件を目安にしており、CPU負荷がそこそこで一気に出力できればとおもっているのですが、どうも使う側でうまくつくってやらないと、OutOfMemoryやいろいろ問題が出そうです。大変期待しているので、がんばってほしいです。あれ?JOOReports 2.0がでてるぞ!以前のソースがコンパイルできん。ん~~
あら?ページがつながらん。しかもJODReportsからJODReportsになっていたのか。http://www.artofsolving.com/opensource

#contents

**環境作成
-OpenOffice~
まずOpenOfficeをダウンロードします。http://ja.openoffice.org/からOpenOffice.org 1.1.2 をダウンロードします。ダウンロード後インストールしてください。
詳細はhttp://ja.openoffice.org/1.1.2/install/を参考にしてください。
インストール後、インストールしたフォルダの
 C:\Program Files\OpenOffice.org1.1.2\share\registry\data\org\openoffice
にSetup.xcuに以下の行を追加します。
  <prop oor:name="ooSetupConnectionURL" oor:type="xs:string">
   <value>socket,host=localhost,port=8100;urp;</value>
  </prop>
[[ActivePorts>http://www.protect-me.com/freeware.html]]というソフトで8100のポートが使われているか確認してください。使われておればOKです。

-JooReports~
http://jooreports.sourceforge.net/のDownloadからJooTemplatesとJooConverterをダウンロードします。(2004/10/25時点 1.0b4)
jootemplatesにJooReports-AddOnInstaller.sxcがありますので、OpenOfficeで開きます。セキュリティについてのメッセージが表示されますが、実行してください。
画面はInstallボタンとUnInstallボタンがありますので、Installを行います。
Menu Type Choiceのウィンドウが表示されますので、適当に選択してください。~
OpenOfficeが動かなくなった.... 原因がわかりました。Setup.xcuの記述をミスっておりました。ここは間違えないように記述してください。

-使用するJar~
jooconverter
 jooconverter.jar
jootemplates
 jootemplates.jar
jootemplates\lib
 ognl-2.6.5.jar
 xerces-2.6.2.jar
 xstream-1.0.1.jar
 unoil.jar
C:\Program Files\OpenOffice.org1.1.2\program\classes
 juh.jar
 jurt.jar
 ridl.jar
 sandbox.jar
sandbox.jarって..
C:\Program Files\OpenOffice.org 2.4では
 juh.jar
 jurt.jar
 ridl.jar
 unoil.jar 
**サンプルPG
StrutsのActionを作成しまして、以下の内容で作成します。このときファイルパスは適時変更してください。思ったより早かったです。10件しかないですが、pdf化も早くもしかしたら使えるかも。でも今のデータの渡し方であれば、OutOfMemoryは避けられないかなー
Eclipseを使っている場合は、Ctrl+shift+Oでimport文を作成してください。
 public class JooReportsAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            Template template = null;
            template = new Template(new FileInputStream("H:/MyProject/java/test/print/test.sxw"));
            Map map = new HashMap();
            List dataList = new ArrayList();
            for (int i = 0; i < 10; i++) {   //1
                TestEntity testEntity = new TestEntity();
                testEntity.setId(String.valueOf(i));
                testEntity.setName(String.valueOf(i) + "ああああああ");
                dataList.add(testEntity);
            }
            map.put("TestList", dataList);
            template.createDocument(map, new FileOutputStream("H:/MyProject/java/test/print/test001.sxw")); //2
            DocumentConverter converter;
            File sxw = new File("H:/MyProject/java/test/print/test001.sxw");
            File pdf = new File("H:/MyProject/java/test/print/test001.pdf");
            converter = DocumentConverterFactory.getConverter();
            converter.convert(sxw, pdf, DocumentFormat.PDF_WRITER); //3
            DocumentConverterFactory.getConnection().close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (mapping.findForward("success"));
    }
 }

 public class TestEntity implements Serializable {
    private String id;
    private String name;
    /**
     * @return id
     */
    public String getId() {
        return id;
    }
    /**
     * @param id id を設定します。
     */
    public void setId(String id) {
        this.id = id;
    }
    /**
     * @return name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name name を設定します。
     */
    public void setName(String name) {
        this.name = name;
    }
 }
10件を10000件にして実行。まず1は1秒もかからず。2はなんと4分、3も4分かかった。その間CPUの負荷率は100%。これでは業務では厳しいなー また作成されたtest001.sxwは64KBしかないにもかかわらず、なかなか開かない。(参考:pentium4 2.6G Memory 1G)

**JOOConverter
ドキュメントをコンバートしたいだけであれば、これをつかえばいいようなので、使ってみます。OpenOffice1.1がインストールされているディレクトリのprogramでOpenOffice1.1を起動しておきます。OpenOffice2.0でもいけました。
 soffice -headless -accept="socket,port=8100;urp;"

 import java.io.File;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import net.sf.joott.uno.DocumentConverter;
 import net.sf.joott.uno.DocumentConverterFactory;
 import net.sf.joott.uno.DocumentFormat;
 import org.apache.struts.action.Action;
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.action.ActionForward;
 import org.apache.struts.action.ActionMapping;
 public class JooReportsAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
       try {
            DocumentConverter converter;
            File xls = new File("H:/MyProject/java/test/print/test1.xls");
            File pdf = new File("H:/MyProject/java/test/print/test.pdf");
            converter = DocumentConverterFactory.getConverter();
            converter.convert(xls, pdf, DocumentFormat.PDF_CALC);
            DocumentConverterFactory.getConnection().close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (mapping.findForward("success"));
    }
 }
ちなみにphpでは[[Puno>http://puno.sourceforge.net/]]が使えそう
** リンク
- [[ OpenOffice.orgとJooReportsを利用してJavaからPDFを出力する>http://codezine.jp/a/article.aspx?aid=131]]

- [[いがぴょんの日記>http://hp.vector.co.jp/authors/VA027994/joo/jooconverter.html]]~
JooConverterについて触れられております。

- [[JavaからOpenOfficeを操作する部分、Calcを操作する部分に分けてみた >http://blog.goo.ne.jp/xmldtp/e/7467cfd131ddb1889ea97a18370259e8]]

- [[OpenOffice.org を使ってみよう>http://www.okapiproject.com/java/java_tools/openoffice/index.html]]~
丁寧な解説があります。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS