项目上的客户提出一个需求,把政务流程中的表单数据导出成pdf或者图片格式,用来作电子档案材料。表单基于公司的电子政务构建平台实现,在数据库 保存的都是html格式,因此打算直接把表单html转成pdf或者图片。由于表单是已经写好了html页面,那我要做的就是能完美解析html+css 的pdf生成工具。在百度上搜索html转pdf的结果,大部分都是用itext,itext的确是java开源组件的第一选择。不过itext也有局 限,就是要自己写模版,系统中的表单数量有好几百个,为每个表单做一个导出模版不现实。
最后,wkhtmltopdf进入了我的选择范围。wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具,可以跟多种脚本语言进行集成来转换文档。
github地址 https://github.com/wkhtmltopdf/wkhtmltopdf
wkhtmltopdf把html转成pdf很简单,只要在windows命令行中输入
c:\wkhtmltopdf.exe http://www.csdn.net c:\csdn.pdf
就可以把csdn网页转成pdf,并保存到C盘根目录。
在java中调用wkhtmltopdf的命令Runtime.getRuntime().exec("c:\wkhtmltopdf.exe http://www.csdn.net c:\csdn.pdf")就可以实现转换。
=========================================================
1、字符串的空判断
//isEmpty
System.out.println(StringUtils.isEmpty(null)); // true
System.out.println(StringUtils.isEmpty("")); // true
System.out.println(StringUtils.isEmpty(" ")); // false
System.out.println(StringUtils.isEmpty("bob")); // false
System.out.println(StringUtils.isEmpty(" bob ")); // false
//isBlank
System.out.println(StringUtils.isBlank(null)); // true
System.out.println(StringUtils.isBlank("")); // true
System.out.println(StringUtils.isBlank(" ")); // true
System.out.println(StringUtils.isBlank("bob")); // false
System.out.println(StringUtils.isBlank(" bob ")); // false
3、字符串的分割
//去除空字符串
String str3 = "aaa,,bbb";
String[] dim3 = StringUtils.split(str3, ","); // => ["aaa", "bbb"]
4、字符串的连接
//数组元素拼接
String[] array = {"aaa", "bbb", "ccc"};
String result1 = StringUtils.join(array, ",");
System.out.println(result1);//"aaa,bbb,ccc"
//集合元素拼接
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
String result2 = StringUtils.join(list, ",");
System.out.println(result2);//"aaa,bbb,ccc"
6、随机数
// 10位英字
System.out.println(RandomStringUtils.randomAlphabetic(10));
// 10位英数
System.out.println(RandomStringUtils.randomAlphanumeric(10));
// 10位ASCII码
System.out.println(RandomStringUtils.randomAscii(10));
// 指定文字10位
System.out.println(RandomStringUtils.random(10, "abcde"));
8、日期
// 生成Date对象
Date date = DateUtils.parseDate("2010/01/01 11:22:33", new String[]{"yyyy/MM/dd HH:mm:ss"});
// 10天后
Date tenDaysAfter = DateUtils.addDays(date, 10); // => 2010/01/11 11:22:33
System.out.println(DateFormatUtils.format(tenDaysAfter, "yyyy/MM/dd HH:mm:ss"));
// 前一个月
Date prevMonth = DateUtils.addMonths(date, -1); // => 2009/12/01 11:22:33
System.out.println(DateFormatUtils.format(prevMonth, "yyyy/MM/dd HH:mm:ss"));
// 判断是否是同一天
Date date1 = DateUtils.parseDate("2010/01/01 11:22:33", new String[]{"yyyy/MM/dd HH:mm:ss"});
Date date2 = DateUtils.parseDate("2010/01/01 22:33:44", new String[]{"yyyy/MM/dd HH:mm:ss"});
System.out.println(DateUtils.isSameDay(date1, date2));// true
// 日期格式化
System.out.println(DateFormatUtils.format(new Date(), "yyyy/MM/dd HH:mm:ss"));