0
点赞
收藏
分享

微信扫一扫

C#实现打印(反射)

前端:

function printTask(obj) {
var rowData = $("#tb").DataTable().row($(obj).parents('tr')[0]).data();
var url = "/Material/PrintContract";
var inputs = '<input type="hidden" name="conid" value="' + rowData.WengvNj + '" />';
$('<form action="' + url + '" method="post" target="_blank">' + inputs + '</form>').appendTo('body').submit().remove();
}

  后台:

public FileResult PrintContract(string conid)
{
MemoryStream ms = new FileHelper().PrintContractNew(mesContract,
detailsEntity,
pnEntity.FirstOrDefault(),
cuInfo,
filiale,
cuInuser,
sysUser,
dtReturn);
return File(ms, "application/pdf");
}

  

public MemoryStream PrintContractNew(MesContract mesContract,
IList<MesContractDetails> mesContractDetails,
MesPn pnEntity,
CuInfo cuInfo,
DataFiliale filiale,
IList<CuInuser> cuInusers,
SysUser sysUser,
DataTable dtReturn)
{
string filePath = "";

//根据合同类型需要走两个分支,采购根据供应商调用不同的模板
string contractType = mesContract.MesType;

if (contractType == "采购")
{
string supplierName = mesContract.MesCuid;
if (supplierName == "SUP501") //商飞公司
filePath = HttpContext.Current.Server.MapPath("~/Files/Modal/ShanFeiProcurementContract.docx");
else //采购的其他公司
filePath = HttpContext.Current.Server.MapPath("~/Files/Modal/ProcurementContract.docx");
}
else //送修和索赔合同
filePath = HttpContext.Current.Server.MapPath("~/Files/Modal/SendRepair.docx");

//判断文件是否存在
if (!File.Exists(filePath)) return null;

Document document = new Document(filePath);


if (contractType == "采购")
{
if (mesContractDetails != null || mesContractDetails.Count > 0)
{
// TODO 代码瞎写,采购中每项都来自,自己的选项中,
foreach (var item in mesContractDetails)
item.MesCurrency = mesContract.MesCurrency;

PrintPurchse(document, mesContractDetails);

//TODO 给税率赋值,瞎写,这个税率等于总税率
mesContract.WengvJdjpjxrq = mesContractDetails[0].WengvZtpbBlfr;
}
}
else
PrintUnPurchse(document, mesContractDetails, dtReturn);

string emergencyLevel = GetSortedDictionaryValue(mesContract.MesEmer, GetEmergencyLevelType());//获取紧急程度
mesContract.WengvJslz = emergencyLevel;

string tranSportType = GetSortedDictionaryValue(mesContract.MesTransport, GetTranSportType());//运输方式
mesContract.WengvYxhvbzzdg = tranSportType;

string payName = GetByEnglisConverToChine(dtPay, mesContract.MesPaymentmet, "BM_CODE", "BM_ABBR");//付款方式
mesContract.WengvUgfunxeyrh = payName;

string currencyName = GetByEnglisConverToChine(dtCurrency, mesContract.MesCurrency, "RMB_CODE", "RMB_CNAME"); //币种
mesContract.WengvHayznxnk = currencyName;

string moneyCapital = ConvertToChinese(mesContract.MesSum.ToString());//小写转大写
mesContract.MesMoneyCapital = moneyCapital;


ReKey(document.Range, mesContract); //合同信息

ReKey(document.Range, cuInfo);//客户公司信息
ReKey(document.Range, filiale);//打印甲方公司

CuInuser cuInuser = cuInusers.FirstOrDefault();
if (cuInuser == null)
cuInuser = new CuInuser();
ReKey(document.Range, cuInuser);//客户公司的人员信息

if (sysUser == null)
sysUser = new SysUser();

ReKey(document.Range, sysUser);//用户信息

return GetMeoryStreamByFileStream(filePath, document);
}

  

private static void ReKey(Range range, object model)
{
if (model == null) return;
Type t = model.GetType();
PropertyInfo[] pi = t.GetProperties();
foreach (PropertyInfo p in pi)
{
var v = p.GetValue(model, null);
string va = "";
if (v != null)
{
if (v.GetType() == typeof(DateTime) || v.GetType() == typeof(Nullable<DateTime>))
{
va = DateTime.Parse(v.ToString()).ToString("yyyy-MM-dd");
}
else
{
va = v.ToString();
}
}
FindReplaceOptions op = new FindReplaceOptions();
op.FindWholeWordsOnly = false;

range.Replace("$" + p.Name + "$", va, op);
//range.Replace("$" + p.Name + "$", va);
}
}

  

private static MemoryStream GetMeoryStreamByFileStream(string filePath, Document doc)
{
if (!File.Exists(filePath)) return null;
using (FileStream stream = File.OpenRead(filePath))
{
if (stream == null) return null;
MemoryStream ms = new MemoryStream();
doc.Save(ms, SaveFormat.Pdf);
ms.Flush();
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
}

  生成table:

private Table PrintMesContractDetail(Document document, IList<MesContractDetails> mesContractDetails)
{
try
{
Table tb = (Table)document.GetChild(NodeType.Table, 1, true);
int i = 1;
foreach (var item in mesContractDetails)
{
//序号、件号、名称、数量、单位、 状态、不含税单价、含税单价、含税总价、币种、交货期、证书、备注
string[] colunValues = new string[] { //TODO 其他列用不用判断
i.ToString(),//序号
item.MesPno, //件号
item.MesProductname,//名称
item.MesCount, //数量
GetByEnglisConverToChine(dtUnit,item.MesUnit,"BM_CODE","BM_CNAME"),//单位
"NE",//状态
item.MesNottxaprice.ToString(),//不含税单价
item.MesTxaprice.ToString(),//含税单价
item.MesTxaprice.ToString(),//含税单价
GetByEnglisConverToChine(dtCurrency,item.MesCurrency,"RMB_CODE","RMB_CNAME"),//币种
item.MesDeliverydate.ToString(),//交货期
item.MesCertification= item.MesCertification==null?"":item.MesCertification//证书
};
i++;
var tr = CreateRow(12, colunValues, document);
tb.Rows.Add(tr);
}
return tb;
}
catch (Exception ex)
{
LogWriter.Write(LOG_CATEGORY.WIN_UI, LOG_LEVEL.ERROR, "PrintMesContractDetail:" + ex.ToString());
return null;
}
}

  生成table:

private static Row CreateRow(int columnCount, string[] columnValues, Document doc)
{
Row r2 = new Row(doc);
for (int i = 0; i < columnCount; i++)
{
if (columnValues.Length > i)
{
var cell = CreateCell(columnValues[i], doc);
r2.Cells.Add(cell);
}
else
{
var cell = CreateCell("", doc);
r2.Cells.Add(cell);
}
}
return r2;
}

  把不需要的代码去掉就行.



举报

相关推荐

c# 反射

C# 反射

C#反射

C#反射机制

C#基础--反射

c#反射用法

C#简单使用反射

c#调试信息打印

0 条评论