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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go并发编程中使用channel的方法

    Go并发编程中使用channel的方法

    本文给大家介绍Go并发编程中使用channel的方法,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Java实现对一行英文进行单词提取功能示例

    Java实现对一行英文进行单词提取功能示例

    这篇文章主要介绍了Java实现对一行英文进行单词提取功能,结合实例形式分析了java基于StringTokenizer类进行字符串分割的相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Java网络编程UDP实现消息发送及聊天

    Java网络编程UDP实现消息发送及聊天

    这篇文章主要为大家详细介绍了Java网络编程UDP实现消息发送及聊天,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java实现SM3加密和验证的示例代码

    Java实现SM3加密和验证的示例代码

    在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开,本文给大家详细介绍了使用Java实现SM3加密和验证,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • Servlet机制Pushlet原理及用法详解

    Servlet机制Pushlet原理及用法详解

    这篇文章主要介绍了Servlet机制Pushlet原理及用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • IntelliJ IDEA 统一设置编码为utf-8编码的实现

    IntelliJ IDEA 统一设置编码为utf-8编码的实现

    这篇文章主要介绍了IntelliJ IDEA 统一设置编码为utf-8编码的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-06-06
  • Java一些常见的出错异常处理方法总结

    Java一些常见的出错异常处理方法总结

    下面小编就为大家带来一篇Java一些常见的出错异常处理方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java Web Listener实现事件监听与处理

    Java Web Listener实现事件监听与处理

    Java Web开发中的Listener是一种事件机制,通过监听Web应用程序的事件,实现对事件的处理,从而实现更加灵活和高效的应用程序开发。Listener能够监听的事件包括应用程序启动和关闭、Session创建和销毁、请求和响应对象的创建和销毁等
    2023-04-04
  • Mybatis使用连表查询的操作代码

    Mybatis使用连表查询的操作代码

    这篇文章主要介绍了Mybatis如何使用连表查询,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 浅谈Java高并发解决方案以及高负载优化方法

    浅谈Java高并发解决方案以及高负载优化方法

    这篇文章主要介绍了浅谈Java高并发解决方案以及高负载优化方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论