package com.stylefeng.guns.modular.system.util.itextpdf; import com.itextpdf.html2pdf.ConverterProperties; import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.kernel.events.PdfDocumentEvent; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.font.FontProvider; import org.apache.commons.lang.StringUtils; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * @author zhibing.pu * @Date 2023/8/14 11:13 */ public class HtmlToPdfUtils { public static void convertToPdf(InputStream inputStream, String waterMark, OutputStream outputStream) throws IOException { PdfWriter pdfWriter = new PdfWriter(outputStream); PdfDocument pdfDocument = new PdfDocument(pdfWriter); //设置为A4大小 pdfDocument.setDefaultPageSize(PageSize.A4); //添加水印 pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new WaterMarkEventHandler(waterMark)); //添加页码 //pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE,new PageEventHandler()); //添加中文字体支持 ConverterProperties properties = new ConverterProperties(); FontProvider fontProvider = new FontProvider(); PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false); fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H"); //添加自定义字体,例如微软雅黑 /*if (StringUtils.isNotBlank(fontPath)){ PdfFont microsoft = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, false); fontProvider.addFont(microsoft.getFontProgram(), PdfEncodings.IDENTITY_H); }*/ properties.setFontProvider(fontProvider); HtmlConverter.convertToPdf(inputStream, pdfDocument, properties); pdfWriter.close(); pdfDocument.close(); inputStream.close(); } public static void convertToPdf(String fileName, String waterMark, OutputStream outputStream) throws IOException { InputStream htmlStream = new FileInputStream(fileName); PdfWriter pdfWriter = new PdfWriter(outputStream); PdfDocument pdfDocument = new PdfDocument(pdfWriter); //设置为A4大小 pdfDocument.setDefaultPageSize(PageSize.A4); //添加水印 pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new WaterMarkEventHandler(waterMark)); //添加页码 //pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE,new PageEventHandler()); //添加中文字体支持 ConverterProperties properties = new ConverterProperties(); FontProvider fontProvider = new FontProvider(); PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false); fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H"); //添加自定义字体,例如微软雅黑 // if (StringUtils.isNotBlank(fontPath)){ // PdfFont microsoft = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, false); // fontProvider.addFont(microsoft.getFontProgram(), PdfEncodings.IDENTITY_H); // } properties.setFontProvider(fontProvider); HtmlConverter.convertToPdf(htmlStream, pdfDocument, properties); pdfWriter.close(); pdfDocument.close(); htmlStream.close(); } }