广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot+Thymeleaf实现生成PDF文档
  • 813
分享到

SpringBoot+Thymeleaf实现生成PDF文档

2024-04-02 19:04:59 813人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、引入依赖二、application.yml配置三、pdf相关配置四、Controller五、生成PDF文件响应效果前言 温馨提示:本博客使用Thymeleaf模板引擎实现

前言

温馨提示:本博客使用Thymeleaf模板引擎实现PDF打印仅供参考:

在阅读该博客之前,先要了解一下Thymeleaf模板引擎,因为是使用Thymeleaf模板引擎实现的PDF打印的,

Thymeleaf是一个现代的服务器端 Java 模板引擎,适用于 WEB 和独立环境。

Thymeleaf 的主要目标是为您的开发工作流程带来优雅的自然模板——html可以在浏览器中正确显示,也可以用作静态原型,从而在开发团队中实现更强大的协作。

借助 spring Framework 的模块、与您最喜欢的工具的大量集成以及插入您自己的功能的能力,Thymeleaf 是现代 HTML5 JVM Web 开发的理想选择——尽管它可以做的更多。

不了解小伙伴可以去Thymeleaf官网查看,有更详细的讲解。

接下来就不一一介绍了,直接上代码。

一、引入依赖

1.Thymeleaf,生成PDF相关依赖

1.1 以下依赖为必要依赖,一个都不能少,依赖version可以根基实际情况使用相关的依赖版本。

二、application.yml配置

1.yml配置文件

yml配置文件使用配置thymeleaf模板路径(示例):

以上相关为基础且必须配置的内容,接下来继续讲解thymeleaf引擎需要生成PDF的相关配置。

三、PDF相关配置

1.PDF配置代码(如下):

package com.cy.xgsm.configuration;

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;

import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.layout.font.FontProvider;
import com.cy.xgsm.controller.PrintPdfController;


@Configuration
public class PdfConfiguration {
	
	private static final Logger log = LoggerFactory.getLogger(PdfConfiguration.class);
	
	@Bean
	public FontProvider getFontProvider() throws URISyntaxException, IOException {
		FontProvider provider = new DefaultFontProvider(true, true, false);
		byte[] bs = null;
		//SIMSUN.TTC为字体
		try (InputStream in = PrintPdfController.class.getClassLoader().getResourceAsStream("font/SIMSUN.TTC")) {
			bs = IOUtils.toByteArray(in);
		}		
		PdfFont pdfFont = PdfFontFactory.createTtcFont(bs, 1, PdfEncodings.IDENTITY_H, false, true);
		provider.addFont(pdfFont.getFontProgram());
		return provider;
	}
	
	@Bean
	public ConverterProperties converterProperties(FontProvider fontProvider, Configuration config) {
		ConverterProperties cp = new ConverterProperties();
		cp.setBaseUri(config.getPdfUrl());
		try {
			cp.setFontProvider(fontProvider);
		} catch (Exception e) {
			log.error("打印PDF时未能添加字体", e);
		}
		return cp;
	}
	
}

注意PDF配置需要添加打印PDF字体,SIMSUN.TTC为打印需要的字体,但是也可以是其他的

四、Controller

1.以上所有的相关配置信息都配置完了,接下来就可以写api接口了

package com.cy.xgsm.controller;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.Http.httpservletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.cy.xgsm.common.Result;
import com.cy.xgsm.model.OrderInfo;
import com.cy.xgsm.service.OrderInfoService;


@Controller
@RequestMapping("print")
public class PrintPdfController {
	
    private static final Logger log = LoggerFactory.getLogger(PrintPdfController.class);
    
	@Autowired
	private OrderInfoService service;
	//thymeleaf模板引擎
    @Autowired
    TemplateEngine templateEngine;
	//html转换成pdf需要使用ConverterProperties
    @Autowired
    ConverterProperties converterProperties;    
	
    @GetMapping("order/{orderId}.pdf")
	public void orderPdf(@PathVariable Long orderId, HttpServletResponse resp) throws IOException {
		Result<OrderInfo> result = service.selectByPrimaryKey(orderId);
		if (!result.isComplete()) {
            resp.sendError(404, "订单ID不存在");
        }
        Context context = new Context();
        context.setVariable("order", result.getData());
		///html/pdf/order-template为打印模板纸张路径
        processPdf(context, "/html/pdf/order-template", result.getData().getKddh(), resp);
		
	}

	
	private void processPdf(Context context, String template, String filename, HttpServletResponse resp) throws IOException {
        log.info("生成PDF:" + filename);
        String html = templateEngine.process(template, context);
        String filenameEncoded = URLEncoder.encode(filename, "utf-8");
        resp.setContentType("application/pdf");
        resp.setHeader("Content-Disposition", "filename=" + filenameEncoded + ".pdf");
        try (OutputStream out = resp.getOutputStream()) {
            PdfDocument doc = new PdfDocument(new PdfWriter(out));
			//打印使用什么什么纸张可根据实际情况,我这里默认使用A4
            doc.setDefaultPageSize(PageSize.A4.rotate());
            HtmlConverter.convertToPdf(html, doc, converterProperties);
        }
		
	}

}

1.请求接口报错解决方式:

如果在请求接口的时候发生以下错误信息是打印模板的路径错误了。

解决该错误需在你的yml配置thymeleaf路径即可,不懂怎么配置请往上看第二点application.yml配置,可按照application.yml复制上去即可解决。

五、生成PDF文件响应效果

