- PR -

SVF for Java/PDFでのPNGファイルの印刷時エラーについて

1
投稿者投稿内容
クマ
会議室デビュー日: 2006/01/17
投稿数: 2
投稿日時: 2006-01-17 13:11
いつもお世話になっております。
ウィングアーク(旧:翼システム)社製のSVF for Java/PDFを使用して
PNG画像付きの帳票作成をWeb開発しております。

【実行環境】
 OS:WindowsServer2000
 Java:1.4.1.03
APPserver:JRun4
Webserver:Apache

1ユーザで実施するとうまく良くのですが、2ユーザ以上で同時実行した際に
java.lang.OutOfMemory エラーが発生して実行できなくなります。
上記エラーはSVFのデバッグモードから出力されたファイル内に書かれています。
ウィングアーク社のFAQからjavaのヒープメモリの設定を変更する様な事が
書かれていたのですが、いくら試しても問題が解決しません。

サーバ上の物理メモリ量は1G程余裕があります。
JRunのヒープは xms512M xmx512Mに設定し
SVFのヒープは SimpleHttpd.runファイルの中で xms1024M xmx1024Mに設定しております

以下にSVFから出力されたログと当実行モジュールのソースです。

== SVFログ ==

[ 2] VrInit("MS932") = [0]
[ 2] Product Home is [E:\Program\SVFJP\svfjpd\lib]
[10] System Time is [Mon Jan 16 22:28:15 JST 2006]
[10] This Product is [SVF for Java Print, Version 6.3 (build 200312121508)]
[10] Java Runtime Information's
[10] Operating system name : Windows 2000
[10] Operating system version : 5.0
[10] Operating system architecture : x86
[10] Java Runtime Environment version : 1.4.1_03
[10] Java Runtime Environment vendor : Sun Microsystems Inc.
[10] Java vendor URL : http://java.sun.com/
[10] Java class path : E:\Program\JRun4\servers\lib;E:\Program\JRun4\servers\lib\pbclient42RE.jar;E:\Program\JRun4\servers\lib\pbserver42RE.jar;E:\Program\JRun4\servers\lib\pointbase-service.jar;E:\Program\SVFJP\svfjpd\lib\svf.jar;E:\Program\JRun4\lib\jrun.jar
[10] Java installation directory : E:\Program\j2sdk1.4.1_03\jre
[10] User's home directory : C:\Documents and Settings\Administrator
[10] User's current working directory : E:\Program\JRun4\bin
[10] Temporary directory : -Djava.io.tmpdir=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2\
[10] Package home directory : -Djp.co.fit.vfreport.home=null
[10] Character encoding name : MS932
[10] Free/Total memory size : 97,781,080/532,742,144 bytes
[10] VrInit() ... Use Default Encoding Property []
[11] VrInit("MS932") = [0]
[ 2] VrSetPrinter("EMF", "EMF") = [0]
[11] VrSetPrinter("EMF", "EMF") = [0]
[ 2] VrSetSpoolFileName2("//stmsv89/DocRoot/sample/print/wdp/8351_1137418094878.WDP") = [0]
[11] VrSetSpoolFileName2("//stmsv89/DocRoot/sample/print/wdp/8351_1137418094878.WDP") = [0]
[ 2] VrComout("/{SPLM 3}/") = [0]
[11] VrComout("/{SPLM 3}/") = [0]
[ 2] VrComout("/{NULL 0}/") = [0]
[10] File Full Path [F:/App/sample/default-ear/default-war/sample/print/frm/MapPrint.frm] --> [F:\App\maprouteDlv\default-ear\default-war\maprouteDlv\print\frm\MapPrint.frm]
[ 2] VrSetForm("F:\App\sample\default-ear\default-war\maprouteDlv\print\frm\MapPrint.frm", 5) = [0]
[11] VrSetForm("F:/App/sample/default-ear/default-war/sample/print/frm/MapPrint.frm", 5) = [0]
[11] VrsOut("名称", "北海道") = [0]
[11] VrsOut("日時", "2006/1/16 22:28") = [0]
[11] VrsOut("コード", "00000000") = [0]
[11] VrsOut("名前", "ああああああああ") = [0]
[11] VrsOut("fileName", "F:/App/sample/default-ear/default-war/maprouteDlv/print/png/1137418053066_0.png") = [0]
[11] VrEndRecord() = [0]
[11] VrsOut("名称", "北海道") = [0]
[11] VrsOut("日時", "2006/1/16 22:28") = [0]
[11] VrsOut("コード", "11111111") = [0]
[11] VrsOut("名前", "いいいいいいいい") = [0]
[11] VrsOut("fileName", "F:/App/sample/default-ear/default-war/maprouteDlv/print/png/1137418062503_0.png") = [0]
[ 2] VrsOut("名称", "北海道") = [0]
[ 2] VrsOut("日時", "2006/1/16 22:28") = [0]
[ 2] VrsOut("名前", "ああああああああ") = [0]
[ 2] VrsOut("販売店コード", "00000000") = [0]
[ 2] VrsOut("filename", "F:/App/sample/default-ear/default-war/maprouteDlv/print/png/1137418053066_0.png") = [0]
[10] java.lang.OutOfMemoryError
[11] VrEndRecord() = [-4971]
[ 2] VrsOut("拠点名称", "北海道") = [0]
[ 2] VrsOut("日時", "2006/1/16 22:28") = [0]
[ 2] VrsOut("名前", "ああああああああ") = [0]
[ 2] VrsOut("コード", "00000000") = [0]
[ 2] VrsOut("filename", "F:/App/sample/default-ear/default-war/maprouteDlv/print/png/1137418053066_0.png") = [0]
[ 2] VrComout("/{SATOCUT}/") = [0]
[ 2] VrEndPage() = [0]
[ 2] VrGetAttribute("$SPOOLFILENAME$", "", "\\stmsv89\DocRoot\maprouteDlv\print\wdp\8351_1137418094878.WDP") = [0]
[ 2] VrQuit() = [0]
[10] print output failed.
[11] VrQuit() = [0]

