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-type
和Content-Disposition
头信息,强制将网页作为附件进行下载保存。
接着,使用 FileInputStream
从指定路径打开该文件,并从响应对象获取输出流 ServletOutputStream
,将文件内容通过循环一个字节一个字节读取写入输出流中,最终实现文件的下载。循环的过程中没有直接按块大小读取并写入,可能会对操作系统产生一些额外的负载,但是其功能简单易懂,可以适用于小型文档或者测试用例场景等;如果文件较大,可以改变循环体来调用更高效的I/O操作API实现数据的分块传输,避免内存泄漏。
最后在finally块中关闭输入和输出流,释放资源,防止出现问题可能导致的文件描述符泄露等安全隐患。
需要注意的是,在设定Content-Disposition头信息时有编码转换的处理,确保整个文件名不会受到URL编码而导致乱码问题。
使用该方法:
HtmlToPDFUtil.downloadPdf(fileName,tmplPath+fileName);
这样就会将pdf文件作为response返回给前端,前端做对应的操作就能将文件下载下来。
到此这篇关于Java中将Html转换为PDF的方法和步骤的文章就介绍到这了,更多相关Java Html转换为PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!