将Freemarker转换为PDF

7
我正在使用freemarker设计报告,遇到了一个问题:我需要将处理后的输出以PDF格式呈现。我想做的是将HTML + CSS freemarker模板传递给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文件?
非常感谢所有的帮助。
祝好,
MilindaD
3个回答

5
我不建议使用iText,因为它属于AGPL许可证。
如果你提供的服务基于AGPL许可的软件,你需要为该服务提供完整软件的免费访问(可能受“纯聚合”概念限制)。
你可以使用openhtmtopdf,因为它属于LGPL许可证,可以用于商业目的并且是免费的。

Openhtmltopdf可能会从2022年开始不再积极开发:https://github.com/danfickle/openhtmltopdf/commits/open-dev-v1。 - ikaerom

5
我认为最好使用两个不同的管道,并将它们视为同一模型的两个不同视图。
数据 -> Freemarker 转换器 -> HTML
数据 -> iText 转换器 -> PDF
或者您可以在HTML上使用XSLT并使用类似Apache FOP的XSL-FO,但我认为这太过复杂。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接