首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XDocReport将odt转换为pdf如何设置适当的地区

XDocReport将odt转换为pdf如何设置适当的地区
EN

Stack Overflow用户
提问于 2019-11-30 18:56:18
回答 1查看 1K关注 0票数 0

我正在尝试使用*.odt将一些*.pdf文件转换为IXDocReport

下面是*.odt文件的假设内容:${amount?string.currency} to be paid

下面是我使用的转换代码(可以在kotlin REPL中运行):

代码语言:javascript
复制
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.S.S.--我需要为每个请求呈现许多模板,并且需要为每个模板设置区域设置。

EN

回答 1

Stack Overflow用户

发布于 2019-11-30 21:34:22

我从未使用过XDocReport,但这可能会奏效:https://github.com/opensagres/xdocreport/wiki/FreemarkerTemplate“如何配置共济会?”

引文:

要使用XDocReport配置共济会会员,您必须获得配置实例。你必须做的事

  1. 创建一个类(ex : fr.opensagres.xdocreport.MyFreemarkerConfiguration),实现fr.opensagres.xdocreport.document.discovery.ITemplateEngineInitializerDiscovery. )
  2. 通过创建具有类名称的文件META-INF/services/fr.opensagres.xdocreport.document.discovery.ITemplateEngineInitializerDiscovery来注册这个类: fr.opensagres.xdocreport.MyFreemarkerConfiguration这个文件应该在您的类路径中(例如,您可以在项目的src/META/services/中托管它)。

所以你需要一个这样的类:

代码语言:javascript
复制
public class MyFreemarkerConfiguration implements ITemplateEngineInitializerDiscovery {

    [...]

    public void initialize(ITemplateEngine templateEngine) {
        if (TemplateEngineKind.Freemarker.name().equals( templateEngine.getKind())) {
            Configuration cfg = ((FreemarkerTemplateEngine) templateEngine).getFreemarkerConfiguration();
            cfg.setLocale(...);
        }
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59119237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档