Html转PDF文件-wkhtmltopdf

wkthtmltopdf只能解析静态资源,不会去运行js文件。
这里介绍一个判断当前页面能否被wkhtmltopdf正常导出的一个方法:
将当前页面在浏览器中另存为,保存到本地,如果本地文件打开后是有内容的,那么wkhtmltopdf就能正常导出。因为这个工具只会解析html与CSS,并不会去运行js文件。
如果页面中的内容时在页面开始渲染时才通过ajax请求从后台获取的,也是无法被渲染出来的,原因还是wkhtmltopdf不会去执行js文件,所以在渲染的时候ajax请求是不会发送的,更加不会被渲染到页面上。
 
 
官网地址: https://wkhtmltopdf.org/
根据自己的系统来选择对应的安装包,windows使用第一个安装包linux系统依据使用的Linux发行版本不同自行选择也可能不是CentOS
1. 下载wkhtmltopdf插件
 
2. 配置环境变量: Windows系统下载后依据安装路径配置Path
 
3.测试wkhtmltopdf
 
wkhtmltopdf   html地址或URI链接    PDF文件保存路径
示例:
打开cmd窗口:
 
http://172.16.125.14:8080/crmAdmin/jsp/modules/satisfaction/satisfactionAdd2.html
//是网页地址
C:\Users\CrazyClown\Desktop\1.pdf
//是生成路径以及生成的pdf名称
 
Windows端
public class Html2PDF {
    //wkhtmltopdf在系统中的路径
    private static final String toPdfTool =  "E:\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
    
