我试图从带有列表字段的现有 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,因为它是字节数组格式。有没有办法在这里识别问题?