pom依赖
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
CustomXMLWorkerFontProvider.java解决中文不显示问题
package test;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import lombok.extern.slf4j.Slf4j;
/**
* 解决XMLWorkerHelper中文不显示。
* <p>使用iTextAsian.jar中自带的中文字体
*
*/
@Slf4j
public class CustomXMLWorkerFontProvider 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("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Font font = new Font(bf, size, style, color);
font.setColor(color);
// log.info("PDF文档字体初始化完成!");
return font;
} catch (Exception e) {
log.error("exception:", e);
}
return null;
}
}
PdfUtil.java
package test;
import com.alibaba.fastjson.JSONObject;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import java.io.*;
import java.nio.charset.Charset;
public class PdfUtil {
/**
* 通过html生成文件
* @param htmlContent html格式内容
* @param file 输出文件file
*/
public static void createdPdfByItextHtml(String htmlContent,File file){
InputStream inputStream = null;
FileOutputStream outputStream = null;
PdfWriter writer = null;
try {
// 1. 获取生成pdf的html内容
inputStream= new ByteArrayInputStream(htmlContent.getBytes("utf-8"));
outputStream = new FileOutputStream(file);
Document document = new Document();
writer = PdfWriter.getInstance(document, outputStream);
document.open();
// 2. 添加字体
// XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
// fontImp.register(getFontPath());
// 3. 设置编码
XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, Charset.forName("UTF-8"),new CustomXMLWorkerFontProvider());
// 4. 关闭,(不关闭则会生成无效pdf)
document.close();
} catch (Exception ex) {
ex.printStackTrace();
}finally {
try {
if(writer!=null){
writer.close();
}
if (outputStream != null) {
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
String a = "{\"html\":\"<p>saasafdfdsadasd</p>\\n<p><strong>sdfsdfsdf</strong></p>\\n<p><strong>打开解放军官兵的时间赶不上的肌肤比较失败的不过深度不够撒旦解放大师傅士大夫士大夫士大夫士大夫士大夫看见电脑打开发给你的口水歌看你可怜的那个锻炼方法的联合国的法律后果费德勒换个地方;陆海空地方管理框架和 规范化风格风格化风格化分隔花粉管花粉管和法规和风格化法国和法国恢复回复给梵蒂冈豆腐干反对恢复共和国建国和话剧规划局肉汤羊肉汤预亏里哦蕾哈娜贴吧软弱和任天堂如果退货有高速带宽不够数量的可能过来的咖啡馆上的困境老师的可能各类考试的 <span id=\\\"attachment_mce_2\\\" class=\\\"attachment\\\" contenteditable=\\\"false\\\"><img src=\\\"http://172.16.80.138:8917/iccMeeting/tinymce/fileIcons//file_type_image.svg\\\" /><a href=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\8ac4290caa5f0a88930d80d2f4b608f5.jpeg\\\">8ac4290caa5f0a88930d80d2f4b608f5.jpeg (8.35 K)</a></span></strong></p>\\n<p><img src=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\cut-6546-1656312210599.png\\\" alt=\\\"\\\" /><img src=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\cut-6546-1656312781796.png\\\" alt=\\\"\\\" /></p>\\n<p><strong>sdfsdf</strong></p>\\n<p><strong><span style=\\\"color: #e03e2d;\\\">yrdfsdf</span></strong></p>\\n<p><strong><span style=\\\"color: #e03e2d;\\\"><span style=\\\"font-size: 24px;\\\">dsfsdfsdfsfsdfsdfsdfsxxxdfvbvscaskdbsjhcbsddjfcbsdjdbfcsjdbfcshdbfcjskzhbvdfafvajkshbdfvjhoasdbvjsadbvkjdsbvkjdfhbfvkjdbhfvkjdhbfvkjdzbhfvjjdhbvvdf你好山东福建河南山东快解封你是困难的时刻发你的空间概念的设计风格百度是打开空间概念是的看法呢广东省快解封那个时代开发功能速度快给你是打开开关你手动开关你是大哥</span></span></strong></p>\\n<p><span style=\\\"text-decoration: underline;\\\"><strong><span style=\\\"color: #e03e2d; text-decoration: underline;\\\"><span style=\\\"font-size: 24px;\\\">dsfsfsd<span id=\\\"attachment_mce_1\\\" class=\\\"attachment\\\" contenteditable=\\\"false\\\"><img src=\\\"http://172.16.80.138:8917/iccMeeting/tinymce/fileIcons//file_type_image.svg\\\" /><a href=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\8ac4290caa5f0a88930d80d2f4b608f5.jpeg\\\">8ac4290caa5f0a88930d80d2f4b608f5.jpeg (8.35 K)</a></span></span></span></strong></span></p>\",\"imgUrl\":\"http://172.16.80.138:8917\"}";
String b = "<html><body>" + JSONObject.parseObject(a).get("html").toString() + "</body></html>";
createdPdfByItextHtml(b,new File("D:/test.pdf"));
}
}