之前博主用了很多的html转pdf的插件,多多少少都有些问题,不是图片不显示,就是无法显示中文,或者是需要导入外部字体文件.ttc。通过好几天的研究最终发现了无需导入外部字体文件,或者将图片转base64的方式。废话不多说直接上代码!
首先导入maven的jar包
com.itextpdf html2pdf2.1.0 com.itextpdf layout7.1.3
java工具类代码
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.attach.impl.layout.HtmlPageBreak;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.Pdfdocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.document;
import com.itextpdf.layout.element.IBlockElement;
import com.itextpdf.layout.element.IElement;
import com.itextpdf.layout.font.FontProvider;
import java.io.*;
import java.util.List;
public class Html2PdfUtil {
public static void htmlToPdf(String htmlPath,String pdfPath) throws Exception {
Pdfdocument pdf = new Pdfdocument(new PdfWriter(pdfPath));
document document = new document(pdf, PageSize.A2);
InputStream htmlStream = new FileInputStream(htmlPath);
ConverterProperties converterProperties = new ConverterProperties();
//解决中文无法显示
FontProvider dfp = new DefaultFontProvider(true, true, true);
converterProperties.setFontProvider(dfp);
List elements = HtmlConverter.convertToElements(htmlStream,converterProperties);
for (IElement element : elements) {
// 分页符
if (element instanceof HtmlPageBreak) {
document.add((HtmlPageBreak) element);
//普通块级元素
} else {
document.add((IBlockElement) element);
}
}
document.close();
}
}



