|
|
using grsvr6Lib; using Newtonsoft.Json.Linq; using NFine.Application.ProductManage; using NFine.Code; using NFine.Data.Extensions; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Web; using System.Xml;
namespace NFine.Web { /// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler {
public void ProcessRequest(HttpContext context) {
//DiscountRateApp discountrateApp = new DiscountRateApp();
string keyValue = context.Request.Params["keyValue"]; //GridppReportServer Report = new GridppReportServer();
//string TypeText = context.Request.QueryString["type"];
//var data = discountrateApp.GetForm(keyValue);
////首先载入报表模板文件
//string ReportPathFile = context.Server.MapPath("/Grf/1a.grf"); //根据WEB服务器根目录寻址
//bool Success = Report.LoadFromFile(ReportPathFile);
////载入报表数据,为约定格式的 XML 或 JSON 文本数据
//string reportDataText = data.ToJson();
//Report.LoadDataFromXML(reportDataText);
////生成报表文档格式数据
//IGRBinaryObject GRDDataObject = Report.GenerateDocumentData();
//bool IsGRP = (TypeText == "grp");
//string FileName = IsGRP ? "YourFileName.grp" : "YourFileName.grd";
////将生成的数据响应给客户端
//ServerUtility.ResponseBinary(context, GRDDataObject, FileName, "application/grd", "attachment");
string FileValue, PrintValue, ParaName, ParaValue;
FileValue = FileToString(context,"/Frp/lot.fr3"); ParaName = "ShopName`~PrintDepositAdd`~PrintPaperNo`~Title"; //`~为各参数的分隔符
ParaValue = "测试酒楼" + "`~说明:本单据为贵客押金收取凭证,盖章有效。退房时请出示,遗失者自负,请妥善保存。退房时间为12:00时,延时退房18:00时以前按半天房费收取,18:00时以后算全天房价。押金单有效期为一个月,过期作废。 贵重物品请交前台寄存,未寄存丢失自负。 谢谢!" + "`~身份证:4325011980639512" + "`~押金单";
DataTable dt = SqlHelper.GetDataTableBySql("SELECT * FROM dbo.ICSDiscountRate where F_Id='" + keyValue + "'"); PrintValue = TableToXml(dt); string ScriptStr; string PictureStr = ""; ScriptStr = "<script language='javascript'>window.onload = function() { try { var ObjPrintMange = new ActiveXObject('WebPrint.WebPrintUnit'); } catch(e) { if( confirm('打印控件未安装,现在下载吗?') ) { window.location='../Frp/PrintActivex.exe'; } return; } var OldVersion=ObjPrintMange.Version; NewVerion='5.0(2011-08-01)'; if(OldVersion < NewVerion) { ObjPrintMange = null; alert('打印控件需升级。请先进行下载,下载后关闭IE,然后安装升级版。'); window.location='../Frp/PrintActivex.exe'; return; } " + " ObjPrintMange.CheckReg('苏州智合诚信息科技有限公司', '1B98963EDF11C830F8918C3E0BE28ED8'); " //注册码
//+ "ObjPrintMange.MasterOptions(1, 'TransNO', 0 );" //主从关系,参数:主数据集序号,关联字段名,字段是否为数值型
// + PictureStr
//+ "ObjPrintMange.AddPicturePrint('PicTitle', 0, 'Title.bmp','1', 1 );" //增加单个图片打印,参数:报表中图片对象名,数据表的字段(为0),图片文件名,数据集序号,是否清除旧数据(第1次调用时为1,其它时候则为0)
//+ "ObjPrintMange.AddPicturePrint('PicMaterial', 0, '2013-01-18-272b936d03-7208-4452-9d01-1197fbb63bc3.jpg','1', 1 );" //增加数据表中的图片打印,参数:报表中图片对象名,数据表的字段(为1),图片文件名所对应的字段名,数据集序号,是否清除旧数据(第1次调用时为1,其它时候则为0)
//+ "ObjPrintMange.AddPicturePrint('Picture1', 1, 'EATTRIBUTE1','1', 1 );"
+ "ObjPrintMange.ShowReport('" + FileValue + "' , '" + ParaName + "', '" + ParaValue + "', '" //+ PrintValue + "', '"
+ PrintValue + "', '','', '', '', '');" + "ObjPrintMange = null; } </script>"; ScriptStr = ScriptStr.Replace(System.Environment.NewLine, string.Empty);
context.Response.Write(ScriptStr); }
public bool IsReusable { get { return false; } }
private string FileToString(HttpContext context, string FileName) { try { string[] ByteStr = new string[256]; for (int i = 0; i < 256; i++) { if (i == 0) ByteStr[i] = "00"; else if (i < 16) ByteStr[i] = "0" + Convert.ToString(i, 16).ToUpper(); else ByteStr[i] = Convert.ToString(i, 16).ToUpper(); }
if (System.IO.File.Exists(context.Server.MapPath(FileName)) == false) return "";
byte[] FileValue = System.IO.File.ReadAllBytes(context.Server.MapPath(FileName)); StringBuilder FileStr = new StringBuilder();
for (int FileRecn = 0; FileRecn < FileValue.Length; FileRecn++) { FileStr.Append(ByteStr[FileValue[FileRecn]]); } FileValue = null;
return FileStr.ToString(); } catch (Exception ex) { throw new Exception(ex.Message); } }
private string TableToXml(DataTable DtTable) { StringBuilder PrintStr = new StringBuilder(); XmlWriterSettings setting = new XmlWriterSettings(); setting.Indent = true; setting.OmitXmlDeclaration = true;
using (XmlWriter PrintXml = XmlWriter.Create(PrintStr, setting)) { PrintXml.WriteStartElement("xml"); PrintXml.WriteAttributeString("xmlns", "s", null, "u"); PrintXml.WriteAttributeString("xmlns", "dt", null, "u"); PrintXml.WriteAttributeString("xmlns", "rs", null, "u"); PrintXml.WriteAttributeString("xmlns", "z", null, "#R"); PrintXml.WriteStartElement("s", "Schema", null); PrintXml.WriteAttributeString("id", "RowsetSchema"); PrintXml.WriteStartElement("s", "ElementType", null); PrintXml.WriteAttributeString("name", "row"); PrintXml.WriteAttributeString("content", "eltOnly"); PrintXml.WriteAttributeString("rs", "updatable", null, "true");
foreach (DataColumn Column in DtTable.Columns) { if (Column.DataType.Name == "Int64" || Column.DataType.Name == "Boolean" || Column.DataType.Name == "String" || Column.DataType.Name == "DateTime" || Column.DataType.Name == "Decimal" || Column.DataType.Name == "Double" || Column.DataType.Name == "Int32" || Column.DataType.Name == "Single" || Column.DataType.Name == "Int16" || Column.DataType.Name == "Byte") { PrintXml.WriteStartElement("s", "AttributeType", null); PrintXml.WriteAttributeString("name", Column.ColumnName);
PrintXml.WriteAttributeString("rs", "number", null, (Column.Ordinal + 1).ToString()); PrintXml.WriteAttributeString("rs", "nullable", null, "true"); PrintXml.WriteAttributeString("rs", "maydefer", null, "true"); PrintXml.WriteAttributeString("rs", "writeunknown", null, "true"); PrintXml.WriteAttributeString("rs", "basetable", null, DtTable.TableName); PrintXml.WriteAttributeString("rs", "basecolumn", null, Column.ColumnName);
if (Column.DataType.Name == "Int64") { //bigint
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "i8"); PrintXml.WriteAttributeString("dt", "maxLength", null, "8"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Boolean") { //bit
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "boolean"); PrintXml.WriteAttributeString("dt", "maxLength", null, "2"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "String") { //char
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "string"); PrintXml.WriteAttributeString("dt", "maxLength", null, Column.MaxLength.ToString()); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "DateTime") { //dateTime
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "dateTime"); PrintXml.WriteAttributeString("dt", "maxLength", null, "16"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Decimal") { //Decimal
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "number"); PrintXml.WriteAttributeString("dt", "maxLength", null, "19"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Double") { //Float
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "float"); PrintXml.WriteAttributeString("dt", "maxLength", null, "8"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Int32") { //int
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "int"); PrintXml.WriteAttributeString("dt", "maxLength", null, "4"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Single") { //Real
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "r4"); PrintXml.WriteAttributeString("dt", "maxLength", null, "4"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Int16") { //smallint
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "i2"); PrintXml.WriteAttributeString("dt", "maxLength", null, "2"); PrintXml.WriteEndElement(); } else if (Column.DataType.Name == "Byte") { //tinyint
PrintXml.WriteStartElement("s", "datatype", null); PrintXml.WriteAttributeString("dt", "type", null, "ui1"); PrintXml.WriteAttributeString("dt", "maxLength", null, "1"); PrintXml.WriteEndElement(); } PrintXml.WriteEndElement(); } } PrintXml.WriteEndElement(); PrintXml.WriteEndElement();
PrintXml.WriteStartElement("rs", "data", null); foreach (DataRow Row in DtTable.Rows) { PrintXml.WriteStartElement("z", "row", null); foreach (DataColumn Column in DtTable.Columns) { if (Row.IsNull(Column) == true) continue;
if (Column.DataType.Name == "Int64" || Column.DataType.Name == "Boolean" || Column.DataType.Name == "String" || Column.DataType.Name == "DateTime" || Column.DataType.Name == "Decimal" || Column.DataType.Name == "Double" || Column.DataType.Name == "Int32" || Column.DataType.Name == "Single" || Column.DataType.Name == "Int16" || Column.DataType.Name == "Byte") { if (Column.DataType.Name == "DateTime") { DateTime TmpDateTime = System.Convert.ToDateTime(Row[Column]); string TmpStr = TmpDateTime.ToString("yyyy-MM-dd") + "T" + TmpDateTime.ToString("HH:mm:ss"); PrintXml.WriteAttributeString(Column.ColumnName, TmpStr); } else { PrintXml.WriteAttributeString(Column.ColumnName, Row[Column].ToString()); } } } PrintXml.WriteEndElement(); } PrintXml.WriteEndElement();
PrintXml.WriteEndElement(); }
return PrintStr.ToString(); }
}
}
|