回答いただき、ありがとうございます。
すいません、先のメッセージにて抜けておりましたが、
こちらで解析を進めた結果、
以下の事象となっていることを確認しました。
<事象>
テンプレートAに対する処理とテンプレートBに対する処理が
それぞれ別スレッドで並走した場合、テンプレートAの処理で
テンプレートBにプロットする内容が一部反映される。
> 帳票出力を行っている部分のコードを貼り付けてもらうことはできますか?
→はい、可能です。ソースコードは以下となります。
--------------------ここから--------------------
@WebServlet("/TestPrint")
public class TestPrintServlet extends BaseServlet {
@Override
protected void doProc(Map<String, Object> params) throws ServletException {
TestPrintService printService = new TestPrintService(conn, params);
// 帳票出力
ResultData resultData = printService.createReport();
}
}
public class TestPrintService {
public ResultData createReport() {
// 画像のサブページを作成
Report gazoReport = ReportUtil.readTemplate("TestPrint_gazo.rrpt");
gazoReport.fill(new ReportDataSource(gazoData));
// 帳票の各コンテントの高さを調節するカスタマイザ
// サブページのサイズに応じてコンテントが自動拡張されないので、Customizerを使用してコンテントのサイズを手動設定する
TestPrintCustomizer customizer = new TestPrintCustomizer(gazoData.size());
// 帳票定義の読み込み
Report report = ReportUtil.readTemplate("TestPrint_main.rrpt", customizer);
// サブページを挿入
report.addSubPages("gazoPage", gazoReport.getPages());
// 各明細はGroupDataProviderを使用して渡す
GroupDataProvider dataProvider = new GroupDataProvider();
dataProvider.groupDataMap.put("group_homondate_left", new ReportDataSource(homonDateLeft));
//帳票の生成は提出先の数だけ行う
List<HashMap<String, Object>> teishutsusakiList = dao.selectTeishutsuList(this.params);
for (HashMap<String, Object> teishutsusaki : teishutsusakiList) {
reportData.setTeishutsusakiData(teishutsusaki);
// メイン帳票にデータを渡す
ReportDataSource mainDataSouce = new ReportDataSource(Arrays.asList(reportData));
report.fill(mainDataSouce, dataProvider);
String tmpFileName = ReportUtil.getTemporaryReportFileName(String.valueOf(this.params.get("serial_Id")),
String.valueOf(this.params.get("UserId")));
String tmpTeishutsuFileName = getFileName(reportData);
// PDFをローカルに出力
ReportPages pages = report.getPages();
ReportUtil.saveReport(pages, tmpFileName, imageMap);
}
}
}
public class ReportUtil {
public static Report readTemplate(String templateFileName, DefaultCustomizer customizer)
throws JSONException, IOException {
int index = templateFileName.indexOf("_");
if (index < 0) {
index = templateFileName.indexOf(".");
}
String parentDir = templateFileName.substring(0, index);
InputStream is = ReportUtil.class.getClassLoader()
.getResourceAsStream("../report/" + parentDir + "/" + templateFileName);
Map<?, ?> jsonMap = ReadUtil.readJson(is);
return new Report(jsonMap, customizer);
}
}
--------------------ここまで--------------------
基本的に御社のHPにて公開されているサンプルコードを用いて
実装を行いましたが、帳票定義ファイルの読み込み箇所のみ、
サンプルとは異なる実装を行っております。
異なる点としてはClassLoaderを使用している点で、
帳票定義ファイルをソースコード上に内包する事情があったためです。
2022年6月27日月曜日 13:15:44 UTC+9 RapidReport: