package net.poweroak.saas.crm.modules.collection.controller; import com.itextpdf.text.pdf.BaseFont; import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.xhtmlrenderer.pdf.ITextFontResolver; import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.File; import java.io.FileOutputStream; import java.io.StringWriter; import java.util.Locale; import java.util.Map; /** * 生成pdf文件工具类 * * @author message * @create */ @Slf4j public class PdfExportUtil { /** * 存放文件模板的地址 */ //字体文件名称 private final static String DEFAULT_FONT = "yahei.ttf"; //编码格式 private final static String ENCODING = "UTF-8"; //模板文件夹相对路径 public final static String TEMPLATE_PATH = "D:\\BaiduNetdiskDownload\\"; public static void generate(String templateContent, Map<String, Object> dataMap, File file) { FileOutputStream outputStream = null; ITextRenderer renderer = new ITextRenderer(); try { Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); StringTemplateLoader stringLoader = new StringTemplateLoader(); stringLoader.putTemplate("myTemplate", templateContent); cfg.setTemplateLoader(stringLoader); Template template = cfg.getTemplate("myTemplate", "utf-8"); String htmlData = FreeMarkerTemplateUtils.processTemplateIntoString(template, dataMap); outputStream = new FileOutputStream(file); ITextFontResolver fontResolver = renderer.getFontResolver(); // 解决中文乱码问题,fontPath为中文字体地址 fontResolver.addFont(TEMPLATE_PATH + DEFAULT_FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); renderer.setDocumentFromString(htmlData); renderer.layout(); renderer.createPDF(outputStream); } catch (Exception e) { log.error("生成失败", e); } finally { renderer.finishPDF(); IOUtils.closeQuietly(outputStream); } } }
public static void main(String[] args) throws IOException, DocumentException { Map<String, Object> paramsMap = new HashMap<>(128); paramsMap.put("invoice", "发票"); paramsMap.put("serialNumber", "123456"); paramsMap.put("orderNumber", "123456"); paramsMap.put("invoiceDate", "2024/07/12"); paramsMap.put("deliveryDate", "2024/07/12"); paramsMap.put("externalOrderNumber", "123456"); String fileName = "ceshi_" + System.currentTimeMillis() + ".pdf"; String htmlContent = ""; PdfExportUtil.generate(htmlContent , paramsMap, new File(PdfExportUtil.TEMPLATE_PATH + fileName)); System.out.println(new File(PdfExportUtil.TEMPLATE_PATH + fileName).length()); } }