== サンプルソース ==(ShopCDとShopNameはStringが入ったArrayList)

//SVF実行部ライブラリインスタンス化
Vrw32 svf = new Vrw32();
int ret;

//ライブラリ初期化
ret = svf.VrInit();
if (ret < 0)
throw new SVFPrintException("VrInit エラー:", ret);

//出力するプリンタ指定
ret = svf.VrSetPrinter("EMF", "EMF");
if (ret < 0)
throw new SVFPrintException("VrSetPrinter エラー:", ret);

/*** プロパティファイル取得 ***/
// 受信用メッセージハンドラの生成
ServletStreamMessageHandler handler = new ServletStreamMessageHandler();
try {
wdpURL = prop.getMessage(PrintMapOriginal.WDP_URL);//wdpファイルのURL
frmURL = prop.getMessage(PrintMapOriginal.FRM_URL);//frmファイルのURL
pngURL = prop.getMessage(PrintMapOriginal.PNG_URL);//pngファイルのURL
} catch (Exception e) {
handler.setMessage(e.getMessage());
}

//出力ファイル名設定
ret = svf.VrSetSpoolFileName2(wdpURL + this.wdpCD + "_" + TIMEN + ".WDP");
if (ret < 0)
throw new SVFPrintException("VrSetSpoolFileName2 エラー:", ret);

/*** VrComout関数 ***/
ret = svf.VrComout("/{SPLM 3}/");
if (ret < 0)
throw new SVFPrintException("VrComout エラー:", ret);

// 様式ファイルと、出力モード指定
ret = svf.VrSetForm(frmURL, 5);
if (ret < 0)
throw new SVFPrintException("VrSetForm エラー:", ret);

/**文字列データをフィールドに指定開始***/
for(int i=0;i<dataSize;i++){
//名称
ret = svf.VrsOut("名称", baseName);
if(ret < 0)
throw new SVFPrintException("名称 エラー", ret);
//日時
dateAndTime = DateAndTime.getDate();
ret = svf.VrsOut("日時", dateAndTime);
if(ret < 0)
throw new SVFPrintException("日時 エラー", ret);
//コード
ret = svf.VrsOut("コード",(String)shopCD.get(i));
if(ret < 0)
throw new SVFPrintException("コード エラー", ret);
//名前
ret = svf.VrsOut("名前",(String)shopName.get(i));
if(ret < 0)
throw new SVFPrintException("名前 エラー", ret);

//画像データ
if (pngFileName[i] != null) {
ret = svf.VrsOut("fileName", pngFileName[i]);
if (ret < 0)
throw new SVFPrintException("fileName", ret);
}
/**文字データのフィールド出力終了***/

//出力終了
ret = svf.VrEndRecord();
if (ret < 0)
throw new SVFPrintException("VrEndRecord エラー:", ret);
}

//帳票印刷終了
ret = svf.VrPrint();
if (ret < 0)
throw new SVFPrintException("VrPrint エラー:", ret);

//ライブラリ開放
ret = svf.VrQuit();
if (ret < 0)
throw new SVFPrintException("VrQuit エラー:", ret);

======================================================
上記ソースはServletで
PNGファイルは一枚180KB程の地図画像のデータで、fileNameには
そのPNGファイルのフルパスを指定しています。
そのほかに必要な文字データを一緒に出力する仕様になっています。

ログの実行時は2つの帳票が出るようにインプットをしました。
(コードが00000000と11111111)しかし、コードが00000000のデータが
ログファイルに何度もはかれているのが少し気になるのですが、、

SVFの帳票作成にお詳しい方、いらっしゃいましたら
ご教授ください。よろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)