随笔 - 9  文章 - 0 评论 - 291 trackbacks - 0

摘要: 我在最近主持开发的人力资源管理系统中遇到一个新的问题:就是最终用户要能够设计和编辑报表。在人力资源管理系统中有一个基本的功能,就是编辑和打印员工的工作证,不同职务的员工的工作证可能不一样,同一个员工不同工作时期(比如实习员工、正式员工)的工作证也可能不一样。项目方要求我们一定要做到操作员可以在线设计和修改工作证的格式(实际上就是报表),否则就一切免谈。客户是上帝!呵呵,努力做吧。于是大家搜罗了所有的Web打印软件,结果包括大名鼎鼎的水晶报表也没有这个功能。 好在天无绝人之路,我在以前所设计的一个基于FastReport的Web打印控件之上进行了大量的修改,终于实现了最终用户的在线设计和编辑报.阅读全文
posted @ 2011-03-01 15:57 Web打印 阅读(5362) 评论(18) 编辑
摘要: 在Web打印时,通过Web打印控件读取客户端本地打印机列表,并且可以动态指定某台打印机进行打印。阅读全文
posted @ 2011-10-07 14:14 Web打印 阅读(1981) 评论(3) 编辑
摘要: 最近在一个Web开发项目中,用户提出一个比较特殊的需求:就是在报表打印时,需要记录哪一个人在什么时候真正打印了哪一份报表,报表预览则可以不记录。用户的这个需求在需要对报表的打印进行管理的场合是比较普遍的,作为管理员,对于比较重要的报表,肯定想知道谁在什么时候真正打印了报表。 对于这种打印需求,一般的报表打印方案是无能为力的,无法知道用户在报表预览后是否真正打印了。 我想就是在C/S架构下的程序,调用水晶报表之类的控件进行打印,按一般思维解决这个问题也是比较困难的。 这因为一般打印控件的预览和打印的功能是一体的,预览后的真正打印时没有向调用者发送打印的消息。 对于这个难题,我思考了好久,终于在我所设计的一个基于FastReport的Web打印控件实现了此需求。阅读全文
posted @ 2011-09-14 12:47 Web打印 阅读(1808) 评论(12) 编辑
摘要: 听到姑妈去世的消息后,特写此文纪念我的姑妈。阅读全文
posted @ 2011-08-22 22:48 Web打印 阅读(191) 评论(1) 编辑

    我在一个多月之前换了一个工作,搞金融方面的程序化交易软件,第一个工作任务就是解析深圳交易所和上海交易所的数据,深交所的数据是STEP协议,是纯字符的TCP/IP流,每秒的流量达200多K,接收数据的客户端一定要设计合理,不然这么大的数据流就死定了。而上证所的数据是采用金融行业最先进的STEP/FIX/FAST协议,这数据流比STEP协议压缩了80%,解析这数据可大费我的脑精,找别的公司帮忙,人家开价每人每天8000元,还只是讲解协议,不提供源代码。没办法,硬着头皮上,生吞活剥的读完了那一百多页英文,终于懂得了协议的原理,然后再加上别人公司的一点提醒,终于把那该死的数据解析出来。以后要是有朋友要做FAST协议的解析,也可以问问我,我只要五折的价格就行了,哈哈。

posted @ 2011-06-19 22:00 Web打印 阅读(757) 评论(4) 编辑

      我在最近主持开发的人力资源管理系统中遇到一个新的问题:就是最终用户要能够设计和编辑报表。在人力资源管理系统中有一个基本的功能,就是编辑和打印员工的工作证,不同职务的员工的工作证可能不一样,同一个员工不同工作时期(比如实习员工、正式员工)的工作证也可能不一样。项目方要求我们一定要做到操作员可以在线设计和修改工作证的格式(实际上就是报表),否则就一切免谈。客户是上帝!呵呵,努力做吧。于是大家搜罗了所有的Web打印软件,结果包括大名鼎鼎的水晶报表也没有这个功能。
      好在天无绝人之路,我在以前所设计的一个基于FastReport的Web打印控件之上进行了大量的修改,终于实现了最终用户的在线设计和编辑报表的功能,用户也比较满意。
报表的预览窗口如下图:

报表的最终用户在线设计和编辑窗口如下图:

       当然报表的在线编辑窗口有一点专业,操作员需要经过一点培训才会使用,不过一般情况是我们先帮用户设计好了模板,操作员平时只是要做一些微调,比如改个字或改个格式等。报表编辑好后,点击就可以自动把报表保存到服务器,且提示   。
     下面详细的讲解一下怎样利用我设计的Web打印控件实现最终用户的在线设计和修改报表,且自动把报表保存至服务器。讲解以ASP.NET为例,当然其它语言也可以举一反三,很容易实现。因为调用打印控件统一是JavaScirpt,提交服务器的数据是Http协议的Post方式,这些都是通用的。
