JAVA将HTML转换成PDF

使用itextpdf

<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itext7-core</artifactId>
  <version>7.1.15</version>
  <type>pom</type>
</dependency>

JAVA代码

在转换的过程中SimSun.ttf文件作用是将中文字体进行转换 

package com.example.controller;

import com.example.model.LogisticsDTO;
import com.example.model.request.PdfTableRequest;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;


/**
 * @author :cainiao
 * @date : 2024/10/28
 */
@RestController
@RequestMapping("/common")
public class CommonRequest {

    @GetMapping("/getPDFData")
    public ResponseEntity<Resource> getPDFData() throws IOException {
        String html = "";
        // 输出 PDF 文件的路径
        String dest = "output.pdf";
        // 替换为您字体文件的路径
        String fontPath = "SimSun.ttf";


        // 读取 HTML 文件内容
        html = new String(Files.readAllBytes(Paths.get("小说.html")), "UTF-8");
        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdfDoc = new PdfDocument(writer);
        // 创建 ConverterProperties
        ConverterProperties properties = new ConverterProperties();

        // 创建并设置 FontProvider
        DefaultFontProvider fontProvider = new DefaultFontProvider();
        fontProvider.addFont(fontPath );
        properties.setFontProvider(fontProvider);

        // 将 HTML 转换为 PDF

        HtmlConverter.convertToPdf(html, pdfDoc, properties);
        pdfDoc.close();
        return  exportPdf(dest);
    }

    public  ResponseEntity<Resource>  exportPdf( String pdfFilePath){
        File pdfFile = new File(pdfFilePath);

        // 检查文件是否存在
        if (!pdfFile.exists()) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        }

        // 返回 PDF 文件作为响应
        Resource resource = new FileSystemResource(pdfFile);
        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + pdfFile.getName());

        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(pdfFile.length())
                .contentType(org.springframework.http.MediaType.APPLICATION_PDF)
                .body(resource);
    }

HTML模版

<html> 
 <head> 
  <meta charset="utf-8"> 
  <title>小说</title> 
 </head> 
 <body> 
  <div style="text-align: center;"> 
   <h4>小说清单</h4> 
   <div> 
    <table border="1" style="margin: auto" cellpadding="10"> 
     <tbody> 
      <tr> 
       <th>小说名称</th> 
       <th>主角</th> 
       <th>作者</th> 
       <th>创建时间</th> 
      </tr> 
      <tr> 
       <td>白鹿原</td> 
       <td>白嘉轩、田小娥</td> 
       <td>陈忠实</td> 
       <td>1993年</td> 
      </tr> 
     </tbody> 
     <tr>
      <td>平凡的世界</td>
      <td>孙少安、孙少平</td>
      <td>路遥</td>
      <td>1986年</td>
     </tr>
     <tr>
      <td>繁花</td>
      <td>沪生、阿宝、小毛</td>
      <td>金宇澄</td>
      <td>2012年</td>
     </tr>
    </table> 
   </div> 
  </div> 
  <style>

</style>  
 </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值