最近有個功能需要下載憑證,想偷懶,所以找到一個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");
}