最终用户在线设计和修改Web报表的部分代码如下:

调用Web打印控件
protectedvoid BtnDepsitAmtDesignPost_Click(object sender, EventArgs e)
{
string FileValue, PrintValue, ParaName, ParaValue;

FileValue
= FileToString(".\\Frp\\DepositAmt.fr3");
ParaName
="ShopName`~PrintDepositAdd`~PrintPaperNo`~Title"; //`~为各参数的分隔符
ParaValue ="测试酒楼"
+"`~说明:本单据为贵客押金收取凭证,盖章有效。退房时请出示,遗失者自负,请妥善保存。退房时间为12:00时,延时退房18:00时以前按半天房费收取,18:00时以后算全天房价。押金单有效期为一个月,过期作废。 贵重物品请交前台寄存,未寄存丢失自负。 谢谢!"
+"`~身份证:4325011980639512"
+"`~押金单";

SqlConnection ConPrintTest
=new SqlConnection(ConfigurationManager.ConnectionStrings["PrintTestConnectionString"].ToString());
ConPrintTest.Open();
DataSet DsCashLog
=new DataSet();
SqlDataAdapter DaCashLog
=new SqlDataAdapter("Select top 1 CashNo, CashDate, CashAmt, PayName, GuestName, RoomNo, ItemRemark, CashUserName, Remark From CashLog", ConPrintTest);
DaCashLog.FillSchema(DsCashLog, SchemaType.Source,
"CashLog");
DaCashLog.Fill(DsCashLog,
"CashLog");

PrintValue
= TableToXml(DsCashLog.Tables["CashLog"]);

DsCashLog.Dispose();
ConPrintTest.Close();

string ScriptStr;

ScriptStr
="<script language='javascript'>window.onload = function() { try { var ObjPrintMange = new ActiveXObject('WebPrint.WebPrintUnit'); } catch(e) { if( confirm('打印控件未安装,现在下载吗?') ) { window.location='./PrintActivex.exe'; } return; } var OldVersion=ObjPrintMange.Version; NewVerion='3.5(2011-02-17)'; if(OldVersion < NewVerion) { ObjPrintMange = null; alert('打印控件需升级。请先进行下载,下载后关闭IE,然后安装升级版。'); window.location='./PrintActivex.exe'; return; } "
+" ObjPrintMange.CheckReg('公司名称', '3B8E5B998A3125EE89983EA940BB2AEE'); "//注册码
+" ObjPrintMange.ReportFileName='DepositAmt.fr3'; "
+" ObjPrintMange.PostURL='http://www.xinyuerj.com/ASPPost/Show.asp?FileName=DepsitAmt.fr3'; "
+" ObjPrintMange.DesignReport('"
+ FileValue +"' , '"
+ ParaName +"', '"
+ ParaValue +"', '"
+ PrintValue +"', '', '', '', '', '');"
+"ObjPrintMange = null; } </script>";
ScriptStr
= ScriptStr.Replace(System.Environment.NewLine, string.Empty);

Response.Write(ScriptStr);

}

        报表控件在以前的基础上增加了PostURL属性,设置此属性,则在报表在线编辑时,单击“保存”按钮或“保存”菜单项,则把报表内容组织为String,且通过Http的Post方式直接提交到所设置的URL页面,用户可以在URL接收报表内容,把报表内容保存在指定文件或数据库中。Post的字段名指定为ReportFileValue,用户可以通过接收此字段的值保存在线编辑的报表内容。报表的内容为String,打印或预览时可以直接调用此内容,无需用FileToStr函数进行转换。
       报表控件的DesignReport函数,功能为在线编辑报表,参数:报表文件字符串,报表参数名称字符串,报表参数值字符串,数据集1的字符串,数据集2的字符串,数据集3的字符串,数据集4的字符串,数据集5的字符串,数据集6的字符串。报表文件字符串调用FileToStr函数产生;报表参数名称字符串为报表中所使用的参数的名称,各名称之间以`~分隔;报表参数值字符串为报表中所使用的参数所对应的值,各参数值之间以`~分隔;数据集的字符串通过调用FileToStr函数产生,若没有数据则为空。
作为接收Http的Post数据的服务器的页面设计如下:

