当前位置: 首页 > 知识库问答 >
问题:

如何使用thymeleaf作为模板引擎生成pdf报告?[关闭]

司浩壤
2023-03-14

想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。

我想在spring mvc应用程序中创建pdf报告。我想使用themeleaf设计html报告页面,然后将其转换为pdf文件。我不想使用xlst来设计pdf的样式。有可能这样做吗?

注:这是客户的要求。

共有2个答案

易嘉胜
2023-03-14

您需要使用类似飞碟pdf的东西,创建一个类似以下内容的组件:

@Component
public class PdfGenaratorUtil {
    @Autowired
    private TemplateEngine templateEngine;
    public void createPdf(String templateName, Map<String, Object> map) throws Exception {
        Context ctx = new Context();
        Iterator itMap = map.entrySet().iterator();
        while (itMap.hasNext()) {
            Map.Entry pair = (Map.Entry) itMap.next();
            ctx.setVariable(pair.getKey().toString(), pair.getValue());
        }

        String processedHtml = templateEngine.process(templateName, ctx);
        FileOutputStream os = null;
        String fileName = UUID.randomUUID().toString();
        try {
            final File outputFile = File.createTempFile(fileName, ".pdf");
            os = new FileOutputStream(outputFile);

            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(processedHtml);
            renderer.layout();
            renderer.createPDF(os, false);
            renderer.finishPDF();

        }
        finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) { /*ignore*/ }
            }
        }
    }
}

然后,只需将此组件连接到控制器/服务组件,然后执行以下操作:

Map<String,String> data = new HashMap<String,String>();
    data.put("name","James");
    pdfGenaratorUtil.createPdf("greeting",data); 

其中“问候”是模板的名称

看见http://www.oodlestechnologies.com/blogs/How-To-Create-PDF-through-HTML-Template-In-Spring-Boot有关详细信息

弓嘉纳
2023-03-14

您可以使用thymeleaf提供的SpringTemplateEngine。以下是它的依赖关系:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
</dependency>

以下是我为生成PDF所做的实现:

@Autowired
SpringTemplateEngine templateEngine;

public File exportToPdfBox(Map<String, Object> variables, String templatePath, String out) {
    try (OutputStream os = new FileOutputStream(out);) {
        // There are more options on the builder than shown below.
        PdfRendererBuilder builder = new PdfRendererBuilder();
        builder.withHtmlContent(getHtmlString(variables, templatePath), "file:");
        builder.toStream(os);
        builder.run();
    } catch (Exception e) {
        logger.error("Exception while generating pdf : {}", e);
    }
    return new File(out);
}

private String getHtmlString(Map<String, Object> variables, String templatePath) {
    try {
        final Context ctx = new Context();
        ctx.setVariables(variables);
        return templateEngine.process(templatePath, ctx);
    } catch (Exception e) {
        logger.error("Exception while getting html string from template engine : {}", e);
        return null;
    }
}

您可以将文件存储在下面显示Java临时目录中,并将文件发送到您想要的任何地方:

System.getProperty("java.io.tmpdir");

注意:如果生成pdf的频率很高,请确保删除临时目录中使用过的文件。

 类似资料:
  • PDF正在成功生成,但我想用密码保护它。飞碟-pdf doc对我没有帮助。我正在使用此示例使用胸片飞碟-pdf Spring Boot

  • 我正在从Velocity切换到Thymeleaf,我试图找到一个具有绝对URL的模板示例。 我发现的所有东西都说明要使用,但将我的服务绑定到和似乎是错误的。

  • 本文向大家介绍Spring Boot thymeleaf模板引擎的使用详解,包括了Spring Boot thymeleaf模板引擎的使用详解的使用技巧和注意事项,需要的朋友参考一下 在早期开发的时候,我们完成的都是静态页面也就是html页面,随着时间轴的发展,慢慢的引入了jsp页面,当在后端服务查询到数据之后可以转发到jsp页面,可以轻松的使用jsp页面来实现数据的显示及交互,jsp有非常强大的

  • 问题内容: 我正在使用php代码查询数据库,结果将用于生成报告。 如果我想以pdf格式生成报告,该怎么办? 问题答案: 如果您的PDF文件中需要UTF支持,请考虑使用库。 从此处下载:http : //www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf 在您的脚本中:

  • 可供选择好多好多模板引擎, 国人参与的模板引擎,大多都自带了集成类(ViewMaker实现), 本章会挑选几种来演示如何集成 并不存在最好的模板引擎,只有最合适的

  • 我有一个ASP。NET核心应用程序,使用身份进行用户管理。 我有一个,它准备通过smtp发送电子邮件以用于帐户激活目的: 然而,由于字符