spring boot使用thymeleaf模板引擎实现html文件转pdf的实现过程
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
@Controller
public class PdfController {
private TemplateEngine templateEngine;
public PdfController() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
this.templateEngine = new TemplateEngine();
this.templateEngine.setTemplateResolver(templateResolver);
}
@GetMapping("/generate-pdf")
public void generatePdf(HttpServletResponse response) throws Exception {
// 设置响应头
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"example.pdf\"");
// 创建输出流
OutputStream os = response.getOutputStream();
// 创建一个书写器
PdfWriter writer = new PdfWriter(os);
// 引入FontProvider来支持中文
FontProvider fontProvider = new FontProvider();
fontProvider.addFont("STSongStd-Light", "UniGB-UCS2-H", "UniGB-UCS2-V");
// 文档属性
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf, PageSize.A4);
// 创建上下文
Context context = new Context();
context.setVariable("name", "世界");
// 渲染HTML模板
String htmlContent = templateEngine.process("templateName", context);
// 将HTML转换为PDF
ConverterProperties converterProperties = new ConverterProperties();
converterProperties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(htmlContent, pdf, converterProperties);
// 关闭文档和流
document.close();
os.close();
}
}
在这个代码实例中,我们首先创建了一个PdfController
类,并在其构造函数中初始化了TemplateEngine
。然后,我们定义了一个generatePdf
方法,该方法会在Spring MVC的@GetMapping
注解下被调用,生成PDF文件并写入响应流中。我们使用了itext7
库来实现HTML到PDF的转换,并且通过Thymeleaf
来处理模板引擎。这个例子展示了如何将Spring Boot应用程序中的HTML模板转换为PDF文档,并且可以作为生成PDF文件的参考。
评论已关闭