2023最新SpringBoot导出PDF方式(模板方式)

这篇具有很好参考价值的文章主要介绍了2023最新SpringBoot导出PDF方式(模板方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>4.0.3</version>
        </dependency>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
    <style>
        body{
            font-size: 15px;
        }
        .title{
            text-align: center;
        }
        .content{
            margin:0 auto;
            width: 400px;
        }
        .content .text{
            text-indent: 2em;
        }
        .content .datetime{
            text-align: right;
        }
    </style>
</head>
<body>
<div>
    <div class="view">
        <h2 class="title">自我介绍</h2>
        <div class="content">
            <p class="text">
                大家好,我叫${person.personName},我今年${person.personAge},我是个${person.personGender},
                我的职业是${person.personVocation},我目前住在${person.address},我在性格方面${person.personalityDesc}。
            </p>
            <p class="datetime">${person.createTime}</p>
        </div>
    </div>
</div>
</body>
</html>

在准备一个PDFUtil的工具类
PDFUtil工具类

public class PdfUtil {
    @Autowired
    private Configuration configuration;
    /**
     * 获取模板内容
     * @param templateDirectory 模板文件夹
     * @param templateName      模板文件名
     * @param paramMap          模板参数
     * @return
     * @throws Exception
     */
    public static String getTemplateContent(String templateDirectory, String templateName, Map<String, Object> paramMap) throws Exception {
        Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        try {
            configuration.setDirectoryForTemplateLoading(new File(templateDirectory));
        } catch (Exception e) {
            System.out.println("-- exception --");
        }

        Writer out = new StringWriter();
        Template template = configuration.getTemplate(templateName,"UTF-8");
        template.process(paramMap, out);
        out.flush();
        out.close();
        return out.toString();
    }
    /**
     * HTML 转 PDF
     * @param content html内容
     * @param outPath           输出pdf路径
     * @return 是否创建成功
     */
    public static boolean html2Pdf(String content, String outPath) {
        try {
            ConverterProperties converterProperties = new ConverterProperties();
            converterProperties.setCharset("UTF-8");
            FontProvider fontProvider = new FontProvider();
            fontProvider.addSystemFonts();
            converterProperties.setFontProvider(fontProvider);
            HtmlConverter.convertToPdf(content, new FileOutputStream(outPath), converterProperties);
        } catch (Exception e) {
            log.error("生成模板内容失败,{}",e);
            return false;
        }
        return true;
    }
    /**
     * HTML 转 PDF
     * @param content html内容
     * @return PDF字节数组
     */
    public static byte[] html2Pdf(String content) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            ConverterProperties converterProperties = new ConverterProperties();
            converterProperties.setCharset("UTF-8");
            FontProvider fontProvider = new FontProvider();
            fontProvider.addSystemFonts();
            converterProperties.setFontProvider(fontProvider);
            HtmlConverter.convertToPdf(content,outputStream,converterProperties);
        } catch (Exception e) {
            log.error("生成 PDF 失败,{}",e);
        }
        return outputStream.toByteArray();
    }
}
Bean类
```java
@Data
public class PersonIntroduce {
    //名称
    private String personName ;
    //年龄
    private Integer personAge ;
    //性格描述
    private String personalityDesc;
    //性别
    private String personGender;
    //职业
    private String personVocation;
    //现居地址
    private String address;
    //创建时间
    private String createTime;
}

Controller层代码

@Controller
public class PersonIntroduceController {
    @Autowired
    private PersonIntroduceService personIntroduceService;	
    @GetMapping("/exPdf")
    @ResponseBody
    public void exPdfPersonIntroduce(HttpServletRequest request , HttpServletResponse response) throws TemplateException, IOException {
        PersonIntroduce personIntroduce = new PersonIntroduce();
        personIntroduce.setPersonName("小刘");
        personIntroduce.setAddress("北京朝阳区");
        personIntroduce.setPersonAge(24);
        personIntroduce.setPersonGender("男生");
        personIntroduce.setPersonalityDesc("其实我也不是很清楚");
        personIntroduce.setPersonVocation("Java后端开发");
        personIntroduceService.exPersonIntroduce(personIntroduce , request , response);
    }
}

Service业务层代码:
注意:建议使用这种方式,之前我在项目开发的过程中,使用了PdUtil.class.ClassLoader()这种方式去定位exPdf.html,在线下(开发环境)是可以使用的,但是部署到服务器的时候就出现了文件找不到的情况,因为上述这种方式他是使用的磁盘绝对路径查找的。使用freeMarkerConfigurer.getConfiguration().getTemplate(“exPdf.html”);来定位就不会出现这种问题。

@Service
public class PersonIntroduceServiceImpl implements PersonIntroduceService {
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;
    /**
     * PDF导出类
     * @param personIntroduce
     */
    public void exPersonIntroduce(PersonIntroduce personIntroduce , HttpServletRequest  request, HttpServletResponse response) throws IOException, TemplateException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Map<String, Object> paramMap = new HashMap<>();
        personIntroduce.setCreateTime(sdf.format(new Date()));
        paramMap.put("person" , personIntroduce);
        Writer out = new StringWriter();
        //获取模板地址
        Template template = freeMarkerConfigurer.getConfiguration().getTemplate("exPdf.html");
        template.process(paramMap, out);
        out.flush();
        out.close();
        String templateContent = out.toString();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/pdf");
        String fileName =personIntroduce.getPersonName() + "-个人介绍-" + sdf.format(new Date());
        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), "iso8859-1"));

        byte[] resources = PdfUtil.html2Pdf(templateContent);
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(resources);
        outputStream.close();
    }
}

项目结构:
springboot导出pdf,spring boot,pdf,java
文章来源地址https://www.toymoban.com/news/detail-670670.html

到了这里,关于2023最新SpringBoot导出PDF方式(模板方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29)

    近期在项目种遇到了实时生成复杂 PDF 的需求,经过一番调研和测试,最终选择了采用 Thymeleaf 和 iText7 来实现需求,本文将详细介绍实现过程。 通过 Thymeleaf 渲染生成需要的页面内容; 通过 iText7 html2pdf 库将 Thymeleaf 渲染的结果转换成 PDF; 将 PDF 内容写入到接口输出流中返回

    2024年02月10日
    浏览(35)
  • Java导出PDF文档(模板导出和自定义)

    需要导出PDF文档,支持模板导出和自定义文档格式。 PDF模板创建可使用表单域创建表单字段,引入数据填充,或者根据实际需要生成html转换成pdf。 PDF模板可以考虑使用PDF编辑器编辑,创建表单域,配置好相应字段      

    2024年02月16日
    浏览(53)
  • java按照模板导出pdf或者word

    (一)制作模板  1、在word里制作模板         因为PDF常用的软件不支持编辑,所以先用Word工具,如WPS或者Office新建一个空白Word文档,里面制作出自己想要的样式。 2、 将Word转换成PDF形式          将设置好的Word文档转换成PDF形式,保存起来。 3、编辑PDF准备表单 

    2024年02月06日
    浏览(50)
  • 基于Eisvogel模板的Markdown导出PDF方法

    模板地址:Wandmalfarbe/pandoc-latex-template Pandoc:Pandoc官网 Latex环境:例如TexLive --template=\\\"模板存放位置\\\" --listings --pdf-engine=xelatex --highlight-style kate -V CJKmainfont=SimSun -V CJKoptions=AutoFakeBold -V CJKoptions=AutoFakeSlant -V mainfont=\\\"Times New Roman\\\"

    2024年02月15日
    浏览(42)
  • (Java)word转pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)导出

    目录 1、引入jar包 2、pdf处理工具类 3、poi模板导出工具类 4、测试类 5、模板 6、最终效果  1、引入jar包   2、pdf处理工具类  3、poi模板导出工具类  4、测试类 5、模板 6、最终效果 

    2024年02月06日
    浏览(72)
  • JAVA之利用easypoi将word模板导出为pdf(可带图片)

    EasyPoi是一款基于POI的Java快速导出/导入Excel工具。它在POI的基础上进行了封装,提供了更加简洁易用的API,使得生成Excel文件更加容易和高效。 使用EasyPoi可以轻松地生成Excel文件,并支持多种格式,如xlsx、xls、csv等。同时,EasyPoi也支持读取Excel文件,可以方便地获取其中的数

    2024年02月08日
    浏览(51)
  • Java-模板生成PDF方式3-HtmlToPDF

    使用thymeleaf做html模板,由xhtmlrenderer/flying-saucer-pdf-openpdf将html转为PDF LGPL 和 MPL 许可 pom.xml引入依赖 yml增加配置 工具类转换 HTML模板 applying_for_volunteer_service_form_html.html 资源 字体 src/main/resources/fonts/simhei.ttf 源码地址 https://gitee.com/cocoxike/pdfdemo.git 效果图 问题 1.中文显示 方法中加

    2024年02月08日
    浏览(33)
  • kubesphere中部署grafana实现dashboard以PDF方式导出

        GF_RENDERING_SERVER_URL       http://ip:30323/render   #grafana-image-renderer地址 GF_RENDERING_CALLBACK_URL   http://ip:32403/   #grafana地址 GF_LOG_FILTERS                              rendering:debug        

    2024年02月11日
    浏览(42)
  • SpringBoot+Thymeleaf 后端转html,pdf HTML生成PDF SpringBoot生成PDF Java PDF生成

    本文详细介绍了如何使用SpringBoot和Thymeleaf将后端HTML转换为PDF,包括依赖介绍、模板渲染以及PDF生成等步骤。

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包