#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]]~
丁寧な解説があります。