接收提交的报表内容
publicpartialclass Show : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
string FileName, FileValue;

FileName
= Request.QueryString["FileName"];
FileValue
= Request.Form["ReportFileValue"];

WriteReportFile(FileName, FileValue);

Response.Write(
"File Name"+ FileName);
Response.Write(
"File Value"+ FileValue);
}

privatevoid WriteReportFile(string FileName, string FileValue)
{
if ( FileName ==null|| FileName ==""|| FileValue ==null||FileValue =="")
return;

File.WriteAllText(Server.MapPath(FileName), FileValue);
}
}

      FileName是PostURL中所设置的保存的报表文件名,ReportFileValue则为报表文件的内容。
      如果你的项目也需要最终用户在线设计和修改报表,我所设计这个Web打印控件是一种比较快捷方便的解决方法。Web打印控件目前对于个人可以申请免费注册,有什么问题请加入QQ群:218392762(一群:135506194、二群:150850837都已满,请加入三群)或者请直接Q我:12988672。


报表预览、编辑和下载的网址:http://www.xinyuerj.com/ASP/
                                       http://www.xinyuerj.com/ASP.NET/

posted @ 2011-03-01 15:57 Web打印 阅读(5362) 评论(18) 编辑
摘要: 我好多年未曾回老家过年,去年带着老婆和宝宝一起回老家热热闹闹过了一个春节,回来一看博客已有一个多月没有登录,不禁感叹时间过得真快。去年在网上发表了一个基于FastReport的Web打印控件,引起大家的关注,有很多的朋友留言申请免费注册,我尽可能快的把注册码发到各位的电子邮箱,在此谢过了。今天在此谈一谈Web打印控件的注册。 我开发的Web打印控件是一个Activex控件,对于Activex控件怎么注册是我一直思考的问题,我想很多开发Activex控件的朋友也会碰到此问题,我的思路也许能够提供一些参考。我们知道一般软件的中国式注册方法有两种,一种是采用加密狗,把相关的注册信息写入加密狗中,然.阅读全文
posted @ 2011-02-19 11:09 Web打印 阅读(2592) 评论(49) 编辑
摘要: 前一段时间,我根据自己的项目要求设计了一个基于FastReport的Web打印控件,然后把它稍做修改,挂到网上,引起了大家的关注,有好多朋友还向我申请了注册,在此谢过了!以后我还会一样的给大家免费注册,大家一起共同促进Web打印更快捷,更强大。 这几天,我一直在研究Web打印,我觉得我的设计思路是对的。我们搞软件设计,无论是面对最终用户,还是面对程序员,良好的用户体验是软件成败的关键因素。具体对于打印设计来说,就是能用最少的代码,最少的时间设计出用户所需要的报表。现在的程序员大部分是从C/S架构走过来的,对于C/S架构下,丰富多彩、快捷方便的报表打印设计多有怀念,呵呵,我就是其中的一个,可能是阅读全文
posted @ 2011-01-18 11:20 Web打印 阅读(4703) 评论(132) 编辑
摘要: 这几天老婆的电大要毕业了,要交毕业论文,这任务就落到我头上,男子汉当任不让,写就写吧,我写好的,请二姐翻译的。写完了放在博客上,有朋友要是碰到这样的任务,也可以参考参考吧,呵呵。UsingInternetResourcesintheTeachingandLearningEnglishTo: Mr. Guo Foreign Language Department Zhejiang Radio and Television UniversityFrom: Qin Liu Qin The Student of the Foreign Language Department Zhejiang Radi阅读全文
posted @ 2011-01-07 15:30 Web打印 阅读(315) 评论(0) 编辑
摘要: 我前一段时间开发一个B/S项目,需要用到打印功能,如是上网到处查找有关Web打印的控件(呵呵,我向来比较喜欢使用成熟的控件,这样用不着自己去开发,自己开发很多时候是费力不讨好,再说一个三五几百块的注册费用,俺还是付得起,自己去搞费上几天功夫,其工钱远不止这个数。),可是找来找去,挺让我失望的,真没想到一个Web打印有这么难吗,网上流传的商业Web打印控件,其复杂程度让我望而却步,不得不自己搞了一个Web打印控件,在项目中用起来挺顺心的,后来有几个朋友,也要用到Web打印的功能,我就把我这个控件发给他们,他们说用起来也挺不错的。现在网上流传的Web打印控件,在我看来主要是分两种,一种是水晶报表.阅读全文
posted @ 2011-01-04 14:34 Web打印 阅读(5822) 评论(72) 编辑
仅列出标题