java完美实现html转pdf
java完美实现html转pdf
1.pom依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>9.0.3</version>
</dependency>
2.工具类代码:
package club.jiajiajia.test;
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class FileTypeConvertUtil {
/**
* 将HTML转成PD格式的文件。html文件的格式比较严格
* @throws Exception
*/
public static void html2pdf(String htmlFile, String pdfFile) throws Exception {
String url = new File(htmlFile).toURI().toURL().toString();
OutputStream os = new FileOutputStream(pdfFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
ITextFontResolver fontResolver = renderer.getFontResolver();
if("linux".equals(getCurrentOperatingSystem())){
fontResolver.addFont("simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}else{
fontResolver.addFont("simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
}
renderer.getSharedContext().setBaseURL("file:/E:/test/m/");//本地文件
//renderer.getSharedContext().setBaseURL("http://photo.jiajiajia.club/img/photo/");//网络文件
renderer.layout();
renderer.createPDF(os);
os.close();
System.out.println("create pdf done!!");
}
public static String getCurrentOperatingSystem(){
String os = System.getProperty("os.name").toLowerCase();
return os;
}
public static void main(String[] args) {
String htmlFile = "E:\\test\\m\\a.html";
String pdfFile = "E:\\test\\m\\a.pdf";
try {
FileTypeConvertUtil.html2pdf(htmlFile, pdfFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.html测试文件
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
</head>
<body style = "font-family: SimSun;">
sdfsdf dfgdfg asfdfgdfg<br></br>sfsdf是否
<div style="width:100px;height:200px; word-wrap:break-word;">
深刻的方式的发挥砍杀事件的雷锋精神动力
风机收到了客户发送了的回复路上看到回复
</div>
<table border="1">
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</table>
<img src="b2d9a10e-94c3-4b76-a8ec-52c3fc92a694.png"/>
</body>
</html>
4.测试结果:
5.注意点:
1.simsun.ttc文件可以到百度上下载,后期本站将会提供下载功能
2.设置图片路径:
本地图片
renderer.getSharedContext().setBaseURL("file:/E:/test/m/");
在html文件中使用相对路径:
<img src="b2d9a10e-94c3-4b76-a8ec-52c3fc92a694.png"/>
如果是网络上的图片则设置:
renderer.getSharedContext().setBaseURL("http://photo.jiajiajia.club/img/photo/")
在html文件中使用相对路径
<img src="b2d9a10e-94c3-4b76-a8ec-52c3fc92a694.png"/>
3.div的文字换行
在生成的pdf中,默认不会换行;实现换行在div的style中加入 word-wrap:break-word;
<div style="width:100px;height:200px; word-wrap:break-word;">
4.在转换pdf的时候对html文件的格式要求比较严格,标签必需有结束标签,否则将会报一系列错误
例如:换行只有一个<br>标签
则会报异常:
ERROR: '元素类型 "br" 必须由匹配的结束标记 "</br>" 终止。'
而<br></br>则不会报异常
评论区
请写下您的评论...
猜你喜欢
jar依赖
2357
java实现world转pdf所需jar包-实现pdf在线预览一、依赖文件二、java代码实现packagetest.pdftest;importjava.awt.Color
工具
2729
java实现word转pdf实现在线预览(可以带水印)使用之前需要两个jar包的依赖文件下载地址:http://www.jiajiajia.club/file/info/4uwe2d/111Java
blog
Aspose实现word转图片、pdf
其他
1054
Aspose Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,主要提供.net跟java两个开发语言的控件套包,通过它,可以有计划地操纵一些商业中最流行的文件格
blog
html纯js实现图片懒加载
前端(h5)
1636
html纯js实现图片懒加载html纯js实现图片懒加载案例代码下载地址:http://www.jiajiajia.club/file/info/JA67P0
blog
java集合之TreeMap实现原理
java基础
2039
java集合之TreeMap实现原理TreeMap集合的实现其实说简单也简单说复杂也复杂,说简单是因为TreeMap底层实现完全依靠红黑树这个数据结构,相比与HashMap来说TreeMap不用考虑
java基础
2441
关键词URLEncoderURLDecoderescapeencodeURIencodeURIComponentdecodeURIunescapejavaStrings=URLEncoder.encode("这是上岛咖啡你哈卡斯","utf-8");Strings2=URLDecoder.decode("%E8%BF%99%E6%98%AF%E4%B8%8A%E5%B2%9B%E5%92%96%E
file
html纯js实现图片懒加载(测试代码)
html图片懒加载
1291
纯js实现图片懒加载lazyLoading.html测试页面
blog
算法-递归实现反转链表
数据结构与算法
2530
; publicNode(intvalue,Nodenext){ super(); this.value=value; this.next=next; }}算法实现packageclub.test;/***
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。