JAVA实现Html转Pdf(wkhtmltopdf)
官网地址: https://wkhtmltopdf.org/downloads.html
直接下载对应版本即可
linux 安装命令
yum install xorg-x11-fonts-75dpi.noarch
yum install xorg-x11-fonts-Type1.noarch
yum install icu.x86_64
yum install libjpeg
yum install libpng
yum install libXrender
yum install libXext
rpm -ivh /opt/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
linux需要额外安装的插件
yum install xorg-x11-fonts-75dpi.noarch
yum install xorg-x11-fonts-Type1.noarch
yum install icu.x86_64
yum install libjpeg
yum install libpng
yum install libXrender
yum install libXext
linux 默认会安装到 /usr/local/bin/wkhtmltopdf
安装完成后默认还有个 wkhtmltopng的工具
linux 测试命令
wkhtmltopdf ‘html文件地址或者网址’ '生成文件保存地址'
windows 测试命令
- cmd 切换到安装目录下
- wkhtmltopdf.exe ‘html文件地址或者网址’ ‘生成文件保存地址’
不得不说 效果相当的惊艳,样式比某些浏览器的打印功能都好
下面直接上硬货
package com.itender.ms.util;import com.itender.ms.config.WkhtmltopdfConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.File;/*** @author ah* @date 2019/5/14 16:15*/
@Component
public class HtmlToPdf {private Logger logger = LoggerFactory.getLogger(HtmlToPdf.class);// wkhtmltopdf在系统中的路径private String toPdfTool ="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";@Autowiredprivate WkhtmltopdfConfig config;/*** html转pdf** @param srcPath* html路径,可以是硬盘上的路径,也可以是网络路径* @param destPath* pdf保存路径* @return 转换成功返回true*/public boolean convert(String srcPath, String destPath) {File file = new File(destPath);File parent = file.getParentFile();// 如果pdf保存路径不存在,则创建路径if (!parent.exists()) {parent.mkdirs();}StringBuilder cmd = new StringBuilder();if (System.getProperty("os.name").indexOf("Windows") == -1) {cmd.append(config.getPath());//.exe文件路径}else {cmd.append(toPdfTool);}cmd.append(" ");//cmd.append(" \"");cmd.append(srcPath);// cmd.append("\" ");cmd.append(" ");cmd.append(destPath);//logger.info(cmd.toString());boolean result = true;try {Process proc = Runtime.getRuntime().exec(cmd.toString());HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());error.start();output.start();proc.waitFor();} catch (Exception e) {result = false;e.printStackTrace();}return result;}public static void main(String[] args) {// HtmlToPdf.convert("C:\\Users\\dell\\Desktop\\aaa.html", "D:\\11111111.pdf");}
}
package com.itender.ms.util;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** @author ah* @date 2019/5/14 16:25*/
public class HtmlToPdfInterceptor extends Thread {private InputStream is;public HtmlToPdfInterceptor(InputStream is){this.is = is;}@Overridepublic void run(){try{InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null) {System.out.println(line.toString()); //输出内容}}catch (IOException e){e.printStackTrace();}}
}
注意:html文件一定要注明编码,不然会乱码 如
<meta http-equiv=“Content-Type” content=“text/html;charset=utf-8” ></meta>
表格分页问题
需要添加样式 :
能够在最大程度上处理分页时表格问题,但如果一个单元格内容整页都无法放下时同样会出现分页后没有边框问题
/* 样式具体加在哪需要更具实际情况来,有的表格可能是用div而不是table做的 */
ttable, tr, td, th, tbody, thead {tpage-break-inside: avoid !important;
}
java:
org.jsoup.nodes.Document documentHtml = Jsoup.parse(html);documentHtml.head().append("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" ></meta>");//后台处理乱码documentHtml.head().after("<style type=\"text/css\">\n" +"\ttable, tr, td, th, tbody, thead {\n" +"\tpage-break-inside: avoid !important;\n" +"\n" +"\t}\n" +"\t</style>");//处理表格分页
下面放一些网上找的各大html转pdf工具性能对比图
JAVA实现Html转Pdf(wkhtmltopdf)相关推荐
- java完成HTML转PDF wkhtmltopdf
为什么使用wkhtmltopdf HTML转PDF的实现方式有很多,但是转换出来的PDF的质量又好有坏.之前试过IText和一些其他的工具,但是不是格式乱了就是由于标签书写不规范(没有结尾标签)导致转 ...
- Java纯后端生成PDF格式报表的三种方案(包含echarts图表)
最近做了一个奇葩的需求,研究了一下Java纯后端生成PDF报表的方案,顺便将研究的方案做个总结复盘,分享一下. 需求分析:Java后端定时任务统计汇总成报表数据,并生成PDF格式的报表文件,并通过邮件 ...
- java实现写字板对pdf文件签名
java实现写字板对pdf文件签名 思路 首先明白写字板签名完输出的是base64的图片,剩下的就是将此图片插入到pdf文件中,实现此步骤的技术很多,可以用itex5但是为了实现与其他数据一起动态插入 ...
- Java使用itext生成Pdf
Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...
- Java 使用itextPdf7操作pdf,写入照片这一篇就够了
Java 使用itextPdf7操作pdf,写入照片这一篇就够了 1. 效果图 1.1 M*N列图片(无边界&有边界) 1.2 图片重叠 1.3 文字背景图片 1.4 图片与文字相邻 & ...
- java读取pdf_Java 读取PDF中的文本和图片的方法
本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java ...
- Aspose.Java实现word转pdf,添加水印等操作
Aspose.Java实现word转pdf,添加水印等操作 一. word转pdf 二. 文档插入水印 Aspose是一款商用版控件,支持各类文档操作,这里主要介绍如何在Springboot项目中使用 ...
- java开发环境搭建 pdf_01搭建java web开发环境.pdf
01搭建java web开发环境.pdf 还剩 19页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: ( 7)在 ...
- java使用itext填充pdf模板,超简单教学,有手就行
java使用itext填充pdf模板 1.先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线 2.将Word另存为pdf 3.打开电脑中的Adobe Acrobat pro DC(这 ...
- Java DOC 转换给 PDF 格式文档的代码
工作过程,把写代码过程经常用的代码片段备份一次,下面的代码段是关于Java DOC 转换给 PDF 格式文档的代码,应该对码农们有所用. import java.io.File; import jav ...
最新文章
- 构造方法前可以用public修饰吗_程序员,你连反射都不会,还敢说自己会Java吗?...
- PostgreSql 功能和操作
- CAShapeLayer和CAGradientLayer
- 诈骗者如何伪造电子邮件地址,以及如何分辨
- 29. ExtJs - Struts2 整合(1) - 登录页面
- 向oracle表空间添加一个数据文件命令
- junit 单元测试报错java.lang.NoClassDefFoundError
- Netty从零开始(一)
- 如何系统地自学前端(女生),女生发展前端是否是青春饭?
- Oracle数据库常用操作sql语句
- linux 文件查找帮助命令 , 查看网络链接信息, 历史命令
- python有趣小程序-python好玩的小程序
- LFM的脉冲压缩,即匹配滤波器的产生
- [2001年写的小说]星际争霸之外传
- 云痕大数据 家长登录_云痕大数据平台的使用对初中英语教与学的作用
- 关于python中Graphviz画图时报错的解决方法
- python 可执行文件大_python – 如何使用pyinstaller创建最小大小的可执行文件?
- 【小程序自定义组件,冒泡,自定义导航栏,页面栈】
- IE8不支持jquery , xmlhttp.open() IE8 拒绝访问
- 国外著名商品指数编制方法比较