Java中将Html转换为PDF的方法和步骤

 更新时间:2023年06月15日 10:44:25   作者:掉头发的王富贵  
这篇文章主要介绍了Java中如何将Html转换为PDF的方法,文中有相关的代码示例和步骤讲解,感兴趣的同学可以参考阅读

Html分两种情况转换为Pdf:

第一种:html的文件

第二钟:html格式的字符串

我们先来讲一下第一种情况: 1.市面上有很多的html转pdf的方法,但是不是受限于中文的限制就是受限于css样式的丢失或者是对html的要求太严格。 所以我在做这个教程的时候找到了一个非常厉害的一个组件首先看一下他的官网: e-iceblue 他有商业版本和免费的版本,商业版本没购买之前是有水印的,但是可以转换10页,免费版本是没有水印的,但是只支持转换前三页。结合教程使用,我们使用他的免费版本,首先第一步导入他的jar包:

<dependency>
            <groupId> e-iceblue </groupId>
            <artifactId>spire.doc.free</artifactId>
            <version>3.9.0</version>
        </dependency>

但是中央仓库是没有这个jar包的,所以我们还需要加一个他的jar包仓库地址:

    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>

2.第二步我们使用一下方式读取html文件的内容:

public class HtmlToPDFUtil {
 public static void main(String[] args) throws IOException{
        String inputHtml = "C:\\InputHtml.txt";
        //新建Document对象
        Document doc = new Document();
        //添加section
        Section sec = doc.addSection();
        String htmlText = readTextFromFile(inputHtml);
        //添加段落并写入HTML文本
        sec.addParagraph().appendHTML(htmlText);
        //将文档另存为PDF
        doc.saveToFile("C:\\HTMLstringToPDF.pdf", FileFormat.PDF);
        doc.dispose();
    }
 public static String readTextFromFile(String fileName) throws IOException {
        StringBuffer sb = new StringBuffer();
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String content;
        while ((content = br.readLine()) != null) {
            sb.append(content);
        }
        return sb.toString();
    }
}

这个时候就会在c盘目录下生成InputHtml.txt对应的HTMLstringToPDF.pdf文件 第二种方法,html为文本格式的情况: 1.导入上的jar包之后之间将html的文本内容赋值给htmlTest

 public static void main(String[] args) throws IOException{
        //新建Document对象
        Document doc = new Document();
        //添加section
        Section sec = doc.addSection();
        String htmlText = " <tr>\n" +
                "        <td colspan=\"8\">\n" +
                "          <div class=\"yiban\">\n" +
                "            <span class=\"jiachu\">联系电话:<span>18888888888</span></span>\n" +
                "          </div>\n" +
                "          <div class=\"yiban\">\n" +
                "            <span class=\"jiachu\">送货单号:</span><span>1567894</span>\n" +
                "          </div>\n" +
                "        </td>\n" +
                "      </tr>";
        //添加段落并写入HTML文本
        sec.addParagraph().appendHTML(htmlText);
        //将文档另存为PDF
        doc.saveToFile("C:\\HTMLstringToPDF.pdf", FileFormat.PDF);
        doc.dispose();
    }

这个情况也是一样的

拓展:将生成的pdf文件返回给前端以供下载

需要一下的代码段,直接贴出来供大家参考:

 public static void downloadPdf(String fileName, String path) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response = requestAttributes.getResponse();
        response.setContentType("application/force-download");
        try {
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        File file = new File(path);
        InputStream is = null;
        ServletOutputStream os = null;
        try {
            is = new FileInputStream(file);
            os = response.getOutputStream();
            int b;
            while ((b = is.read()) != -1) {
                os.write(b);
            }
        } catch (FileNotFoundException e) {
            ExceptionUtils.logError(e);
        } catch (IOException e) {
            ExceptionUtils.logError(e);
        } finally {
            try {
                if (null != os) {
                    os.close();
                }
                if (null != is) {
                    is.close();
                }
            } catch (IOException e) {
                ExceptionUtils.logError(e);
            }
        }
    }

这段Java代码演示了如何从本地服务器下载PDF文件并强制用户下载。在此代码中,通过ServletRequestAttributes获取当前请求的HttpServletResponse对象,并设置响应的content-typeContent-Disposition头信息,强制将网页作为附件进行下载保存。

接着,使用 FileInputStream 从指定路径打开该文件,并从响应对象获取输出流 ServletOutputStream,将文件内容通过循环一个字节一个字节读取写入输出流中,最终实现文件的下载。循环的过程中没有直接按块大小读取并写入,可能会对操作系统产生一些额外的负载,但是其功能简单易懂,可以适用于小型文档或者测试用例场景等;如果文件较大,可以改变循环体来调用更高效的I/O操作API实现数据的分块传输,避免内存泄漏。

最后在finally块中关闭输入和输出流,释放资源,防止出现问题可能导致的文件描述符泄露等安全隐患。

需要注意的是,在设定Content-Disposition头信息时有编码转换的处理,确保整个文件名不会受到URL编码而导致乱码问题。

使用该方法:

HtmlToPDFUtil.downloadPdf(fileName,tmplPath+fileName);

这样就会将pdf文件作为response返回给前端,前端做对应的操作就能将文件下载下来。

到此这篇关于Java中将Html转换为PDF的方法和步骤的文章就介绍到这了,更多相关Java Html转换为PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何使用Idea搭建全注解式开发的SpringMVC项目

    如何使用Idea搭建全注解式开发的SpringMVC项目

    这篇文章主要介绍了如何使用Idea搭建全注解式开发的SpringMVC项目,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • echarts图表导出excel示例

    echarts图表导出excel示例

    这篇文章主要介绍了echarts图表导出excel示例,需要的朋友可以参考下
    2014-04-04
  • Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

    Java通过MyBatis框架对MySQL数据进行增删查改的基本方法

    MyBatis框架由Java的JDBC API进一步封装而来,在操作数据库方面效果拔群,接下来我们就一起来看看Java通过MyBatis框架对MySQL数据进行增删查改的基本方法:
    2016-06-06
  • Mybatis拦截器实现数据权限详解

    Mybatis拦截器实现数据权限详解

    这篇文章主要介绍了Mybatis拦截器实现数据权限详解, 通过Mybatis拦截器我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,需要的朋友可以参考下
    2023-11-11
  • Mybatis-plus基于redis实现二级缓存过程解析

    Mybatis-plus基于redis实现二级缓存过程解析

    这篇文章主要介绍了Mybatis-plus基于redis实现二级缓存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java实现简单的日历界面

    Java实现简单的日历界面

    这篇文章主要为大家详细介绍了Java实现简单的日历界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • springboot集成开发实现商场秒杀功能

    springboot集成开发实现商场秒杀功能

    这篇文章主要介绍了springboot集成实现商品秒杀功能,秒杀系统业务流程,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 浅谈Mybatis之参数传递的几种姿势

    浅谈Mybatis之参数传递的几种姿势

    在mybatis的日常开发中,mapper接口中定义的参数如何与xml中的参数进行映射呢?本文就详细的介绍一下,感兴趣的可以了解一下
    2021-09-09
  • Java实现萝卜勇者游戏的示例代码

    Java实现萝卜勇者游戏的示例代码

    《萝卜勇者》是由国内玩家自制的一款独立游戏,玩家扮演萝卜勇士闯关,打败各种邪恶的敌人,获得最后的胜利。本文将利用Java实现这一游戏,感兴趣的可以了解一下
    2022-02-02
  • SpringBoot DBUnit 单元测试(小结)

    SpringBoot DBUnit 单元测试(小结)

    这篇文章主要介绍了SpringBoot DBUnit 单元测试(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论