最近有个功能需要下载凭证,想偷懒,所以找到一个html2image的jar包,把html传到后台生成图片给用户下载。
问题来了, html2image 利用JEditorPane来渲染html,然后它不支持table关于边框的设置,想了个办法hack下,搞定了,具体办法是设置table的背景为黑色,设置td,th的背景为白色,设置table的cellpadding="1" cellspacing="1",这样就能露出table的黑色背景,就是边框啦,
还有一个问题,table的宽度一直控制不好,页面显示的正常,生成出来的图片宽度就不对,没办法,就将原来的jar包找到,改了代码,新添了传入css样式的方法,解决了这个问题。
http://download.csdn.net/detail/mchange/7615831
public static void main(String[] args) {
String[] css = new String[]{
"body {width:698px; overflow:hidden}"
};
HtmlImageGenerator imageGenerator = new HtmlImageGenerator(css);
Dimension d = new Dimension(500,500);
imageGenerator.setSize(d);
String htmlstr = "<div class=\"Voucher-title\" style=\"height:60px;padding-top:20px\"> <img src=\"http://127.0.0.1//abroad/images/common/a2_03.gif\"> </div> <div class=\"Voucher-detail\" style=\"padding-top:5px\"> " +
"<table cellpadding=\"1\" cellspacing=\"1\" style=\"background-color: #c7c7c7; width:100%;\"> <tbody><tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" rowspan=\"1\" align=\"center\" valign=\"middle\">订单号:</td> <td style=\"line-height:25px; padding-left:5px; background-color: white;\" colspan=\"2\"> 14070909400808201990 </td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" rowspan=\"1\" align=\"center\" valign=\"middle\">订单状态</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\" colspan=\"2\"> 处理成功 </td> </tr> <tr> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:118;\" rowspan=\"5\" align=\"center\" valign=\"middle\">付款人信息</td> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:118;\">汇款人姓名</td> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:400\">奥巴马0009(GF)</td> </tr> <tr> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:118;\">支付账号</td> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:400\">121212121212</td> </tr> <tr> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:118;\">汇款币种金额</td> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:400\">USD 12.0</td> </tr> <tr> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:118;\">支付银行及卡号</td> <td style=\" line-height:25px; padding-left:5px; background-color: white;width:400\">中国银行;121212121212</td> </tr> <tr> <td style=\"line-height:25px; padding-left:5px; background-color: white;width:118px;\">汇款人地址</td> <td style=\" line-height:25px; background-color: white;width:400\">如果彼得德鲁克说管理是种实践是对的,那管理的灵魂就必然是一种独立思考的精神,因为唯有独立思考才能完成打穿理论与现实,完成特殊到一般,一般再到特殊这样的轮回。</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" rowspan=\"9\" align=\"center\" valign=\"middle\">收款人信息</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">收款人名称</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">布兰2</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">开户银行名称</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">守夜人银行</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">开户银行SWIFT编号</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">122334</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">开户银行ABA编号</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\"></td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">开户银行IBAN编号</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\"></td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">收款人帐号</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">622512349876</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">收款人地址</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">临冬城</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">收款人代理银行信息</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\"> 代理行名称地址:WebResizer:在线图片压缩工具提供了一种更便捷的在线压缩服务,图片大小减少了不少。但是图片效果依然是那么好,另外还可以在图片上添加边...; 代理行开户号:33; 代理行SWIFT Code:11 </td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">常驻国家名称及代码</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">美国/110</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" rowspan=\"5\" align=\"center\" valign=\"middle\">服务明细</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">购汇金额</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">USD: 12.0</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">购汇汇率</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">5.988</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">等值人民币</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">71.86</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">手续费</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">人民币0.72</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\">电报费</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;\">人民币150.0</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" align=\"center\" valign=\"middle\">交易附言</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;;\" colspan=\"2\">管理就是这样的一种东西,每个人都可以说上几句,但你很难识别这是对的还是错的,很难识别它究竟对公司的成功是一种正向的助推力还是一种逆向的杀伤力</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" align=\"center\" valign=\"middle\">汇款附言</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;;\" colspan=\"2\">管理就是这样的一种东西,每个人都可以说上几句,但你很难识别这是对的还</td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" align=\"center\" valign=\"middle\">手续费扣款方式</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;;\" colspan=\"2\" \"=\"\"> 付款方支付手续费 </td> </tr> <tr> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;width:118px;\" align=\"center\" valign=\"middle\">合计</td> <td style=\" word-break:break-all; word-wrap:break-word; line-height:25px; padding-left:5px; background-color: white;;\" colspan=\"2\">人民币 222.58 </td> </tr> </tbody></table> </div>";
imageGenerator.loadHtml(htmlstr);
imageGenerator.getBufferedImage();
imageGenerator.saveAsImage("d:/hello2.png");
System.out.println("ok");
}