    /**
     * html转pdf
     * @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
     * @param destPath pdf保存路径
     * @return 转换成功返回true
     */
    public static boolean convert(String srcPath, String  destPath){
        File file = new File(destPath);
        File parent = file.getParentFile();
        //如果pdf保存路径不存在,则创建路径
        if(!parent.exists()){
            parent.mkdirs();
        }
        
        StringBuilder cmd = new StringBuilder();
        cmd.append(toPdfTool);
        cmd.append(" ");
        cmd.append("  --header-line");//页眉下面的线
        cmd.append("  --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
        //cmd.append("  --margin-top 30mm ");//设置页面上边距  (default 10mm)
        cmd.append(" --header-spacing 10 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(srcPath);
        cmd.append(" ");
        cmd.append(destPath);
        
        boolean result = true;
        try{
            Process proc =  Runtime.getRuntime().exec(cmd.toString());
            HtmlToPdfInterceptor error = new  HtmlToPdfInterceptor(proc.getErrorStream());
            HtmlToPdfInterceptor output = new  HtmlToPdfInterceptor(proc.getInputStream());
            error.start();
            output.start();
            proc.waitFor();
        }catch(Exception e){
            result = false;
            e.printStackTrace();
        }
        
        return result;
    }
    public static void main(String[] args) {
         Html2PDF.convert("http://www.cnblogs.com/xionggeclub/p/6144241.html", "g:/wkhtmltopdf.pdf");
    }
}
-------------------------------------------------------------------------------------------------------

public class HtmlToPdfInterceptor extends Thread {
    private InputStream is;
    
    public HtmlToPdfInterceptor(InputStream is){
        this.is = is;
    }
    
    public void run(){
        try{
            InputStreamReader isr = new InputStreamReader(is,  "utf-8");
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(line.toString()); //输出内容
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

 

 

Linux端

public class Html2PDF {
     @Resource
     private KRContractMapper kRContractMapper;
    //wkhtmltopdf在系统中的路径
     //private static final String toPdfTool =  "E:\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
     private static final String toPdfTool =  "/usr/local/bin/wkhtmltopdf";
    
    /**
     * html转pdf
     * @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
     * @param destPath pdf保存路径
     * @return 转换成功返回true
     */
    public static boolean convert(String srcPath, String  destPath){
        File file = new File(destPath);
        File parent = file.getParentFile();
        //如果pdf保存路径不存在,则创建路径
        if(!parent.exists()){
            parent.mkdirs();
        }
        
        StringBuilder cmd = new StringBuilder();
        cmd.append(toPdfTool);
        cmd.append(" ");
        cmd.append("  --header-line");//页眉下面的线
        cmd.append("  --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
        //cmd.append("  --margin-top 30mm ");//设置页面上边距  (default 10mm)
        cmd.append("  --debug-javascript ");//显示javascript调试输出
        cmd.append("  --window-status completed ");//只有当你的js程序中显式的调用window.status = <…> 与指令中的值相同的时候wkhtmltopdf才会去渲染页面——————特别重要注意查看ajax回调成功后此指令的位置
        cmd.append(" --header-spacing 10 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(srcPath);
        cmd.append(" ");
        cmd.append(destPath);
        
        boolean result = false;
        try{
            Process proc =  Runtime.getRuntime().exec(cmd.toString());
            HtmlToPdfInterceptor error = new  HtmlToPdfInterceptor(proc.getErrorStream());
            HtmlToPdfInterceptor output = new  HtmlToPdfInterceptor(proc.getInputStream());
            error.start();
            output.start();
            proc.waitFor();
            result = true;
        }catch(Exception e){
            result = false;
            e.printStackTrace();
        }
        
        return result;
    }
    public static void main(String[] args) {
         Html2PDF.convert("http://localhost:8080/crmAdmin/jsp/modules/contract/modelContract.html",  "G:\\wkhtmltopdf\\1586849054861.pdf");
//         int num = 0;
//         String srcPath =  "http://172.16.125.14:8080/crmAdmin/jsp/modules/satisfaction/satisfactionAdd2.html";
//         num = ++num;
//         String destPath = "/var/www/html/crmAdmin/" + num +  ".pdf";
//        Html2PDF.convert(srcPath,destPath);
    }
}


-----------------------------------------------------------------------------------------------------------
public class HtmlToPdfInterceptor extends Thread {
    private InputStream is;
    
    public HtmlToPdfInterceptor(InputStream is){
        this.is = is;
    }
    
    public void run(){
        try{
            InputStreamReader isr = new InputStreamReader(is,  "utf-8");
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(line.toString()); //输出内容
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

 

HTML页面中最后一个function的Ajax回调中,
    
 //获取页面组合数据
     function getData() {
           var url = path + "/wechatMall/getData";
           $.ajax({
                type : "get",
                url : url,
                async : true,
                data : {
                     token : token,
                     contractId : contractId
                },
                success : function(data) {
                     debugger
                     if (data.code == "S") {
                           var obj = data.data;
                           if (!obj.dutyNumber &&  !obj.companyName && !obj.bankCardNumber) {
                                alert("发票信息不全,请在小程序端补全发票信息!");
                                return;
                           }
                           dwr.util.setValues(obj);
                           var zH = convertCurrency(obj.money);
                           $("#moneyZH").val(zH);
                           //document.getElementById("moneyZH").value = "汉字";
                           $("#count").val(obj.personCount);
                           var date = obj.visitTime;
                           if (date != "") {
                                var date3 = date.split("-");
                                $("#year").val(date3[0]);
                                $("#month").val(date3[2]);
                                $("#day").val(date3[3]);
                           }
                     } else {
                           alert("初始化数据失败! "+data.info)
                     }
                     window.status = "completed";
                }
           });
     }
 
 
遇到的坑
 
1. 有登陆权限验证的页面需要打印为pdf 。如果你要打印的页面是基于权限认证的,那你打印出来,必然是跳转到认证页面的pdf。
 
wkhtmltopdf 支持账号密码和验证码登陆,同时也支持采用cookie 的方式进行登陆。大部分时候采用cookies 登陆即可。
 
具体实现如下:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "wkhtmltopdf.exe";
string cookieArgs = "";
var cookies = HttpContext.Current.Request.Cookies;


if (cookies != null)
{
    var sb = new System.Text.StringBuilder();
    // you probably only need the ".ASPXFORMSAUTH"
    // and "ASP.NET_SessionId" cookies
    // but I pass everything just in case
    foreach (string key in cookies.AllKeys)
    {
        string value = cookies[key].Value;
        sb.AppendFormat("--cookie {0} {1} ", key, value);                   
    }
    cookieArgs = sb.ToString();
}
psi.Arguments = urlToPrint + " -q " + cookieArgs + " -";
Process.Start(psi);

 

 
 
2. 打印的内容不全。(页面通过Ajax加载的数据未打印出来)
 
wkhtmltopdf 里有一个参数是--window-status ,这个参数可以支持ajax异步请求 的。
 
做法是: 
       在调用wkhtmltopdf 时,传入参数 ,比如 传入 “   --window-status  completed”   
      然后在ajax 完成回调时 ,也将document 的window.status = "completed",
这样的话,就会完全支持异步调用。
 
有两点需要注意:
1.每个参数之间必须有空格,不然一定会出现你想到的问题。
2.window.status 的值必须与传入的参数值一样,否则的话,就会一直处于等待状态。
 
 
 
HTML页面
<!DOCTYPE html>
<html>
<head>
<title>研修班协议书</title>
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="no-cache, no-store,  must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,  initial-scale=1, maximum-scale=1, user-scalable=no">
<link type="text/css" rel="stylesheet"  href="/crmAdmin/css/common/common.css">
<link type="text/css" rel="stylesheet"  href="/crmAdmin/css/common/crmModel.css">
<script type="text/javascript"  src="/crmAdmin/js/jquery/jquery-2.2.3.min.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/common/common.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/common/util.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/json/json2.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/plugins/layer/layer.js"></script>
<link type="text/css" rel="stylesheet"  href="/crmAdmin/js/bootstrap/css/bootstrap.css">
<script type="text/javascript"  src="/crmAdmin/js/bootstrap/js/bootstrap.js"></script>
<link type="text/css" rel="stylesheet"  href="/crmAdmin/js/plugins/bootstrap-table/css/bootstrap-table.css">
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-table/js/bootstrap-table.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-table/local/bootstrap-table-zh-CN.js"></script>
<link type="text/css" rel="stylesheet"  href="/crmAdmin/js/plugins/bootstrap-validator/css/bootstrapValidator.css">
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-validator/js/bootstrapValidator.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-validator/js/language/zh_CN.js"></script>
<link type="text/css" rel="stylesheet"  href="/crmAdmin/js/plugins/bootstrap-datetime/css/bootstrap-datetimepicker.min.css">
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-datetime/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-datetime/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/plugins/jquery-chosen/chosen.jquery.js"></script>
<link type="text/css" rel="stylesheet"  href="/crmAdmin/js/plugins/jquery-chosen/chosen.css">
<!-- <link type="text/css" rel="stylesheet"  href="/crmAdmin/js/plugins/jquery-chosen/myChosen.css"> -->
<script type="text/javascript"  src="/crmAdmin/js/plugins/bootstrap-box/js/bootbox.min.js"></script>
<script type="text/javascript"  src="/crmAdmin/js/json/model/Agreement.js"></script>
<style type="text/css">
    input {
         border:none;        /* 去除边框,页面显示没有问题但是点击输入时会有默认边框出现 */
         outline:none;        /* 在去除边框前提下,清除默认的border样式 */
         border-radius:0;           /* 边框圆角 */
         /*border-bottom:#8D8D8D 1px solid;      边框底部加实线  */
         border-shadow:0px 0px 0px 0px;     /* 去除阴影 */
     }
     .indent {
    text-indent:2em             /* 缩进两个字 */
     }
     .indent1 {
    text-indent:1em            /* 缩进一个字 */
     }
     .indent2 {
    text-indent:3em            /* 缩进一个字 */
     }
    .ll {
      width: 10%
    }
    .input{
      text-align:center;
     }
</style>
<body class="my-body-content">
     <div>
           <h3 style="margin-left: 40%"><b>协议书</b></h3>
           
           <p style="padding-left: 65%;"><span>协议编号:</span><input id="numbers" name="" type="text"style="" /></p>
           <p><b>甲方:某某某创智互联网工业科技有限公司</b></p>
           <p><span><b>乙方:</b></span><input id="" name=""  type="text"style="width: 50%" /></p>
           <p class="indent">某某某公司对智造工厂进行了全面升级改造,全新的定制流水线、
           全新的场内物流系统、全新的立体仓库、真正落地的细胞单元自治体系;

           并将最核心的定制流程和治理体系进行了梳理,打造了全新的定制逻辑空间,
           以物理空间的形式展现定制背后的逻辑和治理体系,让企业可以借鉴转型的经验,学习治理体系的方法。</p>
           
           <p class="indent">甲、乙双方经友好协商,甲方受乙方委托,为乙方提供专场有偿培训服务,
           培训方式为在甲方现场进行授课交流。协议内容如下:</p>
     <div style="margin-left: 3%">   
           <p><span><b>一、现场授课要求:</b></span></p>
           
                <p class="indent1"><span>1、日期与人数:</span><input id="year" name="year" class="input"  type="text"style="width: 5%;border-bottom:#8D8D8D 1px solid;"  /><span> 年</span>
                     <input id="month" name="month"  class="input" type="text"style="width: 3%;border-bottom:#8D8D8D  1px solid;" /><span>月</span>
                     <input id="day" name="day" class="input"  type="text"style="width: 3%;border-bottom:#8D8D8D 1px solid;"  /><span>日</span>,
                     <span>学员人数</span><input  id="personCount" class="input" name="personCount"  type="text"style="width: 3%;border-bottom:#8D8D8D 1px solid;"  /><span>人 </span>
                </p>
                
                <p class="indent1">2、授课课程:</p>
                     <p class="indent2">某某公司模式分享</p>
                     <p class="indent2">全程数据驱动的智造工厂</p>
                     <p class="indent2">数据逻辑空间</p>
                     <p class="indent2">某某公司企业治理体系</p>
                     <p class="indent2">新动能治理工程落地案例分享</p>
                     <p class="indent2">沙盘演练</p>
                     <p class="indent2">某某公司个性化定制体验</p>
                     <p class="indent2">交流答疑</p>
                <p class="indent1">3、甲方对接人:<input  id="personLiable" name="personLiable" type="text"style="" />
                        联系方式: <input id="personLiableTel"  name="personLiableTel" type="text"style="" /></p>
                <p style="text-indent:2.5em;">乙方对接人:<input  id="linkman" name="linkman" type="text"style="" />
                     联系方式:<input id="linkPhone"  name="linkPhone" type="text"style="" />
                </p>
                
           <p><span><b>二、双方责任与义务:</b></span></p>
                <p class="indent1">(一)甲方责任: </p>
                     <p class="indent2">按照协议商定的教学要求、师资配备、培训方式,认真组织,保证教学质量。</p>
                <p class="indent1">(二)乙方责任:</p>
                     <p class="indent2">1、负责选派参加学习的人员,协助甲方做好课前调研,遵守甲方公司教学参观制度。</p>
                     <p class="indent2">2、为保护甲方知识产权,不得带手机等录音、录像设备进入车间,禁止录音、录像;随身物品寄存甲方指定存放处。</p>
                     <p class="indent2">3、协助甲方维护参观秩序,排好队形,禁止参观人员进入非参观通道以外区域,禁止脱离参观团队,随意走动;如劝阻不听,协助甲方带离现场。</p>
                     <p class="indent2">4、负责乙方团队人员所有参观过程的安排和问题衔接、处理。 </p>
                     <p class="indent2">5、甲方只负责提供参观讲解和参观场所,乙方全权负责团队人员的安全保障、保险办理等管理和服务。</p>
           
           <p><span><b>三、费用与支付方法:</b></span></p>
                <p class="indent1"><span>1、本次现场教学费用:</span><input id="count" name="count" type="text" class="input"  style="width: 3%;border-bottom:#8D8D8D 1px solid;" /><span>人 ;每人</span>
                   <input id="price" name="price" class="input"  type="text"style="width: 5%;border-bottom:#8D8D8D 1px solid;"  /><span>元,合计:</span>
                   <input id="money" name="money" class="input"  type="text"style="width: 5%;border-bottom:#8D8D8D 1px solid;"  /><span>元人民币(大写:</span>
                    <input id="moneyZH" name="moneyZH"  class="input" type="text"style="width: 5%;" /><span>元整   )。</span></p>
                <div class="indent1">
                     <span>2、支付方式:</span>
                 <span class="radio-inline">
                           <input type="radio" name="massing"  value="1">现金
                     </span>
                     <span class="radio-inline">
                           <input type="radio" name="massing"  value="2">支票
                     </span>
                     <span class="radio-inline">
                           <input type="radio" name="massing"  value="3" checked>转账
                     </span>
                </div>
                     <p style="text-indent:2.5em;">甲方户名:某某公司</p>
                     <p style="text-indent:2.5em;">甲方帐号:3803028309200227893</p>
                     <p style="text-indent:2.5em;">开 户 行:中国某某市支行</p>
           
           <p class="indent1">3、支付时间:授课前一周转入甲方公司账户。</p>
           <p class="indent1">4、开具发票信息:</p>
                <p style="text-indent:2.5em;"><span>乙方户名:</span><input id="companyName" name="companyName"  type="text"style="" /></p>
                <p style="text-indent:2.5em;"><span>乙方税号:</span><input id="dutyNumber" name="dutyNumber"  type="text"style="" /></p>
                <p style="text-indent:2.5em;"><span>开户行:</span><input id="bankDepositText" name="bankDepositText"  type="text"style="" /></p>
                <p style="text-indent:2.5em;"><span>账号:</span><input id="bankCardNumber" name="bankCardNumber"  type="text"style="" /></p>
                <p style="text-indent:2.5em;"><span>地址:</span><input id="address" name="address" type="text"style="" /></p>
                <p style="text-indent:2.5em;"><span>电话:</span><input id="phoneNo" name="phoneNo" type="text"style="" /></p>
           
           <p><span><b>四、 违约责任:</b></span></p>
                <p class="indent1">1、甲方应按协议规定和授课方案认真组织实施授课,保证授课内容与实际相符,否则须向乙方支付总费用的10%作为违约金。</p>
                <p class="indent1">2、乙方应按协议约定时间组织学员学习并及时支付相关费用,否则须向甲方支付总费用10%的违约金。</p>
                
           <p><span><b>五、协议双方应本着诚实守信的原则,积极履行本协议条款。未尽事宜,双方另行友好商议处理。如有争议应协商解决,协商不成,任一方应向甲方所在地的人民法院提起诉讼。</b></span></p>
           
           <p><span><b>六、本协议一式二份,双方各执一份,具有同等法律效力,经双方负责人签字,并盖章后生效,传真、扫描件有效。</b></span></p>
           
           
           <p style="margin-top: 10%;margin-bottom: 10%">
                <span style="margin-left: 5%">甲方(盖章):青岛某某互联网工业科技有限公司</span>
                <span style="margin-left: 35%">乙方(盖章):</span><input id="companyName" name="companyName"  type="text"style="" />
           </p>
           
           <p>
                <span style="margin-left: 5%">负责人或授权人签字:</span><input id="" name="" type="text"style="" />
                <span style="margin-left: 35%">负责人或授权人签字:</span><input id="" name="" type="text"style="" />
           </p>
           
           <p style="margin-top: 10%;margin-bottom: 10%">
                <span style="margin-left: 2%"><input  id=""  name="" type="text" style="width: 50px" />年<input id="" name=""  type="text" style="width: 50px" />月<input id="" name=""  type="text" style="width: 50px" />日</span>
                <span style="margin-left: 45%"><input id=""  name="" type="text" style="width: 50px" />年<input id="" name=""  type="text" style="width: 50px" />月<input id="" name=""  type="text" style="width: 50px" />日</span>
           </p>
           
     <div>
     <div>
</body>
</html>
<script type="text/javascript">
     var userid = "";//user_id
     var contractId = "";
     var token = "";
     var path = "https://crm.kutesmart.com/crm";
     //var path = "http://172.16.126.195:9998/crm";
     $(document).ready(function() {
           getParam();
           getNumbers();
           getData();
     });
     function getParam() {
           debugger
           var url = location.search; //获取url中"?"符后的字串
           if (url.indexOf("?") != -1) {
                var str = url.substr(1);
                strs = str.split("&");
                for(j = 0,len=strs.length; j < len; j++) {
                     if (strs[j].indexOf("token") != -1) {
                           token =  decodeURIComponent(strs[j].replace("token=",""));
                    }
                     if (strs[j].indexOf("userid") != -1) {
                           userid =  decodeURIComponent(strs[j].replace("userid=",""));
                    }
                     if (strs[j].indexOf("contractId") != -1) {
                           contractId =  decodeURIComponent(strs[j].replace("contractId=",""));
                    }
                }
           }
     }
     //获取协议编号——KRG开头+小组细胞核姓氏开头字母+年月日+序列号
     function getNumbers() {
           var url = path + "/wechatMall/getNumbers";
           $.ajax({
                type : "get",
                url : url,
                async : true,
                data : {
                     token : token,
                     //userId : "100392"
                     userId : userid
                },
                success : function(data) {
                     if (data.code == "S") {
                           $("#numbers").val(data.data);
                     } else {
                           alert("协议号获取失败! "+data.info)
                     }
                }
           });
     }
     //获取页面组合数据
     function getData() {
           var url = path + "/wechatMall/getData";
           $.ajax({
                type : "get",
                url : url,
                async : true,
                data : {
                     token : token,
                     contractId : contractId
                },
                success : function(data) {
                     debugger
                     if (data.code == "S") {
                           var obj = data.data;
                           if (!obj.dutyNumber &&  !obj.companyName && !obj.bankCardNumber) {
                                alert("发票信息不全,请在小程序端补全发票信息!");
                                return;
                           }
                           dwr.util.setValues(obj);
                           var zH = convertCurrency(obj.money);
                           $("#moneyZH").val(zH);
                           //document.getElementById("moneyZH").value = "汉字";
                           $("#count").val(obj.personCount);
                           var date = obj.visitTime;
                           if (date != "") {
                                var date3 = date.split("-");
                                $("#year").val(date3[0]);
                                $("#month").val(date3[2]);
                                $("#day").val(date3[3]);
                           }
                     } else {
                           alert("初始化数据失败! "+data.info)
                     }
                     window.status = "completed";
                }
           });
     }
     //金额小写转大写
     function convertCurrency(money) {
     //汉字的数字
     var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍',  '陆', '柒', '捌', '玖');
     //基本单位
     var cnIntRadice = new Array('', '拾', '佰', '仟');
     //对应整数部分扩展单位
     var cnIntUnits = new Array('', '万', '亿', '兆');
     //对应小数部分单位
     var cnDecUnits = new Array('角', '分', '毫', '厘');
     //整数金额时后面跟的字符
     var cnInteger = '整';
     //整型完以后的单位
     var cnIntLast = '元';
     //最大处理的数字
     var maxNum = 999999999999999.9999;
     //金额整数部分
     var integerNum;
     //金额小数部分
     var decimalNum;
     //输出的中文金额字符串
     var chineseStr = '';
     //分离金额后用的数组,预定义
     var parts;
     if(money == ''){
     return '';
     }
     money = parseFloat(money);
     if(money >= maxNum){
     //超出最大处理数字
     return '';
     }
     if(money == 0) {
     chineseStr = cnNums[0] + cnIntLast + cnInteger;
     return chineseStr;
     }
     //转换为字符串
     money = money.toString();
     if(money.indexOf('.') == -1){
     integerNum = money;
     decimalNum = '';
     } else {
     parts = money.split('.');
     integerNum = parts[0];
     decimalNum = parts[1].substr(0, 4);
     }
     //获取整型部分转换
     if(parseInt(integerNum, 10) > 0){
     var zeroCount = 0;
     var IntLen = integerNum.length;
     for(var i = 0; i < IntLen; i++){
     var n = integerNum.substr(i, 1);
     var p = IntLen - i - 1;
     var q = p / 4;
     var m = p % 4;
     if(n == '0'){
     zeroCount++;
     }else{
     if(zeroCount > 0) {
     chineseStr += cnNums[0];
     }
     //归零
     zeroCount = 0;
     chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
     }
     if(m == 0 && zeroCount < 4){
     chineseStr += cnIntUnits[q];
     }
     }
     chineseStr += cnIntLast;
     }
     //小数部分
     if(decimalNum != ''){
     var decLen = decimalNum.length;
     for(var i = 0; i < decLen; i++){
     var n = decimalNum.substr(i, 1);
     if(n != '0'){
     chineseStr += cnNums[Number(n)] + cnDecUnits[i];
     }
     }
     }
     if(chineseStr == ''){
     chineseStr += cnNums[0] + cnIntLast + cnInteger;
     }else if(decimalNum == '') {
     chineseStr += cnInteger;
     }
     return chineseStr;
     }
     //新增
     function doAddSurvey() {
           var obj = new Satisfaction();
           dwr.util.getValues(obj);
           if (obj.username =="") {
                msg("单位不允许为空!");
                return false;
           } else if (obj.contactsName =="") {
                msg("联系人不允许为空!");
                return false;
           } else if (obj.telephone =="") {
                msg("联系电话不允许为空!");
                return false;
           } else if (obj.massing =="") {
                msg("量体服务不允许为空!");
                return false;
           } else if (obj.quality =="") {
                msg("产品质量不允许为空!");
                return false;
           } else if (obj.suitable =="") {
                msg("产品合体不允许为空!");
                return false;
           }else if (obj.customerService =="") {
                msg("售后服务不允许为空!");
                return false;
           }else{
                var result;
                //obj.createPeople = userid;
                //obj.updatePeople = userid;
                var url = path +  "/satisfaction/addSatisfaction";
                $.ajax({
                     type : "POST",
                     url : url,
                     contentType : 'application/json',
                     data : JSON.stringify(obj),
                     async : true,
                     dataType: 'json',
                     success : function(data) {
                           if (data.code == "S") {
                                debugger
                                msg("保存成功")
                                result = true;
                                emptyData();
                                window.location.href="about:blank";
                                window.close();
                           } else {
                                result = false;
                                Emsg(data.data.ErrorMessage)
                           }
                     }
                });
                return result;
           }
     }
     function openLovUser(){
           var url =  "/crmAdmin/jsp/common/lov/lovCrmCustomer.html";
           var lov_user_frame = '<iframe id="lov_user_frame"  class="my-modal-iframe" width="100%" height="405px" src="' + url  + '"></iframe>';
           window.top.bootbox.dialog({
                title : "客户",
                message : lov_user_frame,
                buttons : {
                     saveType : {
                           label : "确定",
                           className : "btn-default",
                           callback : function() {
                                var row =  window.top.document.getElementById("lov_user_frame").contentWindow.getSelectedData();
                                var flag = true;
                                if (row) {
                                     $("#username").val(row.username);
                                     $("#telephone").val(row.telephone);
                                } else {
                                     window.top.bootbox.dialog({
                                           size : 'small',
                                           message : "请先选择用户!",
                                           buttons : {
                                                saveType : {
                                                     label :  "确定",
                                                     className  : "btn-default",
                                                     callback :  function() {
                                                           return true;
                                                     }
                                                }
                                           }
                                     });
                                     flag = false;
                                }
                                return flag;
                           }
                     },
                     cancelType : {
                           label : "取消",
                           className : "btn-default",
                           callback : function() {
                                return true;
                           }
                     }
                }
           });
     }
     //重置
     function emptyData(){
           //点击重置按钮将所有的input框清空
           $("input").val("");
           $("select").val("");
     }
</script>

 

 
 
 
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维C°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值