using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Data;
using BP.En;
using BP.DA;
using BP.Port;
using BP.Sys;
using BP.Web;
using System.Drawing;
using BP.Difference;
namespace BP.Pub
{
///
/// WebRtfReport 的摘要说明。
///
public class RTFEngine
{
#region 数据实体
private Entities _HisEns = null;
public Entities HisEns
{
get
{
if (_HisEns == null)
_HisEns = new Emps();
return _HisEns;
}
}
#endregion 数据实体
#region 模板数据
public string _rtfStr = "";
#endregion 模板数据
#region 数据明细实体
private System.Text.Encoding _encoder = System.Text.Encoding.GetEncoding("GB2312");
public string GetCode(string str)
{
if (DataType.IsNullOrEmpty(str))
return "";
string rtn = "";
byte[] rr = _encoder.GetBytes(str);
foreach (byte b in rr)
{
if (b > 122)
rtn += "\\'" + b.ToString("x");
else
rtn += (char)b;
}
return rtn.Replace("\n", " \\par ");
}
//明细表数据
private ArrayList _EnsDataDtls = null;
public ArrayList EnsDataDtls
{
get
{
if (_EnsDataDtls == null)
_EnsDataDtls = new ArrayList();
return _EnsDataDtls;
}
}
//多附件数据
private Hashtable _EnsDataAths = null;
public Hashtable EnsDataAths
{
get
{
if (_EnsDataAths == null)
_EnsDataAths = new Hashtable();
return _EnsDataAths;
}
}
#endregion 数据明细实体
///
/// 增加一个数据实体
///
///
public void AddEn(Entity en)
{
this.HisEns.AddEntity(en);
}
///
/// 增加一个Ens
///
///
public void AddDtlEns(Entities dtlEns)
{
this.EnsDataDtls.Add(dtlEns);
}
public string CyclostyleFilePath = "";
public string TempFilePath = "";
#region 获取特殊要处理的流程节点信息.
public string GetValueByKeyOfCheckNode(string[] strs)
{
foreach (Entity en in this.HisEns)
{
string val = en.GetValStringByKey(strs[2]);
switch (strs.Length)
{
case 1:
case 2:
throw new Exception("step1参数设置错误" + strs.ToString());
case 3: // S.9001002.Rec
return val;
case 4: // S.9001002.RDT.Year
switch (strs[3])
{
case "Text":
if (val == "0")
return "否";
else
return "是";
case "YesNo":
if (val == "1")
return "[√]";
else
return "[×]";
case "Year":
return val.Substring(0, 4);
case "Month":
return val.Substring(5, 2);
case "Day":
return val.Substring(8, 2);
case "NYR":
return DataType.ParseSysDate2DateTime(val).ToString("yyyy年MM月dd日");
case "RMB":
return float.Parse(val).ToString("0.00");
case "RMBDX":
return DataType.ParseFloatToCache(float.Parse(val));
default:
throw new Exception("step2参数设置错误" + strs);
}
default:
throw new Exception("step3参数设置错误" + strs);
}
}
throw new Exception("step4参数设置错误" + strs);
}
public static string GetImgHexString(System.Drawing.Image img, System.Drawing.Imaging.ImageFormat ext)
{
StringBuilder imgs = new StringBuilder();
MemoryStream stream = new MemoryStream();
img.Save(stream, ext);
stream.Close();
byte[] buffer = stream.ToArray();
for (int i = 0; i < buffer.Length; i++)
{
if ((i % 32) == 0)
{
imgs.AppendLine();
}
//else if ((i % 8) == 0)
//{
// imgs.Append(" ");
//}
byte num2 = buffer[i];
int num3 = (num2 & 240) >> 4;
int num4 = num2 & 15;
imgs.Append("0123456789abcdef"[num3]);
imgs.Append("0123456789abcdef"[num4]);
}
return imgs.ToString();
}
public Entity HisGEEntity = null;
///
/// 获取ICON图片的数据。
///
///
///
public string GetValueImgStrs(string key)
{
key = key.Replace(" ", "");
key = key.Replace("\r\n", "");
/*说明是图片文件.*/
string path = key.Replace("OID.Img@AppPath", SystemConfig.PathOfWebApp);
//定义rtf中图片字符串
StringBuilder pict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
//将要插入的图片转换为16进制字符串
string imgHexString;
key = key.ToLower();
if (key.Contains(".png"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Png);
else if (key.Contains(".jp"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
else if (key.Contains(".gif"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Gif);
else if (key.Contains(".ico"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Icon);
else
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
pict.AppendLine();
pict.Append(@"{\pict");
pict.Append(@"\jpegblip");
pict.Append(@"\picscalex100");
pict.Append(@"\picscaley100");
pict.Append(@"\picwgoal" + img.Size.Width * 15);
pict.Append(@"\pichgoal" + img.Size.Height * 15);
pict.Append(imgHexString + "}");
pict.AppendLine();
return pict.ToString();
}
///
/// 输入轨迹表.
///
///
public string GetFlowTrackTable()
{
//定义表头.
string title = @"\trowd\trgaph108\trleft5\trbrdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3
\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx1065\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx2126\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx3187\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx4248\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx5309\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx6370\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx7431\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx8492\pard\intbl\qj\lang2052\kerning2\f1\fs21\'d0\'f2\'ba\'c5\lang1033\f0\cell\lang2052\f1\'d6\'b4\'d0\'d0\'bb\'b7\'bd\'da\lang1033\f0\cell\lang2052\f1\'b0\'ec\'c0\'ed\'c7\'e9\'bf\'f6\lang1033\f0\cell\lang2052\f1\'d7\'b4\'cc\'ac\lang1033\f0\cell\lang2052\f1\'d6\'b4\'d0\'d0\'c8\'cb\lang1033\f0\cell\lang2052\f1\'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4\lang1033\f0\cell\lang2052\f1\'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4\lang1033\f0\cell\lang2052\f1\'c0\'fa\'ca\'b1TTT\lang1033\f0\cell\row";
//内容行部分.
string row = @"\trowd\
trgaph108\trleft5\trbrdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3
\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx1065\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx2126\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx3187\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx4248\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx5309\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx6370\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx7431\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx8492\pard\intbl\qj\f2 \f0\cell\f2 \f0\cell\f2 \f0\cell\f2 \f0\cell\f2 \f0\cell\f2 \f0\cell\f2 \f0\cell\f2 \f0\cell\row\";
string str = "";
int idx = 0;
foreach (DataRow dr in dtTrack.Rows)
{
idx++;
string dataRow = row.Clone() as string;
dataRow = dataRow.Replace("", idx.ToString());
dataRow = dataRow.Replace("", dr["NDFromT"].ToString());
str += dataRow;
}
return title + str;
}
///
/// 获取ICON图片的数据。
///
///
///
public string GetValueImgStrsOfQR(string billUrl)
{
/*说明是图片文件.*/
string path = SystemConfig.PathOfTemp + Guid.NewGuid() + ".png"; // key.Replace("OID.Img@AppPath", BP.Difference.SystemConfig.PathOfWebApp);
#region 生成二维码.
ThoughtWorks.QRCode.Codec.QRCodeEncoder qrc = new ThoughtWorks.QRCode.Codec.QRCodeEncoder();
qrc.QRCodeEncodeMode = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE;
qrc.QRCodeScale = 4;
qrc.QRCodeVersion = 7;
qrc.QRCodeErrorCorrect = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.M;
System.Drawing.Bitmap btm = qrc.Encode(billUrl, System.Text.Encoding.UTF8);
btm.Save(path);
#endregion
//定义rtf中图片字符串
StringBuilder pict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
//将要插入的图片转换为16进制字符串.
string imgHexString;
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Png);
//生成rtf中图片字符串
pict.AppendLine();
pict.Append(@"{\pict");
pict.Append(@"\jpegblip");
pict.Append(@"\picscalex100");
pict.Append(@"\picscaley100");
pict.Append(@"\picwgoal" + img.Size.Width * 15);
pict.Append(@"\pichgoal" + img.Size.Height * 15);
pict.Append(imgHexString + "}");
pict.AppendLine();
return pict.ToString();
}
///
/// 获取M2M数据并输出
///
///
///
public string GetValueM2MStrs(string key)
{
return "";
//string[] strs = key.Split('.');
//string sql = "SELECT ValsName FROM SYS_M2M WHERE FK_MapData='" + strs[0] + "' AND M2MNo='" + strs[2] + "' AND EnOID='" + this.HisGEEntity.PKVal + "'";
//string vals = DBAccess.RunSQLReturnStringIsNull(sql, null);
//if (vals == null)
// return "无数据";
//vals = vals.Replace("@", " ");
//vals = vals.Replace("", "");
//vals = vals.Replace("", "");
//return vals;
//string val = "";
//string[] objs = vals.Split('@');
//foreach (string obj in objs)
//{
// string[] noName = obj.Split(',');
// val += noName[1];
//}
//return val;
}
///
/// 获取写字版的数据
///
///
///
public string GetValueBPPaintStrs(string key)
{
key = key.Replace(" ", "");
key = key.Replace("\r\n", "");
string[] strs = key.Split('.');
string filePath = "";
try
{
filePath = DBAccess.RunSQLReturnString("SELECT Tag2 From Sys_FrmEleDB WHERE RefPKVal=" + this.HisGEEntity.PKVal + " AND EleID='" + strs[2].Trim() + "'");
if (filePath == null)
return "";
}
catch
{
return "";
}
//定义rtf中图片字符串
StringBuilder pict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image img = System.Drawing.Image.FromFile(filePath);
//将要插入的图片转换为16进制字符串
string imgHexString;
filePath = filePath.ToLower();
if (filePath.Contains(".png"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Png);
else if (filePath.Contains(".jp"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
else if (filePath.Contains(".gif"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Gif);
else if (filePath.Contains(".ico"))
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Icon);
else
imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
pict.AppendLine();
pict.Append(@"{\pict");
pict.Append(@"\jpegblip");
pict.Append(@"\picscalex100");
pict.Append(@"\picscaley100");
pict.Append(@"\picwgoal" + img.Size.Width * 15);
pict.Append(@"\pichgoal" + img.Size.Height * 15);
pict.Append(imgHexString + "}");
pict.AppendLine();
return pict.ToString();
}
///
/// 获取类名+@+字段格式的数据.
/// 比如:
/// Demo_Inc@ABC
/// Emp@Name
///
///
///
public string GetValueByAtKey(string key)
{
foreach (Entity en in this.HisEns)
{
string enKey = en.ToString();
//有可能是 BP.Port.Emp
if (enKey.Contains("."))
enKey = en.GetType().Name;
//如果不包含.
if (key.Contains(enKey + "@") == false)
continue;
// 如果不包含 . 就说明,不需要转意。
if (key.Contains(".") == false)
return en.GetValStringByKey(key.Substring(key.IndexOf('@') + 1));
//把实体名去掉
key = key.Replace(enKey + "@", "");
//把数据破开.
string[] strs = key.Split('.');
if (strs.Length == 2)
{
if (strs[1].Trim() == "ImgAth")
{
string path1 = SystemConfig.PathOfDataUser + "ImgAth/Data/" + strs[0].Trim() + "_" + en.PKVal + ".png";
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image imgAth = System.Drawing.Image.FromFile(path1);
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + imgAth.Size.Width * 15);
mypict.Append(@"\pichgoal" + imgAth.Size.Height * 15);
mypict.Append(imgHexStringImgAth + "}");
mypict.AppendLine();
return mypict.ToString();
}
string val = en.GetValStringByKey(strs[0].Trim());
switch (strs[1].Trim())
{
case "Text":
if (val == "0")
return "否";
else
return "是";
case "Year":
return val.Substring(0, 4);
case "Month":
return val.Substring(5, 2);
case "Day":
return val.Substring(8, 2);
case "NYR":
return DataType.ParseSysDate2DateTime(val).ToString("yyyy年MM月dd日");
case "RMB":
return float.Parse(val).ToString("0.00");
case "RMBDX":
return DataType.ParseFloatToCache(float.Parse(val));
case "ImgAth":
string path1 = SystemConfig.PathOfDataUser + "ImgAth/Data/" + strs[0].Trim() + "_" + this.HisGEEntity.PKVal + ".png";
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image imgAth = System.Drawing.Image.FromFile(path1);
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + imgAth.Size.Width * 15);
mypict.Append(@"\pichgoal" + imgAth.Size.Height * 15);
mypict.Append(imgHexStringImgAth + "}");
mypict.AppendLine();
return mypict.ToString();
case "Siganture":
string path = SystemConfig.PathOfDataUser + "Siganture/" + val + ".jpg";
//定义rtf中图片字符串.
StringBuilder pict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
//将要插入的图片转换为16进制字符串
string imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
pict.AppendLine();
pict.Append(@"{\pict");
pict.Append(@"\jpegblip");
pict.Append(@"\picscalex100");
pict.Append(@"\picscaley100");
pict.Append(@"\picwgoal" + img.Size.Width * 15);
pict.Append(@"\pichgoal" + img.Size.Height * 15);
pict.Append(imgHexString + "}");
pict.AppendLine();
return pict.ToString();
//替换rtf模板文件中的签名图片标识为图片字符串
// str = str.Replace(imgMark, pict.ToString());
default:
throw new Exception("参数设置错误,特殊方式取值错误:" + key);
}
}
} // 实体循环。
throw new Exception("参数设置错误 GetValueByKey :" + key);
}
///
/// 获得所所有的审核人员信息.
///
///
public string GetValueCheckWorks()
{
string html = "";
//获得当前待办的人员,把当前审批的人员排除在外,不然就有默认同意的意见可以打印出来.
string sql = "SELECT FK_Emp, FK_Node FROM WF_GenerWorkerlist WHERE IsPass!=1 AND WorkID=" + this.HisGEEntity.PKVal;
DataTable dtOfTodo = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow dr in dtTrack.Rows)
{
#region 排除正在审批的人员.
string nodeID = dr["NDFrom"].ToString();
string empFrom = dr["EmpFrom"].ToString();
if (dtOfTodo.Rows.Count != 0)
{
bool isHave = false;
foreach (DataRow mydr in dtOfTodo.Rows)
{
if (mydr["FK_Node"].ToString() != nodeID)
continue;
if (mydr["FK_Emp"].ToString() != empFrom)
continue;
isHave = true;
}
if (isHave == true)
continue;
}
#endregion 排除正在审批的人员.
html += "";
html += " " + dr["NDFromT"] + " | ";
string msg = dr["Msg"].ToString();
msg += "
";
msg += "
";
string empStrs = "";
if (dtTrack == null)
{
empStrs = dr["EmpFromT"].ToString();
}
else
{
string singType = "0";
foreach (DataRow drTrack in dtTrack.Rows)
{
if (drTrack["No"].ToString() == dr["EmpFrom"].ToString())
{
singType = drTrack["SignType"].ToString();
break;
}
}
if (singType == "0" || singType == "2")
{
empStrs = dr["EmpFromT"].ToString();
}
if (singType == "1")
{
empStrs = " " + dr["EmpFromT"];
}
}
msg += "审核人:" + empStrs + " 日期:" + dr["RDT"].ToString();
html += " " + msg + " | ";
html += "
";
}
return html;
}
///
/// 获得审核组件的信息.
///
///
///
public string GetValueCheckWorkByKey(string key)
{
key = key.Replace(" ", "");
key = key.Replace("\r\n", "");
string[] strs = key.Split('.');
if (strs.Length == 3)
{
/*
* 是一个节点一个审核人的模式.
*/
if (dtTrack == null)
throw new Exception("@您设置了获取审核组件里的规则,但是你没有给审核组件数据源dtTrack赋值。");
string nodeID = strs[2];
foreach (DataRow dr in dtTrack.Rows)
{
if (dr["NDFrom"].ToString() != nodeID)
continue;
switch (strs[1])
{
case "RDT":
return dr["RDT"].ToString(); //审核日期.
case "RDT-NYR":
string rdt = dr["RDT"].ToString(); //审核日期.
DateTime dt = Convert.ToDateTime(rdt);
return dt.Year + "\\'c4\\'ea" + dt.Month + "\\'d4\\'c2" + dt.Day + "\\'c8\\'d5";
return Convert.ToDateTime(rdt).ToString("yyyy年MM月dd日");
case "Rec":
return dr["EmpFrom"].ToString(); //记录人.
case "RecName":
string recName = dr["EmpFromT"].ToString(); //审核人.
recName = this.GetCode(recName);
return recName;
case "Msg":
case "Note":
string text = dr["Msg"].ToString();
text = text.Replace("\\", "\\\\");
text = this.GetCode(text);
return text;
//return System.Text.Encoder //审核信息.
default:
break;
}
}
}
return "无";
}
private string GetValueCheckWorkByKey(DataRow row, string key)
{
key = key.Replace(" ", "");
key = key.Replace("\r\n", "");
switch (key)
{
case "RDT":
return row["RDT"].ToString(); //审核日期.
case "RDT-NYR":
string rdt = row["RDT"].ToString(); //审核日期.
DateTime dt = Convert.ToDateTime(rdt);
return dt.Year + "\\'c4\\'ea" + dt.Month + "\\'d4\\'c2" + dt.Day + "\\'c8\\'d5";
return Convert.ToDateTime(rdt).ToString("yyyy年MM月dd日");
case "Rec":
return row["EmpFrom"].ToString(); //记录人.
case "RecName":
string recName = row["EmpFromT"].ToString(); //审核人.
recName = this.GetCode(recName);
return recName;
case "Msg":
case "Note":
string text = row["Msg"].ToString();
text = text.Replace("\\", "\\\\");
text = this.GetCode(text);
return text;
case "Siganture":
string empNo = row["EmpFrom"].ToString(); //记录人.
return empNo;//审核人的签名.
case "WriteDB":
return row["WriteDB"].ToString();
default:
return row[key] as string;
}
}
///
/// 审核节点的表示方法是 节点ID.Attr.
///
///
///
public string GetValueByKey(string key)
{
key = key.Replace(" ", "");
key = key.Replace("\r\n", "");
//获取参数代码.
if (key.Contains("@"))
return GetValueByAtKey(key);
string[] strs = key.Split('.');
// 如果不包含 . 就说明他是从Rpt中取数据。
//if (this.HisGEEntity != null && key.Contains("ND") == false)
if (this.HisGEEntity != null)
{
if (strs.Length == 1)
return this.HisGEEntity.GetValStringByKey(key);
if(strs[1].Trim() == "Checkboxs")
{
//获取复选框多选的值
string content = this.HisGEEntity.GetValStringByKey(strs[0]);
//转换成文本
Attr attr = this.HisGEEntity.EnMap.Attrs.GetAttrByKeyOfEn(strs[0]);
if (DataType.IsNullOrEmpty(attr.UIBindKey) == true)
return content;
SysEnums enums = new SysEnums(attr.UIBindKey);
string str = "";
foreach(SysEnum en in enums)
{
if ((content + ",").Contains(en.IntKey + ",") == true)
str += en.Lab + ",";
}
if (str != "") str = str.Substring(0, str.Length - 1);
return str;
}
if (strs[1].Trim() == "Editor")
{
//获取富文本的内容
string content = this.HisGEEntity.GetValStringByKey(strs[0]);
content = content.Replace("img+", "img ");
string contentHtml = "" + content + "";
string StrNohtml = System.Text.RegularExpressions.Regex.Replace(contentHtml, "<[^>]+>", "");
StrNohtml = System.Text.RegularExpressions.Regex.Replace(StrNohtml, "&[^;]+;", "");
return this.GetCode(StrNohtml);
string htmlpath = SystemConfig.PathOfDataUser + "Bill/Temp/EditorHtm.html";
if (File.Exists(htmlpath) == false)
File.Create(htmlpath);
using (StreamWriter sw = new StreamWriter(htmlpath))
{
sw.Write(contentHtml);
}
//如何写入到word
string html = File.ReadAllText(htmlpath, Encoding.UTF8);
//byte[] array = Encoding.ASCII.GetBytes(content);
//StringBuilder editors = new StringBuilder();
//for (int i = 0; i < array.Length; i++)
//{
// editors.Append(array[i]);
//}
//MemoryStream stream = new MemoryStream(array); //convert stream 2 string
//System.IO.StreamReader readStream = new System.IO.StreamReader(contentHtml, Encoding.UTF8);
return html;
}
if (strs[1].Trim() == "ImgAth")
{
string path1 = SystemConfig.PathOfDataUser + "ImgAth/Data/" + strs[0].Trim() + "_" + this.HisGEEntity.PKVal + ".png";
if (!File.Exists(path1))
{
return path1;
}
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image imgAth = System.Drawing.Image.FromFile(path1);
//图片附件描述属性
FrmImgAth frmImgAth = new FrmImgAth();
frmImgAth.RetrieveByAttr(FrmImgAthAttr.MyPK, strs[0].Trim());
//图片高宽
float iWidth = imgAth.Size.Width * 15;
float iHeight = imgAth.Size.Height * 15;
if (frmImgAth != null && !DataType.IsNullOrEmpty(frmImgAth.FrmID))
{
iWidth = frmImgAth.W * 15;
iHeight = frmImgAth.H * 15;
}
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + iWidth);
mypict.Append(@"\pichgoal" + iHeight);
mypict.Append(imgHexStringImgAth + "}");
mypict.AppendLine();
return mypict.ToString();
}
if (strs[1].Trim() == "BPPaint")
{
string path1 = DBAccess.RunSQLReturnString("SELECT Tag2 FROM Sys_FrmEleDB WHERE REFPKVAL=" + this.HisGEEntity.PKVal + " AND EleID='" + strs[0].Trim() + "'");
// string path1 = BP.Difference.SystemConfig.PathOfDataUser + "\\BPPaint\\" + this.HisGEEntity.ToString().Trim() + "\\" + this.HisGEEntity.PKVal + ".png";
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image myBPPaint = System.Drawing.Image.FromFile(path1);
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(myBPPaint, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + myBPPaint.Size.Width * 15);
mypict.Append(@"\pichgoal" + myBPPaint.Size.Height * 15);
mypict.Append(imgHexStringImgAth + "}");
mypict.AppendLine();
return mypict.ToString();
}
//根据枚举值返回选中符号
if (strs[1].Contains("-EnumYes") == true)
{
string relVal = this.HisGEEntity.GetValStringByKey(strs[0]);
string[] checkVal = strs[1].Split('-');
if (checkVal.Length == 1)
return relVal;
if (relVal.Equals(checkVal[0]))
return "[√]";
else
return "[×]";
}
if (strs.Length == 2)
{
string val = this.HisGEEntity.GetValStringByKey(strs[0].Trim());
switch (strs[1].Trim())
{
case "Text":
if (val == "0")
return "否";
else
return "是";
case "Year":
return val.Substring(0, 4);
case "Month":
return val.Substring(5, 2);
case "Day":
return val.Substring(8, 2);
case "NYR":
return DataType.ParseSysDate2DateTime(val).ToString("yyyy年MM月dd日");
case "RMB":
decimal md = Math.Round(decimal.Parse(val), 2);
return md.ToString();
case "RMBDX":
return this.GetCode(DataType.ParseFloatToCache(float.Parse(val)));
case "Siganture":
string path = SystemConfig.PathOfDataUser + "Siganture/" + val + ".jpg";
//获取要插入的图片
if (File.Exists(path) == true)
{
//定义rtf中图片字符串
StringBuilder pict = new StringBuilder();
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
//将要插入的图片转换为16进制字符串
string imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
pict.AppendLine();
pict.Append(@"{\pict");
pict.Append(@"\jpegblip");
pict.Append(@"\picscalex100");
pict.Append(@"\picscaley100");
pict.Append(@"\picwgoal" + img.Size.Width * 15);
pict.Append(@"\pichgoal" + img.Size.Height * 15);
pict.Append(imgHexString + "}");
pict.AppendLine();
return pict.ToString();
}
//图片不存在显示中文名,否则显示原值
string empName = DBAccess.RunSQLReturnStringIsNull("SELECT Name FROM Port_Emp WHERE No='" + val + "'", val);
return this.GetCode(empName);
//替换rtf模板文件中的签名图片标识为图片字符串
// str = str.Replace(imgMark, pict.ToString());
case "BoolenText":
if (val == "0")
return "否";
else
return "是";
case "Boolen":
if (val == "1")
return "[√]";
else
return "[×]";
break;
case "YesNo":
if (val == "1")
return "[√]";
else
return "[×]";
break;
case "Yes":
if (val == "1")
return "[√]";
else
return "[×]";
case "No":
if (val == "0")
return "[√]";
else
return "[×]";
default:
throw new Exception("参数设置错误,特殊方式取值错误:" + key);
}
}
else
{
throw new Exception("参数设置错误,特殊方式取值错误:" + key);
}
}
foreach (Entity en in this.HisEns)
{
string enKey = en.ToString();
if (enKey.Contains("."))
enKey = en.GetType().Name;
if (key.Contains(en.ToString() + ".") == false)
continue;
/*说明就在这个字段内*/
if (strs.Length == 1)
throw new Exception("参数设置错误,strs.length=1 。" + key);
if (strs.Length == 2)
return en.GetValStringByKey(strs[1].Trim());
if (strs.Length == 3)
{
if (strs[2].Trim() == "ImgAth")
{
string path1 = SystemConfig.PathOfDataUser + "ImgAth/Data/" + strs[1].Trim() + "_" + en.PKVal + ".png";
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image imgAth = System.Drawing.Image.FromFile(path1);
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + imgAth.Size.Width * 15);
mypict.Append(@"\pichgoal" + imgAth.Size.Height * 15);
mypict.Append(imgHexStringImgAth + "}");
mypict.AppendLine();
return mypict.ToString();
}
string val = en.GetValStringByKey(strs[1].Trim());
switch (strs[2].Trim())
{
case "Text":
if (val == "0")
return "否";
else
return "是";
case "Year":
return val.Substring(0, 4);
case "Month":
return val.Substring(5, 2);
case "Day":
return val.Substring(8, 2);
case "NYR":
return DataType.ParseSysDate2DateTime(val).ToString("yyyy年MM月dd日");
case "RMB":
return float.Parse(val).ToString("0.00");
case "RMBDX":
return DataType.ParseFloatToCache(float.Parse(val));
case "ImgAth":
string path1 = SystemConfig.PathOfDataUser + "ImgAth/Data/" + strs[0].Trim() + "_" + this.HisGEEntity.PKVal + ".png";
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image imgAth = System.Drawing.Image.FromFile(path1);
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + imgAth.Size.Width * 15);
mypict.Append(@"\pichgoal" + imgAth.Size.Height * 15);
mypict.Append(imgHexStringImgAth + "}");
mypict.AppendLine();
return mypict.ToString();
case "Siganture":
string path = SystemConfig.PathOfDataUser + "Siganture/" + val + ".jpg";
//定义rtf中图片字符串.
StringBuilder pict = new StringBuilder();
//获取要插入的图片
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
//将要插入的图片转换为16进制字符串
string imgHexString = GetImgHexString(img, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
pict.AppendLine();
pict.Append(@"{\pict");
pict.Append(@"\jpegblip");
pict.Append(@"\picscalex100");
pict.Append(@"\picscaley100");
pict.Append(@"\picwgoal" + img.Size.Width * 15);
pict.Append(@"\pichgoal" + img.Size.Height * 15);
pict.Append(imgHexString + "}");
pict.AppendLine();
return pict.ToString();
//替换rtf模板文件中的签名图片标识为图片字符串
// str = str.Replace(imgMark, pict.ToString());
default:
throw new Exception("参数设置错误,特殊方式取值错误:" + key);
}
}
}
throw new Exception("参数设置错误 GetValueByKey :" + key);
}
#endregion
#region 生成单据
///
/// 生成单据
///
/// 模板文件
public void MakeDoc(string cfile)
{
string file = PubClass.GenerTempFileName("doc");
this.MakeDoc(cfile, SystemConfig.PathOfTemp, file);
}
public string ensStrs = "";
///
/// 轨迹表(用于输出打印审核轨迹,审核信息.)
///
public DataTable dtTrack = null;
public DataTable wks = null;
public DataTable subFlows = null;
///
/// 单据生成
///
/// 模板文件
/// 生成路径
/// 生成文件
/// 要打开的url用于生成二维码
public void MakeDoc(string templateRtfFile, string path, string file, string billUrl = null)
{
templateRtfFile = templateRtfFile.Replace(".rtf.rtf", ".rtf");
if (System.IO.Directory.Exists(path) == false)
System.IO.Directory.CreateDirectory(path);
string str = this._rtfStr;
if (this.HisEns.Count == 0)
if (this.HisGEEntity == null)
throw new Exception("@您没有为报表设置数据源...");
this.ensStrs = "";
if (this.HisEns.Count != 0)
{
foreach (Entity en in this.HisEns)
ensStrs += en.ToString();
}
else
{
ensStrs = this.HisGEEntity.ToString();
}
string error = "";
string[] paras = null;
if (this.HisGEEntity != null)
paras = Cache.GetBillParas(templateRtfFile, ensStrs, this.HisGEEntity);
else
paras = Cache.GetBillParas(templateRtfFile, ensStrs, this.HisEns);
this.TempFilePath = path + file;
try
{
string key = "";
string ss = "";
#region 替换主表标记
foreach (string para in paras)
{
if (DataType.IsNullOrEmpty(para))
continue;
//如果包含,时间表.
if (para.Contains("FlowTrackTable") == true && dtTrack != null)
{
str = str.Replace("", this.GetFlowTrackTable());
continue;
}
try
{
if (para.Contains("Editor"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains("ImgAth"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains("Siganture"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains("Img@AppPath"))
str = str.Replace("<" + para + ">", this.GetValueImgStrs(para));
else if (para.Contains("Img@QR"))
str = str.Replace("<" + para + ">", this.GetValueImgStrsOfQR(billUrl));
else if (para.Contains(".BPPaint"))
str = str.Replace("<" + para + ">", this.GetValueBPPaintStrs(para));
else if (para.Contains(".M2M"))
str = str.Replace("<" + para + ">", this.GetValueM2MStrs(para));
else if (para.Contains(".RMBDX"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".RMB"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".Boolen"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".BoolenText"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".NYR"))
str = str.Replace("<" + para + ">", this.GetCode(this.GetValueByKey(para)));
else if (para.Contains(".Year"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".Month"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".Day"))
str = str.Replace("<" + para + ">", this.GetValueByKey(para));
else if (para.Contains(".Yes") == true)
str = str.Replace("<" + para + ">", this.GetCode(this.GetValueByKey(para)));
else if (para.Contains("-EnumYes") == true)
str = str.Replace("<" + para + ">", this.GetCode(this.GetValueByKey(para)));
else if (para.Contains(".Checkboxs") == true)
str = str.Replace("<" + para + ">", this.GetCode(this.GetValueByKey(para)));
else if ((para.Contains("WorkCheck.RDT") == true && para.Contains("WorkCheck.RDT.") == false)
|| (para.Contains("WorkCheck.Rec") == true && para.Contains("WorkCheck.Rec.") == false)
|| (para.Contains("WorkCheck.RecName") == true && para.Contains("WorkCheck.RecName.") == false)
|| (para.Contains("WorkCheck.Note") == true && para.Contains("WorkCheck.Note.") == false)) // 审核组件的审核日期.
str = str.Replace("<" + para + ">", this.GetValueCheckWorkByKey(para));
else if (para.Contains("WorkChecks") == true) //为烟台增加审核人员的信息,把所有的审核人员信息都输入到这里.
str = str.Replace("<" + para + ">", this.GetValueCheckWorks());
else if (para.Contains(".") == true)
continue; /*有可能是明细表数据.*/
else
{
string val = this.GetValueByKey(para);
val = val.Replace("\\", "\\\\");
val = this.GetCode(val);
str = str.Replace("<" + para + ">", val);
}
}
catch (Exception ex)
{
error += "@替换主表标记取参数[" + para + "]出现错误:有以下情况导致此错误;1你用Text取值时间,此属性不是外键。2,类无此属性。3,该字段是明细表字段但是丢失了明细表标记.
更详细的信息:
" + ex.Message;
if (SystemConfig.isDebug)
throw new Exception(error);
BP.DA.Log.DebugWriteError(error);
}
}
#endregion 替换主表标记
#region 从表
string shortName = "";
ArrayList al = this.EnsDataDtls;
for(int K = 0; K < 2; K++)
{
foreach (Entities dtls in al)
{
Entity dtl = dtls.GetNewEntity;
string dtlEnName = dtl.ToString();
shortName = dtlEnName.Substring(dtlEnName.LastIndexOf(".") + 1);
if (str.IndexOf(shortName) == -1)
continue;
int pos_rowKey = str.IndexOf("<" + shortName + ".") + 1;
int row_start = -1, row_end = -1;
if (pos_rowKey != -1)
{
row_start = str.Substring(0, pos_rowKey).LastIndexOf("\\nestrow");
if (row_start == -1)
row_start = str.Substring(0, pos_rowKey).LastIndexOf("\\row");
row_end = str.Substring(pos_rowKey).IndexOf("\\nestrow");
if (row_end == -1)
row_end = str.Substring(pos_rowKey).IndexOf("\\row");
}
if (row_start == -1 || row_end == -1)
continue; //如果没有发现标记.
//获得row的数据.
string row = str.Substring(row_start, (pos_rowKey - row_start) + row_end);
str = str.Replace(row, "");
Map map = dtls.GetNewEntity.EnMap;
int i = dtls.Count;
while (i > 0)
{
i--;
string rowData = row.Clone() as string;
dtl = dtls[i];
//替换序号
int rowIdx = i + 1;
rowData = rowData.Replace("", rowIdx.ToString());
foreach (Attr attr in map.Attrs)
{
switch (attr.MyDataType)
{
case DataType.AppDouble:
case DataType.AppFloat:
rowData = rowData.Replace("<" + shortName + "." + attr.Key + ">", dtl.GetValStringByKey(attr.Key));
break;
case DataType.AppMoney:
rowData = rowData.Replace("<" + shortName + "." + attr.Key + ">", dtl.GetValDecimalByKey(attr.Key).ToString("0.00"));
break;
case DataType.AppInt:
if (attr.MyDataType == DataType.AppBoolean)
{
rowData = rowData.Replace("<" + shortName + "." + attr.Key + ">", dtl.GetValStrByKey(attr.Key));
int v = dtl.GetValIntByKey(attr.Key);
if (v == 1)
rowData = rowData.Replace("<" + shortName + "." + attr.Key + "Text>", "是");
else
rowData = rowData.Replace("<" + shortName + "." + attr.Key + "Text>", "否");
}
else
{
if (attr.ItIsEnum)
rowData = rowData.Replace("<" + shortName + "." + attr.Key + "Text>", GetCode(dtl.GetValRefTextByKey(attr.Key)));
else
rowData = rowData.Replace("<" + shortName + "." + attr.Key + ">", dtl.GetValStrByKey(attr.Key));
}
break;
default:
rowData = rowData.Replace("<" + shortName + "." + attr.Key + ">", GetCode(dtl.GetValStrByKey(attr.Key)));
break;
}
}
str = str.Insert(row_start, rowData);
}
}
}
#endregion 从表
#region 明细 合计信息。
al = this.EnsDataDtls;
foreach (Entities dtls in al)
{
Entity dtl = dtls.GetNewEntity;
string dtlEnName = dtl.ToString();
shortName = dtlEnName.Substring(dtlEnName.LastIndexOf(".") + 1);
//shortName = dtls.ToString().Substring(dtls.ToString().LastIndexOf(".") + 1);
Map map = dtl.EnMap;
foreach (Attr attr in map.Attrs)
{
switch (attr.MyDataType)
{
case DataType.AppDouble:
case DataType.AppFloat:
case DataType.AppMoney:
key = "<" + shortName + "." + attr.Key + ".SUM>";
if (str.IndexOf(key) != -1)
str = str.Replace(key, dtls.GetSumFloatByKey(attr.Key).ToString());
key = "<" + shortName + "." + attr.Key + ".SUM.RMB>";
if (str.IndexOf(key) != -1)
str = str.Replace(key, dtls.GetSumFloatByKey(attr.Key).ToString("0.00"));
key = "<" + shortName + "." + attr.Key + ".SUM.RMBDX>";
if (str.IndexOf(key) != -1)
str = str.Replace(key,
GetCode(DataType.ParseFloatToCache(dtls.GetSumFloatByKey(attr.Key))));
break;
case DataType.AppInt:
key = "<" + shortName + "." + attr.Key + ".SUM>";
if (str.IndexOf(key) != -1)
str = str.Replace(key, dtls.GetSumIntByKey(attr.Key).ToString());
break;
default:
break;
}
}
}
#endregion 从表合计
#region 审核组件组合信息,added by liuxc,2016-12-16
//节点单个审核人
// 根据track表获取审核的节点
if (dtTrack != null && str.Contains("") == false
&& str.Contains("") == false)
{
if (this.wks != null && this.wks.Rows.Count != 0)
{
foreach (DataRow nd in this.wks.Rows)
{
int nodeID = nd[0] != null ? int.Parse(nd[0].ToString()) : 0;
//判断是否存在一个节点多个签批意见,需要循环显示,第一个意见替换,其余的节点追加在后面
bool isHaveNote = str.IndexOf("WorkCheck.Note." + nodeID) != -1 ? true : false;
bool isHaveRec = str.IndexOf("WorkCheck.Rec." + nodeID) != -1 ? true : false;
bool isHaveRecName = str.IndexOf("WorkCheck.RecName." + nodeID) != -1 ? true : false;
bool isHaveRDT = str.IndexOf("WorkCheck.RDT." + nodeID) != -1 ? true : false;
bool isHaveWriteDB = str.IndexOf("WorkCheck.WriteDB." + nodeID) != -1 ? true : false;
if (isHaveNote == false && isHaveRec == false && isHaveRecName == false && isHaveRDT == false && isHaveWriteDB == false)
continue;
//把track信息分组
DataRow[] tracks = tracks = dtTrack.Select("NDFrom=" + nodeID);
if (tracks.Length == 0)
{ //该节点没有签名,替换签名的内容
string wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
continue;
}
string workCheckStr = "";
int idx = 0;
foreach (DataRow row in tracks)
{
int acType = int.Parse(row["ActionType"].ToString());
if (acType != 22)
continue;
string empNo = row["EmpFrom"] == null ? "" : row["EmpFrom"].ToString();
//if (idx == 0)
//{
// //替换,如果还有审核意见的时候需要追加在最后面
// str = WorkCheckReplace(str, row, nodeID);
// if (isHaveWriteDB == true)
// {
// string wkVal = this.GetValueCheckWorkByKey(row, "WriteDB");
// string RDT = this.GetValueCheckWorkByKey(row, "RDT").Replace("-", "");
// RDT = RDT.Replace(":", "");
// RDT = RDT.Replace(" ", "");
// Int64 rdttime = Int64.Parse(RDT);
// if (DataType.IsNullOrEmpty(wkVal) == true)
// wkVal = "";
// //定义rtf中图片字符串.
// StringBuilder mypict = new StringBuilder();
// //将要插入的图片转换为16进制字符串
// byte[] buffer = Convert.FromBase64String(wkVal);
// MemoryStream ms = new MemoryStream(buffer);
// Bitmap bmpt = new Bitmap(ms);
// Image image = bmpt;
// if (image != null)
// {
// int width = image.Width;
// int height = image.Height;
// StringBuilder imgs = new StringBuilder();
// for (int i = 0; i < buffer.Length; i++)
// {
// if ((i % 32) == 0)
// {
// imgs.AppendLine();
// }
// byte num2 = buffer[i];
// int num3 = (num2 & 240) >> 4;
// int num4 = num2 & 15;
// imgs.Append("0123456789abcdef"[num3]);
// imgs.Append("0123456789abcdef"[num4]);
// }
// //转换
// //生成rtf中图片字符串
// mypict.AppendLine();
// mypict.Append(@"{\pict");
// mypict.Append(@"\jpegblip");
// mypict.Append(@"\picscalex100");
// mypict.Append(@"\picscaley100");
// mypict.Append(@"\picwgoal" + width * 3);
// mypict.Append(@"\pichgoal" + height * 3);
// mypict.Append(imgs.ToString() + "}");
// mypict.Append("\n");
// workCheckStr += mypict.ToString() + "\\par";
// }
// else
// {
// string md = "";
// if (row["RDT"]!= null)
// {
// string rdt = row["RDT"].ToString();
// DateTime date = DataType.ParseSysDate2DateTime(rdt);
// md = date.ToString("yyyy-MM-dd");
// }
// workCheckStr += row["EmpFromT"].ToString() + md + "\\par";
// }
// }
// idx++;
// continue;
//}
if (isHaveNote)
workCheckStr += this.GetValueCheckWorkByKey(row, "Msg") + "\\par";
if (isHaveRec)
workCheckStr += this.GetValueCheckWorkByKey(row, "EmpFrom") + "\\par";
if (isHaveRecName)
workCheckStr += this.GetValueCheckWorkByKey(row, "EmpFromT") + "\\par";
if (isHaveRDT)
workCheckStr += this.GetValueCheckWorkByKey(row, "RDT") + "\\par";
if (isHaveWriteDB)
{
string wkVal = this.GetValueCheckWorkByKey(row, "WriteDB");
string RDT = this.GetValueCheckWorkByKey(row, "RDT").Replace("-", "");
RDT = RDT.Replace(":", "");
RDT = RDT.Replace(" ", "");
Int64 rdttime = Int64.Parse(RDT);
if (DataType.IsNullOrEmpty(wkVal) == true)
wkVal = "";
//定义rtf中图片字符串.
StringBuilder mypict = new StringBuilder();
//将要插入的图片转换为16进制字符串
byte[] buffer = Convert.FromBase64String(wkVal);
MemoryStream ms = new MemoryStream(buffer);
Bitmap bmpt = new Bitmap(ms);
Image image = bmpt;
if (image != null)
{
int width = image.Width;
int height = image.Height;
StringBuilder imgs = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
{
if ((i % 32) == 0)
{
imgs.AppendLine();
}
byte num2 = buffer[i];
int num3 = (num2 & 240) >> 4;
int num4 = num2 & 15;
imgs.Append("0123456789abcdef"[num3]);
imgs.Append("0123456789abcdef"[num4]);
}
//转换
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + width * 3);
mypict.Append(@"\pichgoal" + height * 3);
mypict.Append(imgs.ToString() + "}");
mypict.Append("\n");
workCheckStr += mypict.ToString() + "\\par";
}
else
{
string md = "";
if (row["RDT"] != null)
{
string rdt = row["RDT"].ToString();
DateTime date = DataType.ParseSysDate2DateTime(rdt);
md = date.ToString("yyyy-MM-dd");
}
workCheckStr += row["EmpFromT"].ToString() + md + "\\par";
}
}
idx++;
}
if (workCheckStr.Equals(""))
{
string wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
continue;
}
if (isHaveNote == true || isHaveRec == true || isHaveRecName == true || isHaveRDT == true || isHaveWriteDB == true)
{
bool isHaveChange = false;
if (isHaveNote == true)
{
str = str.Replace("", workCheckStr);
isHaveChange = true;
}
if (isHaveRec == true && isHaveChange == false)
{
str = str.Replace("", workCheckStr);
isHaveChange = true;
}
if (isHaveRecName == true && isHaveChange == false)
{
str = str.Replace("", workCheckStr);
isHaveChange = true;
}
if (isHaveRDT == true && isHaveChange == false)
{
str = str.Replace("", workCheckStr);
isHaveChange = true;
}
if (isHaveWriteDB == true && isHaveChange == false)
{
str = str.Replace("", workCheckStr);
isHaveChange = true;
}
string wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
wkKey = "";
str = str.Replace(wkKey, "");
}
}
}
}
//if (dtTrack != null && str.Contains("") == false && str.Contains("") == false)
//{
// foreach (DataRow row in dtTrack.Rows) //此处的22是ActionType.WorkCheck的值,此枚举位于BP.WF项目中,此处暂写死此值
// {
// int acType = int.Parse(row["ActionType"].ToString());
// if (acType != 22)
// continue;
// //节点从.
// string nfFrom = row["NDFrom"].ToString();
// string wkKey = "";
// string wkVal = this.GetCode(this.GetValueCheckWorkByKey(row, "Msg"));
// str = str.Replace(wkKey, wkVal);
// wkKey = "";
// wkVal = this.GetCode(this.GetValueCheckWorkByKey(row, "EmpFromT"));
// str = str.Replace(wkKey, wkVal);
// wkKey = "";
// wkVal = this.GetCode(this.GetValueCheckWorkByKey(row, "RDT"));
// str = str.Replace(wkKey, wkVal);
// wkKey = "";
// wkVal = this.GetValueCheckWorkByKey(row, "RDT-NYR");
// str = str.Replace(wkKey, wkVal);
// //审核人的签名. 2020.11.28 by zhoupeng
// wkKey = "";
// if (str.Contains(wkKey) == true)
// {
// wkVal = this.GetCode(this.GetValueCheckWorkByKey(row, "EmpFrom"));
// String filePath = BP.Difference.SystemConfig.PathOfDataUser + "/Siganture/" + wkVal + ".jpg";
// //定义rtf中图片字符串.
// StringBuilder mypict = new StringBuilder();
// //获取要插入的图片
// System.Drawing.Image imgAth = System.Drawing.Image.FromFile(filePath);
// //将要插入的图片转换为16进制字符串
// string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
// //生成rtf中图片字符串
// mypict.AppendLine();
// mypict.Append(@"{\pict");
// mypict.Append(@"\jpegblip");
// mypict.Append(@"\picscalex100");
// mypict.Append(@"\picscaley100");
// mypict.Append(@"\picwgoal" + imgAth.Width * 15);
// mypict.Append(@"\pichgoal" + imgAth.Height * 15);
// mypict.Append(imgHexStringImgAth + "}");
// mypict.AppendLine();
// str = str.Replace(wkKey, mypict.ToString()); ;
// }
// //审核人的手写签名. 2020.11.28 by zhoupeng
// wkKey = "";
// if (str.Contains(wkKey) == true)
// {
// wkVal = this.GetCode(this.GetValueCheckWorkByKey(row, "WriteDB"));
// //定义rtf中图片字符串.
// StringBuilder mypict = new StringBuilder();
// //将要插入的图片转换为16进制字符串
// byte[] buffer = Convert.FromBase64String(wkVal);
// StringBuilder imgs = new StringBuilder();
// for (int i = 0; i < buffer.Length; i++)
// {
// if ((i % 32) == 0)
// {
// imgs.AppendLine();
// }
// //else if ((i % 8) == 0)
// //{
// // imgs.Append(" ");
// //}
// byte num2 = buffer[i];
// int num3 = (num2 & 240) >> 4;
// int num4 = num2 & 15;
// imgs.Append("0123456789abcdef"[num3]);
// imgs.Append("0123456789abcdef"[num4]);
// }
// //生成rtf中图片字符串
// mypict.AppendLine();
// mypict.Append(@"{\pict");
// mypict.Append(@"\jpegblip");
// mypict.Append(@"\picscalex100");
// mypict.Append(@"\picscaley100");
// mypict.Append(@"\picwgoal" + 45 * 15);
// mypict.Append(@"\pichgoal" + 40 * 15);
// mypict.Append(imgs.ToString() + "}");
// mypict.AppendLine();
// str = str.Replace(wkKey, mypict.ToString()); ;
// }
// }
//}
#endregion
#region 多附件
foreach (string athObjEnsName in this.EnsDataAths.Keys)
{
string athName = "Ath." + athObjEnsName;
string athFilesName = "";
if (str.IndexOf(athName) == -1)
continue;
FrmAttachmentDBs athDbs = this.EnsDataAths[athObjEnsName] as FrmAttachmentDBs;
if (athDbs == null)
continue;
if (str.IndexOf("Ath." + athObjEnsName + ".ImgAth") != -1)
{
string wkKey = "";
string athImgs = "";
// 定义rtf中图片字符串
StringBuilder mypict = new StringBuilder();
System.Drawing.Image imgAth;
foreach (FrmAttachmentDB athDb in athDbs)
{
if (athFilesName.Length > 0)
{
athFilesName += " , ";
}
int i = athDb.FileFullName.LastIndexOf("UploadFile/");
athDb.FileFullName = athDb.FileFullName.Substring(i);
//String filePath = SystemConfig.PathOfDataUser + "UploadFile/" + athDb.FrmID + "/" + this.HisGEEntity.PKVal + "/" + athDb.FileName;
String filePath = SystemConfig.PathOfDataUser + athDb.FileFullName;
imgAth = System.Drawing.Image.FromFile(filePath);
System.Drawing.Image bmp = new System.Drawing.Bitmap(imgAth);
//imgAth.Dispose();
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(bmp, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + bmp.Width * 3);
mypict.Append(@"\pichgoal" + bmp.Height * 3);
mypict.Append(imgHexStringImgAth + "}");
mypict.Append("\n");
athImgs = mypict.ToString();
}
str = str.Replace(wkKey, athImgs);
}
else
{
foreach (FrmAttachmentDB athDb in athDbs)
{
if (athFilesName.Length > 0)
athFilesName += " , ";
athFilesName += athDb.FileName;
}
}
str = str.Replace("<" + athName + ">", this.GetCode(athFilesName));
}
#endregion
#region 要替换的字段
//if (replaceVals != null && replaceVals.Contains("@"))
//{
// string[] vals = replaceVals.Split('@');
// foreach (string val in vals)
// {
// if (val == null || val == "")
// continue;
// if (val.Contains("=") == false)
// continue;
// string myRep = val.Clone() as string;
// myRep = myRep.Trim();
// myRep = myRep.Replace("null", "");
// string[] myvals = myRep.Split('=');
// str = str.Replace("<" + myvals[0] + ">", "<" + myvals[1] + ">");
// }
//}
#endregion
StreamWriter wr = new StreamWriter(this.TempFilePath, false, Encoding.ASCII);
str = str.Replace("<", "");
str = str.Replace(">", "");
wr.Write(str);
wr.Close();
}
catch (Exception ex)
{
string msg = "";
if (SystemConfig.isDebug)
{ // 异常可能与单据的配置有关系。
try
{
this.CyclostyleFilePath = SystemConfig.PathOfDataUser + "CyclostyleFile/" + templateRtfFile;
str = Cache.GetBillStr(templateRtfFile, false);
msg = "@已经成功的执行修复线 RepairLineV2,您重新发送一次或者,退后重新在发送一次,是否可以解决此问题";
}
catch (Exception ex1)
{
msg = "执行修复线失败. RepairLineV2 " + ex1.Message;
}
}
throw new Exception("生成文档失败:单据名称[" + this.CyclostyleFilePath + "] 异常信息:" + ex.Message + " @自动修复单据信息:" + msg);
}
}
#endregion
#region 生成单据
#region 生成单据
///
/// 生成单据根据
///
/// 模板文件
///
///
///
public void MakeDocByDataSet(string templeteFile, string saveToPath,
string saveToFileName, DataTable mainDT, DataSet dtlsDS)
{
string valMain = DBAccess.RunSQLReturnString("SELECT NO FROM SYS_MapData");
this.HisGEEntity = new GEEntity(valMain);
this.HisGEEntity.Row.LoadDataTable(mainDT, mainDT.Rows[0]);
this.AddEn(this.HisGEEntity); //增加一个主表。
if (dtlsDS != null)
{
foreach (DataTable dt in dtlsDS.Tables)
{
string dtlID = DBAccess.RunSQLReturnString("SELECT NO FROM SYS_MapDtl ");
BP.Sys.GEDtls dtls = new BP.Sys.GEDtls(dtlID);
foreach (DataRow dr in dt.Rows)
{
BP.Sys.GEDtl dtl = dtls.GetNewEntity as BP.Sys.GEDtl;
dtl.Row.LoadDataTable(dt, dr);
dtls.AddEntity(dtl);
}
this.AddDtlEns(dtls); //增加一个明晰。
}
}
this.MakeDoc(templeteFile, saveToPath, saveToFileName);
}
#endregion
#endregion
private string WorkCheckReplace(string str, DataRow row, int nodeID)
{
string wkKey = "";
string wkVal;
if (row != null && !"null".Equals(this.GetValueCheckWorkByKey(row, "Msg")))
{
wkVal = this.GetValueCheckWorkByKey(row, "Msg");
}
else
{
wkVal = "";
}
str = str.Replace(wkKey, wkVal);
wkKey = "";
if (row != null)
{
wkVal = this.GetValueCheckWorkByKey(row, "EmpFrom");
}
else
{
wkVal = "";
}
str = str.Replace(wkKey, wkVal);
wkKey = "";
if (row != null)
{
wkVal = this.GetValueCheckWorkByKey(row, "EmpFromT");
}
else
{
wkVal = "";
}
str = str.Replace(wkKey, wkVal);
wkKey = "";
if (row != null)
{
wkVal = this.GetValueCheckWorkByKey(row, "RDT");
}
else
{
wkVal = "";
}
str = str.Replace(wkKey, wkVal);
wkKey = "";
wkKey = "";
if (str.IndexOf(wkKey) != -1)
{
if (row != null)
{
wkVal = this.GetCode(this.GetValueCheckWorkByKey(row, "EmpFrom"));
}
else
{
wkVal = "";
}
String filePath = SystemConfig.PathOfDataUser + "/Siganture/" + wkVal + ".jpg";
// 定义rtf中图片字符串
StringBuilder mypict = new StringBuilder();
// 获取要插入的图片
// System.Drawing.Image img =
// System.Drawing.Image.FromFile(path);
//获取要插入的图片
System.Drawing.Image imgAth = System.Drawing.Image.FromFile(filePath);
//将要插入的图片转换为16进制字符串
string imgHexStringImgAth = GetImgHexString(imgAth, System.Drawing.Imaging.ImageFormat.Jpeg);
//生成rtf中图片字符串
mypict.AppendLine();
mypict.Append(@"{\pict");
mypict.Append(@"\jpegblip");
mypict.Append(@"\picscalex100");
mypict.Append(@"\picscaley100");
mypict.Append(@"\picwgoal" + imgAth.Width * 15);
mypict.Append(@"\pichgoal" + imgAth.Height * 15);
mypict.Append(imgHexStringImgAth + "}");
mypict.Append("\n");
str = str.Replace(wkKey, mypict.ToString());
}
return str;
}
#region 方法
///
/// RTFEngine
///
public RTFEngine()
{
this._EnsDataDtls = null;
this._HisEns = null;
}
public RTFEngine(string rtfFile)
{
this._EnsDataDtls = null;
this._HisEns = null;
this._rtfStr = Cache.GetBillStr(rtfFile, false).Substring(0);
}
///
/// 传入的是单个实体
///
///
public RTFEngine(Entity en)
{
this._EnsDataDtls = null;
this._HisEns = null;
this.HisGEEntity = en;
}
#endregion
}
}