之前博主用了很多的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); Listelements = HtmlConverter.convertToElements(htmlStream,converterProperties); for (IElement element : elements) { // 分页符 if (element instanceof HtmlPageBreak) { document.add((HtmlPageBreak) element); //普通块级元素 } else { document.add((IBlockElement) element); } } document.close(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)