リスト フィールドを含む既存の ODT テンプレートから PDF を生成しようとしていました。
そして、さらに処理するために ByteArrayOutputStream オブジェクトを取得するメソッドがあります。
public ByteArrayOutputStream execute(Map<String, Object> data, byte[] templateData) {
ByteArrayOutputStream odt = new ByteArrayOutputStream();
try {
DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory();
DocumentTemplate template = documentTemplateFactory.getTemplate(new ByteArrayInputStream(templateData));
template.createDocument(data, odt);
return odt;
} catch (Throwable e) {
}
}
ここで、パラメーターtemplateData
は ODT テンプレート ファイルのバイト配列であり、パラメーターには、によって追加されdata
たデータ オブジェクトが含まれています。row
MyRow row = new MyRow();
row.setCol1("1");
row.setCol2("2");
row.setCol3("3");
row.setCol4("4");
List<MyRow> rows = new ArrayList<MyRow>();
rows.add(row);
data.put("row",rows);
フローがcreateDocument
上記のメソッドに到達すると、次の例外が発生します。
freemarker.core.ParseException: Encountered "/" at line 4, column 13223 in content.xml.
Was expecting one of:
<STRING_LITERAL> ...
<RAW_STRING> ...
"false" ...
"true" ...
<INTEGER> ...
<DECIMAL> ...
"." ...
"+" ...
"-" ...
"!" ...
"[" ...
"(" ...
"{" ...
<ID> ...
at freemarker.core.FMParser.generateParseException(FMParser.java:4697)
at freemarker.core.FMParser.jj_consume_token(FMParser.java:4568)
at freemarker.core.FMParser.UnaryExpression(FMParser.java:323)
at freemarker.core.FMParser.MultiplicativeExpression(FMParser.java:435)
at freemarker.core.FMParser.AdditiveExpression(FMParser.java:385)
at freemarker.core.FMParser.RangeExpression(FMParser.java:556)
at freemarker.core.FMParser.RelationalExpression(FMParser.java:538)
at freemarker.core.FMParser.EqualityExpression(FMParser.java:476)
...
バイト配列形式であるため、content.xml を表示できません。ここで問題を特定する方法はありますか?