将 Freemarker 转换为 PDF

Posted

技术标签:

【中文标题】将 Freemarker 转换为 PDF【英文标题】:Converting Freemarker To PDF 【发布时间】:2011-08-06 07:25:06 【问题描述】:

我正在使用 freemarker 设计报告,我有一个问题,我需要 PDF 格式的处理输出。

我想要做的是将 html + CSS fremarker 模板传递给 freemarker 引擎,并将处理后的 HTML 输出为 PDF。我目前遇到的问题是如何将处理后的 freemarker 转换为 PDF

    try 
        Configuration cfg = new Configuration();
        Template tpl = cfg.getTemplate("example.ftl");
        OutputStreamWriter output = new OutputStreamWriter(System.out);

        Map testHashMap = new HashMap();
        testHashMap.put("test", "testValue");

        tpl.process(testHashMap, output);

     catch (Exception e) 
        e.printStackTrace();
    

在互联网上搜索时,我找不到有关此主题的任何信息,但我发现了有关 iText 框架的信息

try 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(new StringBufferInputStream(buf.toString()));
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(doc, null);
    renderer.layout();
    OutputStream os = response.getOutputStream();
    renderer.createPDF(os);
    os.close();
 catch (Exception ex) 
    ex.printStackTrace();

现在的问题是如何将这两个代码片段结合起来生成一个pdf?

非常感谢所有帮助

问候, 米琳达

【问题讨论】:

【参考方案1】:

我认为最好使用两个不同的管道并将它们视为同一模型的两个不同视图。

数据 -> Freemarker 转换器 -> HTML

数据 -> iText 转换器 -> pdf

或者您可以在 html 上使用 XSLT 并像 Apache FOP 一样使用 XSL-FO,但这对我来说似乎有点过头了。

【讨论】:

【参考方案2】:

建议使用 iText,因为它受 AGPL 许可。

如果您基于根据 AGPL 许可获得的软件提供服务,您需要提供对该服务的完整软件的免费访问(可能受到“单纯聚合”概念所暗示的限制)。

您可以将openhtmtopdf 用于商业目的,也可以免费使用,因为它受 LGPL 许可。

【讨论】:

【参考方案3】:

Pupeteer 似乎是一个不错的选择。您可以运行单独的节点进程来访问您的 API 并打印。

https://blog.risingstack.com/pdf-from-html-node-js-puppeteer/

【讨论】:

以上是关于将 Freemarker 转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章

使用 USCavalry 转换器将 Velocity 模板转换为 FreeMarker

如何使用 freemarker 将字符串转换为数字?

Freemarker:将日期从科学记数法转换为数字

使用 Freemarker 将字符串转换为布尔值

Freemarker 以毫秒为单位将时间戳转换为带有时区的日期

在 Freemarker 中将字符串转换为 JSON