Docx TableWith FieldsMetadata 和 Velocity
Docx TableWith FieldsMetadata and Velocity
我正在尝试使用 FieldsMetadata 和 Velocity 制作一个 docx table,但在输出文件中,table 的每个单元格都包含列表本身,而不是单元格的值。
这是我的代码:
// Build Docx
private fun buildDocxReport(): SystemFile {
try {
val resource = this.javaClass.classLoader.getResourceAsStream("reports/code.docx")
val report = XDocReportRegistry.getRegistry().loadReport(resource, TemplateEngineKind.Velocity)
val metadata = report.createFieldsMetadata()
metadata.load("codes", Code::class.java, true)
val context = report.createContext()
context.put("codes", getAllCodes()); // getAllCodes() : return Listof<Code>
val tempFile = File.createTempFile("${DateUtil.format(Date(), "yyyyMMdd")}_${IDs.short()}", ".docx")
val fos = FileOutputStream(tempFile)
// convert to pdf
//val options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.XWPF)
//report.convert(context, options, fos)
report.process(context, fos)
fos.close()
return SystemFile(tempFile).attach(tempFile.name)
} catch (e: Throwable) {
e.printStackTrace()
throw FunctionalException("Impossible de gérer le document. Une erreur s'es produite.")
}
}
我的class代码:
data class Code (
val code: String,
val libelle: String,
val base: String,
val taux: String? = "",
val gain: String? = "",
val retenue: String? = "")
这是我的模板:
code.docx
这里是我的输出文档:
listeCode.docx
这是因为单元格没有在模板文件中键入 MergedField。
我正在尝试使用 FieldsMetadata 和 Velocity 制作一个 docx table,但在输出文件中,table 的每个单元格都包含列表本身,而不是单元格的值。
这是我的代码:
// Build Docx
private fun buildDocxReport(): SystemFile {
try {
val resource = this.javaClass.classLoader.getResourceAsStream("reports/code.docx")
val report = XDocReportRegistry.getRegistry().loadReport(resource, TemplateEngineKind.Velocity)
val metadata = report.createFieldsMetadata()
metadata.load("codes", Code::class.java, true)
val context = report.createContext()
context.put("codes", getAllCodes()); // getAllCodes() : return Listof<Code>
val tempFile = File.createTempFile("${DateUtil.format(Date(), "yyyyMMdd")}_${IDs.short()}", ".docx")
val fos = FileOutputStream(tempFile)
// convert to pdf
//val options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.XWPF)
//report.convert(context, options, fos)
report.process(context, fos)
fos.close()
return SystemFile(tempFile).attach(tempFile.name)
} catch (e: Throwable) {
e.printStackTrace()
throw FunctionalException("Impossible de gérer le document. Une erreur s'es produite.")
}
}
我的class代码:
data class Code (
val code: String,
val libelle: String,
val base: String,
val taux: String? = "",
val gain: String? = "",
val retenue: String? = "")
这是我的模板: code.docx
这里是我的输出文档:
listeCode.docx
这是因为单元格没有在模板文件中键入 MergedField。