VS2010
using iTextSharp.tool.xml;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml.pipeline;
using HtmlTable2pdf;
string fileName = string.Empty;
dlg.FileName = "创建Pdf";
dlg.DefaultExt = ".pdf";
dlg.Filter = "Text documents (.pdf)|*.pdf";
string strtb = "";
strtb = @"<style>td {border-bottom-width: 1px; border-bottom-style: solid;border-bottom-color: gray; border-left-width: 1px; border-left-style: solid;border-left-color: gray;} table {border-right-style: solid;border-right-color: gray;border-right-width: 1px;border-top-style: solid;border-top-color: gray;border-top-width: 1px;}</style>
<table cellpadding='3' cellspacing='0' style='text-align:left;font-size:10.5pt;font-family: 宋体' width='300' section='页眉'><tr align='left' valign='top'><td style='border-left-width: 1px; border-left-style: solid; border-left-color: gray; background-color:#CCCC00' bgcolor='#C0C0C0' width='220'><img border='0' src='' width='60' height='60'/>userObject.companyName</td>
<td width='220' class='td2'>这是页眉</td><td section='页码' style='float:left' width='390'>第X页</td></tr></table>
<table pageSize='1200,500' id='table2' pageDirection='verticle' pageMargin='10,20,160,10' width='900' cellspacing='0' cellpadding='0'>
<section id='表头'>
<tr><td style='border:0;'>order.customerName</td><td>'时间:'+(order.billDate).ToString('yyyy年MM月dd日')</td><td>'单号:'+order.number</td><td></td><td></td><td>'时间:'+userObject.getRMBs('123.45')</td></tr>
</section>
<section id='页头'>
<tr><td class='td2'>页头:类别</td><td>价格</td><td>数量</td><td>金额</td><td>仓库</td><td>单位</td></tr>
</section>
<section id='明细' numPerPage='3'><tr style='code=[userObject.rowNum % 2 == 1? '' : 'background-color:#CCCC00' ]'><td>orderDetail.name+' '+orderDetail.spec</td><td>orderDetail.price</td><td>userObject.getRMB(2345.789866)</td><td>(orderDetail.quantity*orderDetail.price).ToString('F2')</td><td style='code=[ orderDetail.unitName == '吨'? '' : 'background-color:#00FF66' ]'>orderDetail.unitName</td><td>'金额 :'+userObject.getRMB(orderDetail.amount)</td></tr></section>
<section id='页尾'>
<tr><td colspan='3'>这是页尾</td><td>(#2016-02-05#).ToString('yyyy年MM月dd日')</td><td></td><td>userObject.companyName</td></tr>
<tr><td>小计</td><td colspan='2'>'吨数量:'+(orderDetail.count(orderDetail.iif(unitName ='吨',1,0))+orderDetail.count(billID)+orderDetail.sum(amount))</td><td>'吨'+(orderDetail.sum(amount)).ToString('F2')</td><td>orderDetail.unitName</td><td>background-color</td></tr>
</section>
<section id='表尾'>
<tr><td colspan='3'>这是表尾</td><td>userObject.DateTimeToString('2016-02-05','yyyy年MM月dd日')</td><td>userObject.ToLower('AbcDG')</td><td></td></tr>
<tr><td>总计</td><td id='td_money'></td><td>'吨数量 :'+(orderDetail.count(orderDetail.iif(unitName ='吨',1,0))+orderDetail.count(billID)+orderDetail.sum(amount))</td><td></td><td></td><td>'金额 :'+userObject.getRMB(orderDetail.sum(amount))</td></tr>
</section>
</table>
<table cellpadding='3' cellspacing='0' style='text-align:left;font-size:10.5pt;font-family: 宋体' width='300' section='页脚'>
<tr align='left' valign='top'><td style='border-left-width: 1px; border-left-style: solid; border-left-color: gray' bgcolor='#C0C0C0' width='220'>userObject.companyName</td>
<td width='220'></td><td section='页码' style='border-bottom-width: 1px; border-bottom-style: solid;background-color:#00ff00; border-bottom-color: gray; float:left' width='390'>第X页 共Y页</td></tr></table>";
//明细td不支持嵌套
//只明细td可以code=[]
DataTable _dtOrder = GenerateOrder();//DBUtility.DbHelperSQL.GetDataSet(sql);
DataTable _dtOrderDetail = GenerateOrderDetail();// DBUtility.DbHelperSQL.GetDataSet(String.Format("Select * From V_saledetails where billid='{0}'", _dtOrder.Rows[0]["id"].ToString()));
//if (_dtOrderDetail.Columns["quantity"].DataType == typeof(string))
{
DataTable eval = new DataTable();
}
//FromattedHtmlParser fmp = new FromattedHtmlParser(strtb);
Html2pdfWorker fmp = new Html2pdfWorker();
fmp.HtmlTable = strtb;
fmp.AddTable(_dtOrder, "Order");
fmp.AddTable(_dtOrderDetail, "orderDetail");
fmp.DetailTableName = "orderdetail";
//明细表名称
自定义变量
fmp.userObject.companyName = "公司A";
自定义函数
fmp.userObject.ToLower = new Func<string, string>(ToLower);
fmp.Prase();
byte[] buff = fmp.SaveToPdf();
Response.ContentType = "application/pdf";
Response.BinaryWrite(buff);
}
public string ToLower(string str)
{
return str.ToLower();
}
private DataTable GenerateOrder()
{
//DataTable dt = new DataTable("Order");
DataTable dt = new DataTable();
dt.Columns.Add("billID", typeof(int));
dt.Columns.Add("customerName");
dt.Columns.Add("billDate", typeof(DateTime));
dt.Columns.Add("number");
dt.Columns.Add("flag");
DataRow row = null;
String[] types = new string[] { "用户1", "用户2", "用户3", "用户4", "用户5" };
DateTime getDate = DateTime.Now;
DateTime backDate = DateTime.Now;
for (int i = 0; i < 10; i++)
{
row = dt.NewRow();
row["billID"] = i + 1;
row["customerName"] = types[(i * 3) % 5];
row["billDate"] = getDate.AddDays(i);//.ToString("yyyy-MM-dd");
row["number"] = "XS20160616";
row["flag"] = true;
dt.Rows.Add(row);
}
return dt;
}
private DataTable GenerateOrderDetail()
{
double price, quantity;
//DataTable dt = new DataTable("orderDetail");
DataTable dt = new DataTable();
Random random = new Random();
String[] types = new string[] { "吨", "公斤" };
dt.Columns.Add("billID", typeof(int));
dt.Columns.Add("quantity", typeof(int));
dt.Columns.Add("name");
dt.Columns.Add("spec");
dt.Columns.Add("unitName");
dt.Columns.Add("storageName");
dt.Columns.Add("price", typeof(double));
dt.Columns.Add("amount", typeof(double));
dt.Columns.Add("taxRate", typeof(int));
DataRow row = null;
for (int i = 0; i < 5; i++)
{
row = dt.NewRow();
row["billID"] = random.Next(10);
row["unitName"] = types[(i * 3) % 2];
row["name"] = "品名A";
row["spec"] = "规格A";
row["storageName"] = "仓库A";
price = random.NextDouble() * 120;
quantity = random.Next(20, 30);
row["quantity"] = quantity;
row["price"] = price;
row["amount"] = price * quantity;
row["taxRate"] = 17;
dt.Rows.Add(row);
}
return dt;
}
下载地址:http://218.95.37.10:8085/Html2pdf.rar
web生成pdf后的直接打印,隐藏iframe
http://blog.csdn.net/luan729/article/details/51916386
如需要定制HtmlTable2pdf.dll请Q729513406