1.HTML占位符替换工具类
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import lombok.extern.slf4j.Slf4j;
import java.io.StringWriter;
import java.util.Map;
@Slf4j
public class FreemarkerUtils {
public static String getTemplate(String templatePath, Map<String,Object> map) {
try {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setClassForTemplateLoading(FreemarkerUtils.class, "/templates");
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
cfg.setLogTemplateExceptions(true);
Template temp = cfg.getTemplate(templatePath);
StringWriter stringWriter = new StringWriter();
temp.process(map, stringWriter);
return stringWriter.toString();
}catch (Exception e) {
log.error("getTemplateFail", e);
}
return "";
}
}
2.HTML模板输出PDF
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* HTML转PDF工具类
*/
public enum Html2PdfUtils {
INSTANCE;
static DefaultFontProvider fontProvider;
public final static Logger logger = LoggerFactory.getLogger(Html2PdfUtils.class.getName());
/**
* html模板转成pdf流
*
* @param html
* @return
*/
public ByteArrayOutputStream htmlTemplateToPdf(String html) {
ConverterProperties properties = new ConverterProperties();
if (fontProvider == null) {
fontProvider = new DefaultFontProvider(false, false, false);
// 宋体
fontProvider.addFont("font/simsun.ttf");
}
logger.info("all fonts list {}", fontProvider.getFontSet().getFonts());
properties.setFontProvider(fontProvider);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(bao);
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
pdfDocument.setDefaultPageSize(PageSize.A4);
try {
HtmlConverter.convertToPdf(new ByteArrayInputStream(html.getBytes("UTF-8")), pdfDocument, properties);
} catch (IOException e) {
logger.error("convert html template to pdf document stream error: ", e);
} finally {
try {
pdfDocument.close();
pdfWriter.close();
bao.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return bao;
}
}