/// <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();
}
}
}