在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C#调用Fastreport报告打印FTP

C#调用Fastreport报告打印FTP

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:1.83M
  • 下载次数:13
  • 浏览次数:178
  • 发布时间:2024-09-10
  • 实例类别:C#语言基础
  • 发 布 人:linxi_98
  • 文件格式:.7z
  • 所需积分:2
 相关标签: FastReport Fast re 调用 fa

实例介绍

【实例简介】

C#调用Fastreport,实现服务器FTP下载模版打印,本地文件打印

【实例截图】

from clipboard

from clipboard

【核心代码】

/// <summary>
    /// XML操作类
    /// </summary>
    internal class ToBCBXmlHepler
    {
        /// <summary>
        /// 把数据集的内容转化为报表控件所需的XML字符串
        /// </summary>
        /// <param name="dtTable"></param>
        /// <returns></returns>
        public static string TableToXml(DataTable dtTable)
        {
            StringBuilder printStr = new StringBuilder();
            XmlWriterSettings setting = new XmlWriterSettings
            {
                Indent = true,
                OmitXmlDeclaration = true
            };
            using (XmlWriter printXml = XmlWriter.Create(printStr, setting))
            {//XML头
                printXml.WriteStartElement("xml");
                printXml.WriteAttributeString("version", "1.0");
                printXml.WriteAttributeString("standalone", "yes");
                printXml.WriteStartElement("DATAPACKET");
                printXml.WriteStartElement("METADATA");
                printXml.WriteStartElement("FIELDS");
                //数据字段及数据类型
                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"
                        || column.DataType.Name == "Byte[]")
                    {
                        printXml.WriteStartElement("FIELD");
                        printXml.WriteAttributeString("attrname", column.ColumnName);
                        //字段的数据类型
                        if (column.DataType.Name == "Int64")
                        {  //bigint
                            printXml.WriteAttributeString("fieldtype", "i8");
                            printXml.WriteAttributeString("WIDTH", "8");
                        }
                        else if (column.DataType.Name == "Boolean")
                        {  //bit
                            printXml.WriteAttributeString("fieldtype", "boolean");
                            printXml.WriteAttributeString("WIDTH", "2");
                        }
                        else if (column.DataType.Name == "String")
                        {  //char
                            //如果是Select串这种图片加载方式,传过来的CarImage字段值是字符串,而OCX读图片时的数据类型为"bin.hex"
                            /*
                            if (Column.ColumnName.Contains("CarImage"))
                            {
                                PrintXml.WriteAttributeString("fieldtype", "bin.hex");
                                PrintXml.WriteAttributeString("SUBTYPE", "Binary");
                            }
                            else
                             */
                            {
                                printXml.WriteAttributeString("fieldtype", "string");
                                var maxLength = column.MaxLength;
                                if (maxLength < 0) maxLength = 300;//如果长度为-1传到OCX会出错
                                printXml.WriteAttributeString("WIDTH", maxLength.ToString());
                            }
                        }
                        else if (column.DataType.Name == "DateTime")
                        {  //dateTime
                            printXml.WriteAttributeString("fieldtype", "dateTime");
                            printXml.WriteAttributeString("WIDTH", "16");
                        }
                        else if (column.DataType.Name == "Decimal")
                        {  //Decimal 
                            //PrintXml.WriteAttributeString("fieldtype", "number");
                            //PrintXml.WriteAttributeString("WIDTH", "19");
                            printXml.WriteAttributeString("fieldtype", "fixed");
                            printXml.WriteAttributeString("WIDTH", "18");
                        }
                        else if (column.DataType.Name == "Double")
                        {  //Float
                            //PrintXml.WriteAttributeString("fieldtype", "float");
                            //PrintXml.WriteAttributeString("WIDTH", "8");
                            printXml.WriteAttributeString("fieldtype", "r8");
                            printXml.WriteAttributeString("WIDTH", "8");
                        }
                        else if (column.DataType.Name == "Int32")
                        {  //int
                            printXml.WriteAttributeString("fieldtype", "int");
                            printXml.WriteAttributeString("WIDTH", "4");
                        }
                        else if (column.DataType.Name == "Single")
                        {  //Real r8
                            //PrintXml.WriteAttributeString("fieldtype", "r4");
                            //PrintXml.WriteAttributeString("WIDTH", "4");
                            printXml.WriteAttributeString("fieldtype", "r8");
                            printXml.WriteAttributeString("WIDTH", "8");
                        }
                        else if (column.DataType.Name == "Int16")
                        {  //smallint
                            printXml.WriteAttributeString("fieldtype", "i2");
                            printXml.WriteAttributeString("WIDTH", "2");
                        }
                        else if (column.DataType.Name == "Byte")
                        {  //tinyint
                            //PrintXml.WriteAttributeString("fieldtype", "ui1");
                            //PrintXml.WriteAttributeString("WIDTH", "1");
                            printXml.WriteAttributeString("fieldtype", "i2");
                            //PrintXml.WriteAttributeString("WIDTH", "1");
                        }
                        else if (column.DataType.Name == "Byte[]")//OCX读图片时用的数据类型
                        {  //tinyint
                            printXml.WriteAttributeString("fieldtype", "bin.hex");
                            printXml.WriteAttributeString("SUBTYPE", "Binary");
                        }
                        printXml.WriteEndElement();
                    }
                }
                printXml.WriteEndElement();
                printXml.WriteEndElement();

                printXml.WriteStartElement("ROWDATA");
                foreach (DataRow row in dtTable.Rows)
                {
                    printXml.WriteStartElement("ROW");
                    foreach (DataColumn column in dtTable.Columns)
                    {
                        if (row.IsNull(column))
                            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"
                            || column.DataType.Name == "Byte[]")
                        {
                            if (column.DataType.Name == "DateTime")
                            {
                                DateTime tmpDateTime = Convert.ToDateTime(row[column]);
                                string tmpStr = tmpDateTime.ToString("yyyy-MM-dd") "T" tmpDateTime.ToString("HH:mm:ss");
                                printXml.WriteAttributeString(column.ColumnName, tmpStr);
                            }
                            else if (column.DataType.Name == "Byte[]")
                            {
                                printXml.WriteAttributeString(column.ColumnName, Convert.ToBase64String((byte[])row[column]));
                            }
                            else
                            {
                                printXml.WriteAttributeString(column.ColumnName, row[column].ToString());
                            }
                        }
                    }
                    printXml.WriteEndElement();
                }
                printXml.WriteEndElement();

                printXml.WriteEndElement();
            }
            //将生成的XML串第一行的首尾加上?,是为了HYPrint.ocx中XML导入DataSet时用到的格式.
            string str = printStr.ToString();
            str = str.Replace("<xml version=\"1.0\" standalone=\"yes\">", "<?xml version=\"1.0\" standalone=\"yes\"?>");
            return str;
        }
        /*生成的例子
            <?xml version="1.0" standalone="yes"?>
                <DATAPACKET version="2.0">
                <METADATA>
                    <FIELDS>
                    <FIELD attrname="Ope_ODate" fieldtype="dateTime" WIDTH="16" />
                    <FIELD attrname="Ope_InfType" fieldtype="int" WIDTH="4" />
                    <FIELD attrname="Ope_InfClass" fieldtype="int" WIDTH="4" />
                    <FIELD attrname="Ope_EmpId" fieldtype="string" WIDTH="10" />
                    <FIELD attrname="Ope_EmpName" fieldtype="string" WIDTH="8" />
                    <FIELD attrname="Ope_SoftName" fieldtype="string" WIDTH="20" />
                    <FIELD attrname="Ope_Computer" fieldtype="string" WIDTH="20" />
                    <FIELD attrname="Ope_Infomation" fieldtype="string" WIDTH="150" />
                    </FIELDS>
                </METADATA>
                <ROWDATA>
                    <ROW Ope_ODate="2012-02-22T17:09:00" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀B23142车辆收费记录被删除!" />
                    <ROW Ope_ODate="2012-02-23T09:47:07" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="检测流水号:032012021100005的车辆注册数据被删除!" />
                    <ROW Ope_ODate="2012-02-10T15:14:00" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
                    <ROW Ope_ODate="2012-02-28T16:13:15" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="检测流水号:032012021100005的车辆注册数据被删除!" />
                    <ROW Ope_ODate="2011-06-08T11:57:18" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2011060820110608" />
                    <ROW Ope_ODate="2011-07-28T09:56:11" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="检测流水号:012011062700001的车辆注册数据被删除!" />
                    <ROW Ope_ODate="2012-02-14T11:49:29" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀A-IIIIII车辆收费记录被删除!" />
                    <ROW Ope_ODate="2011-12-21T16:31:08" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2001122120111221" />
                    <ROW Ope_ODate="2012-02-10T10:29:12" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.167" Ope_Infomation="备份车辆检测数据,起止日期:2010021020120210" />
                    <ROW Ope_ODate="2011-12-21T16:50:50" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="恢复车辆检测数据:G:\HYAis\HYWebMang\\BackFile\2检测数据20111221163359.mdb" />
                    <ROW Ope_ODate="2011-12-21T16:33:59" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2001122120111221" />
                    <ROW Ope_ODate="2012-03-03T16:48:36" Ope_InfType="1" Ope_InfClass="1" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="档案管理" Ope_Computer="127.0.0.1" Ope_Infomation="删除车辆【冀ASY0001】的车辆信息!" />
                    <ROW Ope_ODate="2012-03-03T16:48:33" Ope_InfType="1" Ope_InfClass="1" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="档案管理" Ope_Computer="127.0.0.1" Ope_Infomation="删除车辆【冀ASY0002】的车辆信息!" />
                    <ROW Ope_ODate="2012-02-10T15:31:04" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.223" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
                    <ROW Ope_ODate="2012-02-10T10:29:25" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.167" Ope_Infomation="备份车辆检测数据,起止日期:2001021020120210" />
                    <ROW Ope_ODate="2012-02-10T15:32:18" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.223" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
                    <ROW Ope_ODate="2011-06-02T17:04:24" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2011060220110602" />
                    <ROW Ope_ODate="2012-02-10T15:31:11" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.223" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
                    <ROW Ope_ODate="2012-02-10T10:28:57" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.167" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
                    <ROW Ope_ODate="2012-02-22T11:14:57" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀B12233车辆收费记录被删除!" />
                    <ROW Ope_ODate="2012-02-28T17:04:05" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀B243322车辆收费记录被删除!" />
                </ROWDATA>
                </DATAPACKET>
            </xml>
         * */

        /// <summary>
        /// 拼写BCB DataSet数据集用XML
        /// </summary>
        /// <param name="det"></param>
        /// <returns></returns>
        public static string GetBcbXml(DataSet det)
        {
            int tablenum = det.Tables.Count;
            string xml = "";
            string rowEnter = "\r\n";
            for (int i = 0; i < tablenum; i )
            {
                xml = "<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'" rowEnter;
                xml = "xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'" rowEnter;
                xml = "xmlns:rs='urn:schemas-microsoft-com:rowset'" rowEnter;
                xml = "xmlns:z='#RowsetSchema'>" rowEnter;
                xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?>" rowEnter;
                xml = "<s:Schema id='RowsetSchema'>" rowEnter;
                xml = "<s:ElementType name='row' content='eltOnly' rs:updatable='true'>" rowEnter;

                int rowCount = det.Tables[i].Rows.Count;
                int columnCount = det.Tables[i].Columns.Count;

                for (int j = 0; j < columnCount; j )
                {
                    xml = BcbColumn(det.Tables[i].Columns[j], j 1);
                }
                xml = "<s:extends type='rs:rowbase'/>" rowEnter;
                xml = "</s:ElementType>" rowEnter;
                xml = "</s:Schema>" rowEnter;
                xml = "<rs:data>" rowEnter;

                for (int j = 0; j < rowCount; j )
                {
                    xml = "<z:row";
                    for (int z = 0; z < columnCount; z )
                    {
                        string name = " " det.Tables[i].Columns[z].ColumnName;
                        if (det.Tables[i].Columns[z].DataType == Type.GetType("System.Byte[]"))
                        {
                            byte[] b = new byte[0];
                            if (det.Tables[i].Rows[j][z] != DBNull.Value)
                                b = (byte[])(det.Tables[i].Rows[j][z]);
                            string rowvalue = "";
                            for (int m = 0; m < b.Length; m )
                            {
                                rowvalue = b[m].ToString("X2");
                            }
                            xml = name "='" rowvalue.ToLower() "'";
                        }
                        else
                        {
                            string rowvalue = Convert.ToString(det.Tables[i].Rows[j][z]);
                            xml = name "='" rowvalue "'";
                        }
                    }
                    xml = "/>" rowEnter;
                }
                xml = "</rs:data>" rowEnter;
                xml = "</xml>" rowEnter;
            }
            return xml;
        }

        public static string BcbColumn(DataColumn column, int colounNumber)
        {
            string rowEnter = "\r\n";

            string rowxml = "<s:AttributeType name='" column.ColumnName "' rs:number='" colounNumber.ToString() "' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true' rs:basetable='DataSet'" rowEnter;
            rowxml = " rs:basecolumn='" column.ColumnName "'>" rowEnter;
            if (column.DataType == Type.GetType("System.Byte[]"))
                rowxml = "<s:datatype dt:type='bin.hex' dt:maxLength='1073741823' rs:long='true'/>" rowEnter;
            else
                rowxml = "<s:datatype dt:type='string' dt:maxLength='255'/>" rowEnter;
            rowxml = "</s:AttributeType>" rowEnter;
            return rowxml;
        }

        /// <summary>
        /// 获取XML字符串内字段值
        /// </summary>
        /// <param name="xmlsrc">源字符串</param>
        /// <param name="xmlNode">字符串名称</param>
        /// <returns>返回字符串值 -999为空字符串 -888不适用</returns>
        public static string GetXmlNodeValue(string xmlsrc, string xmlNode)
        {
            string xmlNodeValue = "";
            var nodeStart = $"<{xmlNode}>";
            var nodeEnd = $"</{xmlNode}>";
            if (xmlsrc.Contains(nodeStart) && xmlsrc.Contains(nodeEnd))
            {
                var start = xmlsrc.IndexOf(nodeStart, 0, StringComparison.Ordinal) nodeStart.Length;
                var len = xmlsrc.IndexOf(nodeEnd, 0, StringComparison.Ordinal) - start;
                xmlNodeValue = xmlsrc.Substring(start, len);
            }
            if (xmlNodeValue.Equals("不适用") || xmlNodeValue.Equals("不支持") || xmlNodeValue.Equals("N/A"))
                xmlNodeValue = "-9999";
            return xmlNodeValue;
        }

        /// <summary>
        /// 获取XML字符串内字段值
        /// </summary>
        /// <param name="xmlsrc">源字符串</param>
        /// <param name="xmlNode">字符串名称</param>
        /// <returns>返回字符串值</returns>
        public static string GetXmlValue(string xmlsrc, string xmlNode)
        {
            string xmlNodeValue = "";
            var nodeStart = $"<{xmlNode}>";
            var nodeEnd = $"</{xmlNode}>";
            if (xmlsrc.Contains(nodeStart) && xmlsrc.Contains(nodeEnd))
            {
                var start = xmlsrc.IndexOf(nodeStart, 0, StringComparison.Ordinal) nodeStart.Length;
                var len = xmlsrc.IndexOf(nodeEnd, 0, StringComparison.Ordinal) - start;
                xmlNodeValue = xmlsrc.Substring(start, len);
            }
            return xmlNodeValue;
        }

        /// <summary>
        /// 删除XML中指定的字符串
        /// </summary>
        /// <param name="xmlsrc">源字符串</param>
        /// <param name="xmlNode">字符串名称</param>
        /// <returns>返回字符串值</returns>
        public static string DelXmlAssignStr(string xmlsrc, string xmlNode)
        {
            string xmlValue = xmlsrc;
            var nodeStart = $"<{xmlNode}>";
            var nodeEnd = $"</{xmlNode}>";
            if (xmlsrc.Contains(nodeStart) && xmlsrc.Contains(nodeEnd))
            {
                var start = xmlsrc.IndexOf(nodeStart, 0, StringComparison.Ordinal);
                var len = xmlsrc.IndexOf(nodeEnd, 0, StringComparison.Ordinal) - start nodeEnd.Length;
                xmlValue = xmlsrc.Remove(start, len);
            }
            return xmlValue;
        }
    }

标签: FastReport Fast re 调用 fa

实例下载地址

C#调用Fastreport报告打印FTP

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警