签章

/// <summary>
        /// 盖章
        /// </summary>
        /// <param name="contract"></param>
        /// <param name="buyer"></param>
        /// <param name="seller"></param>
        /// <returns></returns>
        private ReturnJsonCode Sign(tbl_contract contract, string buyer, string seller)
        {
            ReturnJsonCode jsonCode = new ReturnJsonCode();
            string path = "/files/word/" + contract.ID / 1000 + "/" + contract._id + contract.extension;
            string localPath = System.Web.HttpContext.Current.Server.MapPath(path);
            using (FileStream fs = File.Open(localPath, FileMode.Open))
            {
                jsonCode = SaveFileKyb(fs, contract, seller, buyer);
            }
            return jsonCode;
        }

/// <summary>
        /// 保存文件到
        /// </summary>
        /// <returns>pdf文件的base64字符串</returns>
        public ReturnJsonCode SaveFileKyb(Stream InputStream, tbl_contract newContract, string seller, string buyer)
        {
            ReturnJsonCode jsonCode = new ReturnJsonCode();
            try
            {
                string url = "http://" + ConfigurationManager.AppSettings[""] + "/api/contract/Default.aspx";

                byte[] data = new byte[InputStream.Length];
                InputStream.Position = 0;//重新定位
                InputStream.Read(data, 0, data.Length);
                string base64Str = Convert.ToBase64String(data);
                Dictionary<string, object> dicParam = new Dictionary<string, object>();
                dicParam.Add("Action", "CreatePdf");
                dicParam.Add("SiteId", yunId);
                dicParam.Add("ContractId", newContract.ID);
                dicParam.Add("Data", System.Web.HttpContext.Current.Server.UrlEncode(base64Str));
                dicParam.Add("BuyerKyh", buyer);
                dicParam.Add("SellerKyh", seller);
                //订单不为空,添加订单信息
                if (newContract.orders != null && newContract.orders.Count > 0)
                {
                    dicParam.Add("Orders", System.Web.HttpContext.Current.Server.UrlEncode(newContract.orders.ObjectToString()));
                }
                //添加权限参数
                common.CreateApiAccount(dicParam);
                string strResult = HttpMethod.WebRequestPost(url, dicParam);
                if (string.IsNullOrWhiteSpace(strResult))
                {
                    jsonCode.code = -1;
                    jsonCode.msg = "请求结果为空";
                }
                else
                {
                    jsonCode = Serialize.DeSerialize<ReturnJsonCode>(strResult);
                }
            }
            catch (Exception ex)
            {
                jsonCode.code = -1;
                jsonCode.msg = "保存pdf到科易宝出错:" + ex.Message;
            }
            if (jsonCode.code == 1)
            {
                ReturnJsonCode jc = SavePdfToLocal(jsonCode.data, newContract);
                if (jc.code == -1)
                {
                    return jc;
                }
            }
            return jsonCode;
        }


/// <summary>
        /// 保存pdf到本地
        /// </summary>
        /// <param name="base64Str"></param>
        /// <param name="contract"></param>
        public ReturnJsonCode SavePdfToLocal(string base64Str, tbl_contract contract)
        {
            ReturnJsonCode jsonCode = new ReturnJsonCode();
            string path = System.Web.HttpContext.Current.Server.MapPath("/files/contract/" + (contract.ID / 1000) + "/" + contract._id.ToString() + ".pdf");
            if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("/files")))
            {
                Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("/files"));
            }
            if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("/files/contract")))
            {
                Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("/files/contract"));
            }
            if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("/files/contract/" + (contract.ID / 1000))))
            {
                Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("/files/contract/" + (contract.ID / 1000)));
            }
            if (File.Exists(path))
            {
                File.Delete(path);
            }
            FileStream fs = null;
            try
            {
                byte[] d = Convert.FromBase64String(base64Str);
                fs = File.Create(path);
                fs.Write(d, 0, d.Length);
                jsonCode.code = 1;
                jsonCode.msg = "保存成功";
            }
            catch (Exception ex)
            {
                jsonCode.code = -1;
                jsonCode.msg = "保存pdf到本地出错:" + ex.Message;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Dispose();
                }
            }
            return jsonCode;
        }

  

 

 

