wkHtmlToPdf 的简单使用我在这里就不说了,今天主要说一下 设置 自定义字体问题,我经过多次的测试,终于成功应用,这种设计方案,目前在百度上你几乎搜不到第二篇文章介绍!。
1、上代码
import java.io.File;
import java.io.IOException;
public class WkHtmlToPdf {
private static final String toPdfTool = "D:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
private static final String toPdfCssFangSong = "E:\\template\\toPdfCssStyle\\style_fangsong.css";
/** 主体方法生成 pdf */
public static void testConvert( String srcPath, String destPath){
logger.info("css样式在服务器上存的路径[{}]",toPdfCssFangSong);
String pageSize = "A4";
File file = new File(destPath);
File parent = file.getParentFile();
if (!parent.exists()){
parent.mkdirs();
}
StringBuilder cmd = new StringBuilder();
cmd.append(toPdfTool).append(" ");//wkhtmltopdf 的安装地址
cmd.append("--page-size ");
cmd.append(pageSize).append(" ");
cmd.append("--margin-top ");
cmd.append("24mm").append(" ");
cmd.append("--margin-bottom ");
cmd.append("15mm").append(" ");
cmd.append("--user-style-sheet ");
cmd.append(toPdfCssFangSong).append(" ");//为生成的 pdf 文档设置自定义样式,非常重要!!!
cmd.append("--disable-smart-shrinking ");//这个参数一定要加上,加上页面就不缩小了,会正常比例显示
cmd.append(srcPath).append(" ");
cmd.append(destPath);
try {
Runtime.getRuntime().exec(cmd.toString());
}catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
//设置纸张大小: A4, Letter, etc.
String pageSize = "A4";
//需要生成PDF的URL,这样也可以是页面的本地地址
String srcPath = "E:\\buildWord\\2020\\2020-04-28\\C1101072020100816\\协议书.html";
String destPath = "E:\\buildWord\\2020\\2020-04-28\\C1101072020100816\\协议书.pdf";
testConvert(srcPath, destPath);
} catch (Exception e) {
e.printStackTrace();
}
}
2、style_fangsong.css 是自定义的样式文件,根据根据所需要的字体或者其他样式,自定义设置,格式样式如下:
@font-face{font-family: "仿宋";src:url("C:\\Windows\\Fonts\\simfang.ttf")}
* {
font-family: 仿宋 !important;
font-weight:normal !important;
}
这种设置,主要针对对 pdf字体或其他样式要求比较严格的使用场景,小伙伴可以试试,如果有不懂的地方 可以留言!!!
}