【发布时间】:2020-03-25 21:41:57
【问题描述】:
我正在尝试使用 IXDocReport 将一些 *.odt 文件转换为 *.pdf。
这是*.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())
}
}
结果是带有字符串$10.00 to be paid的pdf文件
如何在转换过程中将所需的语言环境设置为 XDocReport,以便将结果正确更改为其他货币?
P.S.我无法控制模板本身 - 所以请不要告诉我在模板本身添加 <#setting locale="${bean.locale}"> 或其他内容。我唯一可以更改的地方是代码。提前致谢。
P.P.S.我需要为每个请求渲染许多模板,并且需要为每个模板设置区域设置。
【问题讨论】:
标签: pdf localization freemarker odt xdocreport