点击Save to a file保存,响应结果数据均为测试数据,仅供参考。

到此这篇关于SpringBoot+Thymeleaf实现生成PDF文档的文章就介绍到这了,更多相关SpringBoot Thymeleaf生成PDF内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot+Thymeleaf实现生成PDF文档

本文链接: https://www.lsjlt.com/news/167742.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot+Thymeleaf实现生成PDF文档
    目录前言一、引入依赖二、application.yml配置三、PDF相关配置四、Controller五、生成PDF文件响应效果前言 温馨提示:本博客使用Thymeleaf模板引擎实现...
    99+
    2022-11-13
  • SpringBoot实现Thymeleaf验证码生成
    使用后台返回验证码图片,验证码存到session中后端实现校验,前端只展示验证码图片。 本篇用SpringBoot Thymeleaf实现验证码生成。 创建springboot项...
    99+
    2022-11-12
  • Spring Boot——Thymeleaf生成PDF实战教程
    目录 前言一、引入依赖1.Thymeleaf,生成PDF相关依赖 二、application.yml配置1.yml配置文件 三、PDF相关配置1.PDF配置代码(如下): 四、Co...
    99+
    2023-09-02
    java spring boot
  • SpringBoot如何实现word文档转pdf
    目录一.背景二.方案选择1.Spire.Doc for Java方案2.docx4j方案3.jodconverter+LibreOffice 方案4.其他三.实操1.docx4j2....
    99+
    2022-11-13
  • 【生成PDF】【JAVA】纯后台生成Echarts图片,并将图片生成到PDF文档
    目录 前言 一、如何后台生成Echarts图片? 1.PhantomJS 2.PhantomJS的下载  3.用phantomjs调用echarts-converts.js生成图片 二、Java如何将Echarts图生成到PDF 1.生成P...
    99+
    2023-09-07
    pdf java echarts
  • ASP.NET Core 5中如何生成PDF文档
    前言 大家用 ASP.NET Core 进行项目开发时,常会有生成 PDF 的需求,那如何生成呢?这篇文章我们就来讨论如何通过 DinkToPdf 来生成 PDF 文档,DinkTo...
    99+
    2022-11-11
  • java集成开发SpringBoot生成接口文档示例实现
    目录为什么要用Swagger ?Swagger集成第一步: 引入依赖包第二步:修改配置文件第三步,配置API接口Unable to infer base urlFor input s...
    99+
    2022-11-12
  • 手把手教你使用Java实现在线生成pdf文档
    目录一、介绍二、案例实现2.1添加 iText 依赖包2.2简单实现2.3复杂实现2.4变量替换方式三、总结一、介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需...
    99+
    2022-11-13
  • 【教程】如何使用Java生成PDF文档?
    在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享。而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行。下面,我们将为您介绍如何使用Java生成PDF文档...
    99+
    2023-09-02
    java servlet jvm
  • Java根据word模板生成word文档并转成PDF文件
    1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 ...
    99+
    2023-09-09
    java word pdf chart
  • Nodejs中怎么利用Kue动态生成PDF文档
    Nodejs中怎么利用Kue动态生成PDF文档,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。先决条件您需要安装以下软件:Node.js最新稳定...
    99+
    2022-10-19
  • 怎么在ASP.NET项目中生成一个PDF文档
    本篇文章给大家分享的是有关怎么在ASP.NET项目中生成一个PDF文档,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。安装 DinkToPdf要想安装 DinkToPdf,可以通...
    99+
    2023-06-14
  • SpringBoot如何自动生成API文档详解
    前言 在做项目的时候,如果项目是前后分离的,后端一定要和前端或者是移动端对接接口,那么问题来了,接口是不是要自己写给他们看,一般的会采用Excel或者Word来写,高级一点的就采用A...
    99+
    2022-11-12
  • SpringBoot是怎么自动生成API文档的
    这篇文章主要讲解了“SpringBoot是怎么自动生成API文档的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot是怎么自动生成API文档的”吧!前言在做项目的时候,如果项...
    99+
    2023-06-20
  • 利用python程序生成word和PDF文档的方法
    一、程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freem...
    99+
    2022-06-04
    文档 程序 方法
  • 如何利用java实现生成PDF文件
    目录1.PDF文件简介2.生成PDF2.1 基于freemarker框架实现HTML转PDF2.1.1 引入jar包依赖:2.1.2 创建html模板test_template:2....
    99+
    2022-11-13
    java生成pdf文档 java生成pdf文件表格 java生成pdf
  • 教你利用springboot集成swagger并生成接口文档
    效果图 实现步骤 1.maven中引入jar包,不同版本的swagger可能页面效果不一样。 <dependency> <groupI...
    99+
    2022-11-12
  • Springboot整合Springfox生成restful的在线api文档
    目录Springfox是什么,有什么用?Springfox的依赖Springfox的配置测试的ControllSpringfox是什么,有什么用? Springfox基于Swagge...
    99+
    2022-11-13
  • SpringBoot怎么整合Swagger Api自动生成文档
    本篇内容主要讲解“SpringBoot怎么整合Swagger Api自动生成文档”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么整合Swagger Api自动生成文档”吧!...
    99+
    2023-06-20
  • C#实现读取txt文件生成Word文档
    目录dll文件安装(3种方法)读取txt生成Word注意事项总结本文将以C#程序代码为例介绍如何来读取txt文件中的内容,生成Word文档。在编辑代码前,可参考如下代码环境进行配置:...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作