/// <summary>
    /// 根据Word文件Base64字符串创建PDF
    /// </summary>
    /// <param name="p_jsonCode"></param>
    private void CreatePdf(ReturnJsonCode p_jsonCode)
    {
        int iCid = 0;
        int.TryParse(Base.GetPost("ContractId"), out iCid);//合同ID
        int iSiteId = 0;
        int.TryParse(Base.GetPost("SiteId"), out iSiteId);//平台ID
        string strWordData = Base.GetPost("Data");//word文件Base64字符串
        string strBuyerKyh = Base.GetPost("BuyerKyh");//买方号
        string strSellerKyh = Base.GetPost("SellerKyh");//卖方号
        string strOrderData = Base.GetPost("Orders");//订单信息
        if (iCid <= 0)
        {
            p_jsonCode.msg = "cid参数错误";
            return;
        }
        int iBuyerUid = 0;//买方科易宝用户ID
        int iSellerUid = 0;//卖方科易宝用户ID
        if (!string.IsNullOrWhiteSpace(strBuyerKyh))
        {
            iBuyerUid = Base.GetUidByK8008username(strBuyerKyh);
        }
        if (!string.IsNullOrWhiteSpace(strSellerKyh))
        {
            iSellerUid = Base.GetUidByK8008username(strSellerKyh);
        }
        List<fjcctt_order> listOrders = null;
        if (!string.IsNullOrWhiteSpace(strOrderData))
        {
            listOrders = JsonConvert.DeserializeObject<List<fjcctt_order>>(strOrderData);
        }
        Base.WriteLog("订单参数为:" + strOrderData);
        fjcctt.contract objContract = new fjcctt.contract();
        objContract.ContId = iCid;
        objContract.SiteId = iSiteId;
        objContract.BuyerId = iBuyerUid;
        objContract.SellerId = iSellerUid;
        objContract.Orders = listOrders;
        objContract.CreatePdf(strWordData);
        if (objContract.Success)
        {
            p_jsonCode.code = 1;
            p_jsonCode.data = objContract.Msg;
        }
        else
        {
            p_jsonCode.msg = objContract.Msg;
        }
    }

 /// <summary>
        /// 将WORD文件流转为PDF字符串
        /// </summary>
        /// <param name="p_stream"></param>
        /// <returns></returns>
        public void CreatePdf(string p_strword)
        {
            if (ContId <= 0)
            {
                _success = false;
                _msg = "参数错误";
                return;
            }
            TxtLog objlog = new TxtLog();
            objlog.dir = HttpContext.Current.Server.MapPath(strLogPath);
            Stream smPdf = null;
            Stream smWord = null;
            try
            {
                string strDirPath = HttpContext.Current.Server.MapPath(string.Format("{0}temp/externalsite/{1}/{2}/", ContractRootPath, SiteId, ContId / 1000));
                if (!Directory.Exists(strDirPath))
                {
                    Directory.CreateDirectory(strDirPath);
                }
                string strWordPath_Temp = string.Format("{0}{1}_temp.doc", strDirPath, ContId);//WORD文件地址
                string strNoImgPdfPath_Temp = string.Empty;//不带签章PDF地址
                string strPdfPath_Temp = string.Empty;//带签章PDF地址
                Document objDoc = null;
                //base64不为空,从base64读取word
                if (!string.IsNullOrWhiteSpace(p_strword))
                {
                    byte[] dataWord = Convert.FromBase64String(p_strword);
                    smWord = new MemoryStream(dataWord);
                    objDoc = new Document(smWord);
                    objDoc.Save(strWordPath_Temp);
                }//从word读取
                else if (File.Exists(strWordPath_Temp))
                {
                    objDoc = new Document(strWordPath_Temp);
                }
                else
                {
                    _success = false;
                    _msg = "word文件不存在";
                    objlog.WriteLog(string.Format("word文件不存在,参数:{0}", p_strword));
                    return;
                }

                //生成不带签章的pdf文件
                strNoImgPdfPath_Temp = string.Format("{0}{1}_noimg_temp.pdf", strDirPath, ContId);
                //添加订单信息
                if (Orders != null && Orders.Count > 0)
                {
                    InsertTable(objDoc);
                }
                objDoc.Save(strNoImgPdfPath_Temp);
                if (File.Exists(strNoImgPdfPath_Temp))
                {
                    strPdfPath_Temp = string.Format("{0}{1}_temp.pdf", strDirPath, ContId);
                    //加载签章
                    string strBuyerSeal = string.Empty;
                    if (BuyerId > 0)
                    {
                        strBuyerSeal = HttpContext.Current.Server.MapPath(string.Format("{0}{1}/{2}.png", SealRootPath, BuyerId / 1000, BuyerId));
                    }
                    string strSellerSeal = string.Empty;
                    if (SellerId > 0)
                    {
                        strSellerSeal = HttpContext.Current.Server.MapPath(string.Format("{0}{1}/{2}.png", SealRootPath, SellerId / 1000, SellerId));
                    }
                    if (BuyerId > 0 || SellerId > 0)
                    {
                        InsertWatermark(strNoImgPdfPath_Temp, strPdfPath_Temp, strBuyerSeal, strSellerSeal);
                        //签章失败,则终止操作
                        if (!_success)
                        {
                            return;
                        }
                        //已签章,获取已签章PDF文件
                        smPdf = File.OpenRead(strPdfPath_Temp);
                    }
                    else
                    {
                        //未签章,获取未签章PDF文件
                        smPdf = File.OpenRead(strNoImgPdfPath_Temp);
                    }
                    byte[] data = new byte[smPdf.Length];
                    smPdf.Read(data, 0, data.Length);
                    _msg = Convert.ToBase64String(data);
                    _success = true;
                }
                else
                {
                    _success = false;
                    _msg = "文件存储失败";
                    objlog.WriteLog(string.Format("文件存储失败,参数:{0}", p_strword));
                }
            }
            catch (Exception ex)
            {
                _success = false;
                _msg = ex.Message;
            }
            finally
            {
                if (smPdf != null)
                {
                    smPdf.Dispose();
                }
                if (smWord != null)
                {
                    smWord.Dispose();
                }
            }
        }

  

posted on 2018-05-18 14:39  阳光秋天  阅读(238)  评论(0编辑  收藏  举报