|
@@ -2,23 +2,38 @@ package cn.ezhizao.common.utils;
|
|
|
|
|
|
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.io.font.PdfEncodings;
|
|
|
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 com.itextpdf.text.Document;
|
|
|
+import com.itextpdf.text.Font;
|
|
|
+import com.itextpdf.text.pdf.BaseFont;
|
|
|
import freemarker.template.Configuration;
|
|
|
import freemarker.template.Template;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
import java.io.*;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
public class PdfUtil {
|
|
|
@Autowired
|
|
|
private Configuration configuration;
|
|
|
+
|
|
|
+ @Value("${ruoyi.pdfFontPath.url}")
|
|
|
+ private static String fontPath;
|
|
|
+
|
|
|
/**
|
|
|
* 获取模板内容
|
|
|
+ *
|
|
|
* @param templateDirectory 模板文件夹
|
|
|
* @param templateName 模板文件名
|
|
|
* @param paramMap 模板参数
|
|
@@ -34,16 +49,18 @@ public class PdfUtil {
|
|
|
}
|
|
|
|
|
|
Writer out = new StringWriter();
|
|
|
- Template template = configuration.getTemplate(templateName,"UTF-8");
|
|
|
+ Template template = configuration.getTemplate(templateName, "UTF-8");
|
|
|
template.process(paramMap, out);
|
|
|
out.flush();
|
|
|
out.close();
|
|
|
return out.toString();
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* HTML 转 PDF
|
|
|
+ *
|
|
|
* @param content html内容
|
|
|
- * @param outPath 输出pdf路径
|
|
|
+ * @param outPath 输出pdf路径
|
|
|
* @return 是否创建成功
|
|
|
*/
|
|
|
public static boolean html2Pdf(String content, String outPath) {
|
|
@@ -51,17 +68,22 @@ public class PdfUtil {
|
|
|
ConverterProperties converterProperties = new ConverterProperties();
|
|
|
converterProperties.setCharset("UTF-8");
|
|
|
FontProvider fontProvider = new FontProvider();
|
|
|
- fontProvider.addSystemFonts();
|
|
|
+ fontProvider.addDirectory("/usr/share/fonts/chinese/");
|
|
|
+ fontProvider.addDirectory("D:\\code\\yzbh\\ezhizao_yzbh_production_api\\fonts\\chinese");
|
|
|
+// fontProvider.addSystemFonts();
|
|
|
converterProperties.setFontProvider(fontProvider);
|
|
|
HtmlConverter.convertToPdf(content, new FileOutputStream(outPath), converterProperties);
|
|
|
} catch (Exception e) {
|
|
|
- System.out.println("生成模板内容失败,{}"+e);
|
|
|
+ System.out.println("生成模板内容失败,{}" + e);
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* HTML 转 PDF
|
|
|
+ *
|
|
|
* @param content html内容
|
|
|
* @return PDF字节数组
|
|
|
*/
|
|
@@ -70,9 +92,12 @@ public class PdfUtil {
|
|
|
try {
|
|
|
ConverterProperties converterProperties = new ConverterProperties();
|
|
|
converterProperties.setCharset("UTF-8");
|
|
|
- FontProvider fontProvider = new FontProvider();
|
|
|
- fontProvider.addSystemFonts();
|
|
|
+ FontProvider fontProvider = new DefaultFontProvider(true, true, false);
|
|
|
+ PdfFont simsun = PdfFontFactory.createFont(FontProgramFactory.createFont("simsun.ttc", 1, false));
|
|
|
+ fontProvider.addFont(simsun.getFontProgram());
|
|
|
+// System.out.println(fontProvider.getFontSet().getFonts().stream().map(l -> l.getFontName()).collect(Collectors.joining(",")));
|
|
|
converterProperties.setFontProvider(fontProvider);
|
|
|
+
|
|
|
//设置pdf纸张
|
|
|
PdfWriter writer = new PdfWriter(outputStream);
|
|
|
PdfDocument pdf = new PdfDocument(writer);
|
|
@@ -80,9 +105,9 @@ public class PdfUtil {
|
|
|
//设置纸张的大小,并且设置默认的pdf大小
|
|
|
PageSize pageSize = PageSize.A3.rotate();
|
|
|
pdf.setDefaultPageSize(pageSize);
|
|
|
- HtmlConverter.convertToPdf(content,pdf,converterProperties);
|
|
|
+ HtmlConverter.convertToPdf(content, pdf, converterProperties);
|
|
|
} catch (Exception e) {
|
|
|
- System.out.print("生成 PDF 失败,{}"+e);
|
|
|
+ System.out.print("生成 PDF 失败,{}" + e);
|
|
|
}
|
|
|
return outputStream.toByteArray();
|
|
|
}
|