我正在尝试将某些*.odt
文件转换为*.pdf
使用IXDocReport。
这是*.odt
文件的假设内容:${amount?string.currency} to be paid
这是我用来转换的代码(你可以在 kotlin REPL 中运行它):
import fr.opensagres.xdocreport.converter.ConverterTypeTo
import fr.opensagres.xdocreport.converter.ConverterTypeVia
import fr.opensagres.xdocreport.converter.Options
import fr.opensagres.xdocreport.document.IXDocReport
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry
import fr.opensagres.xdocreport.template.TemplateEngineKind
import java.io.ByteArrayInputStream
import java.io.File
val options: Options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.ODFDOM)
val content: ByteArray = File("/home/sandro/tmp/report.odt").readBytes()
val templateId: String = "someId"
val registry: XDocReportRegistry = XDocReportRegistry.getRegistry()
val data: MutableMap<String, Any> = mutableMapOf("amount" to 10)
ByteArrayInputStream(content).use { input ->
val report: IXDocReport =
registry.loadReport(input, templateId, TemplateEngineKind.Freemarker, true)
val tmpFile: File = createTempFile("out", ".pdf")
tmpFile.outputStream().use { output ->
report.convert(data, options, output)
println(tmpFile.toString())
}
}
结果是带有字符串的pdf文件$10.00 to be paid
如何在转换期间将所需的语言环境设置为 XDocReport,以便可以正确地将结果更改为其他货币?
PS我无法控制模板本身 - 所以请不要告诉我向<#setting locale="${bean.locale}">
模板本身添加或其他内容。我唯一可以更改的地方是代码。提前致谢。
PPS我需要为每个请求渲染许多模板,并且需要为每个模板设置语言环境。