Maven依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.12</version>
</dependency>
代码
Itext5HtmlToPDF
import cn.hutool.core.io.file.FileReader;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import org.springframework.util.ResourceUtils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.charset.Charset;
public class Itext5HtmlToPDF {
public static void main(String[] args) throws Exception {
//第一步,创建一个 iTextSharp.text.Document对象的实例:
Document document = new Document();
//第二步,为该Document创建一个Writer实例:
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:\\test\\HelloWorld2.pdf"));
//第三步,打开当前Document
document.open();
//第四步,为当前Document添加内容:
// 4.1 该为加载html文件字符串生成pdf方式
File file2 = ResourceUtils.getFile("D:\\test\\HelloWorld.html");
String s = FileReader.create(file2).readString();
ByteArrayInputStream fis = new ByteArrayInputStream(s.getBytes());
// 4.2 该为加载html文件生成pdf方式
//FileInputStream fis = new FileInputStream("D:\\test\\HelloWorld.html");
XMLWorkerHelper.getInstance().parseXHtml(writer, document,fis ,null, Charset.defaultCharset(),new FontProviderUtil());
//第五步,关闭Document
document.close();
System.out.println("OK!");
}
}
FontProviderUtil 解决中文
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
//这里重写字体
public class FontProviderUtil extends XMLWorkerFontProvider {
@Override
public Font getFont(final String fontname, final String encoding,
final boolean embedded, final float size, final int style,
final BaseColor color) {
BaseFont bf = null;
try {
bf = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
} catch (Exception e) {
e.printStackTrace();
}
Font font = new Font(bf, size, style, color);
font.setColor(color);
return font;
}
}
HelloWorld.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
<style>
h2{
color: red;
}
</style>
</head>
<body>
<h1>中文测试</h1>
<h2>css测试!</h2>
<h1>表格测试</h1>
<table border="1">
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
<tr>
<td>张三</td>
<td>11</td>
</tr>
<tr>
<td>李四</td>
<td>12</td>
</tr>
</table>
<h1>图片测试</h1>
<img src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width="300px" height="200px" />
<h1>JS测试</h1>
<span id="sss">修改之前的内容</span>
<div>
<h1>PDF分页测试</h1>
</div>
<div>
<h1>PDF分页测试</h1>
</div>
<div>
<h1>PDF分页测试</h1>
</div>
<div>
<h1>PDF分页测试</h1>
</div>
<div>
<h1>PDF分页测试</h1>
</div>
<div>
<h1>PDF分页测试</h1>
</div>
</body>
<script>
document.getElementById("sss").innerText="修改之后的内容";
</script>
</html>
效果