在springboot项目的resource目录下新建一个文件fonts用于存放字体文件simsun.ttc
我的系统是windows10,该字体文件在windows目录下:C:\Windows\Fonts
这三个文件随便复制哪一个都可以,只需要复制一个到项目的fonts目录就可以了
maven包
<!-- https://mvnrepository.com/artifact/com.itextpdf/html2pdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>html2pdf</artifactId> <version>2.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.itextpdf/layout --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>layout</artifactId> <version>7.1.3</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>kernel</artifactId> <version>7.1.3</version> </dependency>
代码
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.io.font.FontProgram;
import com.itextpdf.io.font.FontProgramFactory;
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.font.FontProvider;
import java.io.*;
import java.util.Objects;
/**
* @ClassName: Html2PdfUtil
* @Author: ChenHuiWan
* @Description: html转pdf工具类
* @Date: 2021/12/16 17:53
* @Version: 1.0
*/
public class Html2PdfUtil {
private static final String SHIPPED_FONT_RESOURCE_PATH = Objects.requireNonNull(Html2PdfUtil.class.getResource("/fonts/simsun.ttc")).toString();
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 fontProvider = new DefaultFontProvider();
System.out.println("SHIPPED_FONT_RESOURCE_PATH: "+SHIPPED_FONT_RESOURCE_PATH);
FontProgram fontProgram = FontProgramFactory.createFont(SHIPPED_FONT_RESOURCE_PATH+",0");
fontProvider.addFont(fontProgram);
converterProperties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(htmlStream, pdf, converterProperties);
document.close();
}
}