打印机获取状态,获取Web打印的实际打印次数

最近在一个Web开发项目中,用户提出一个比较特殊的需求:就是在报表打印时,需要记录哪一个人在什么时候真正打印了哪一份报表,报表预览则可以不记录。用户的这个需求在需要对报表的打印进行管理的场合是比较普遍的,作为管理员,对于比较重要的报表,肯定想知道谁在什么时候真正打印了报表。
对于这种打印需求,一般的报表打印方案是无能为力的,无法知道用户在报表预览后是否真正打印了。 我想就是在C/S架构下的程序,调用水晶报表之类的控件进行打印,按一般思维解决这个问题也是比较困难的。 这因为一般打印控件的预览和打印的功能是一体的,预览后的真正打印时没有向调用者发送打印的消息。
对于这个难题,我思考了好久,终于在我所设计的一个基于FastReport的Web打印控件实现了此需求, 在用户预览报表后,单击“打印”图标,弹出打印窗口如下图:
打印预览获取Web打印的实际打印次数打印机获取状态
在用户单击“确认”按钮开始打印时,控件向服务端发送一个HTTP的POST消息,这样服务端收到此消息后就可以记录在什么时候打印了报表,对于打印了什么报表,是何人打印的,我们可以在POST消息中加上这两个参数或者用Session就可以解决这个问题。
下面我详细的讲解一下怎样利用我设计的Web打印控件实现获取Web打印的实际打印次数。讲解以ASP.NET为例,当然其它语言也可以举一反三,很容易实现。因为调用打印控件统一是JavaScirpt,提交服务器的数据是Http协议的Post方式,这些都是通用的。
获取Web打印的实际打印次数的部分代码如下:
打印预览获取Web打印的实际打印次数打印机获取状态打印预览获取Web打印的实际打印次数打印机获取状态获取Web打印的实际打印次数 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 = ""; ScriptStr = ScriptStr.Replace(System.Environment.NewLine, string.Empty); Response.Write(ScriptStr);


PrintURL属性,设置此属性,则在报表打印时,在弹出的选择打印机的窗口后点击“确定”按钮时,通过Http的Post方式直接提交到所设置的URL页面,用户可以在URL处理用户已打印的份数。Post的字段名指定为PrintCopy,此参数为用户打印时所选择的份数,默认为1。
接收实际打印的消息的代码如下:
接收实际打印次数 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Text; namespace Upload { public partial class Show : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string FileName, PrintCopy; FileName = Request.QueryString["FileName"]; PrintCopy = Request.Form["PrintCopy"]; WriteReportFile(FileName, PrintCopy); Response.Write("File Name" + FileName); Response.Write("Print Copy" + PrintCopy); } private void WriteReportFile(string FileName, string PrintCopy) { if ( FileName == null || FileName == "" || FileValue == null ||FileValue == "") return; File.WriteAllText(Server.MapPath(FileName), PrintCopy); } } }

如果你的项目也需要获取Web打印的实际打印次数,我所设计这个Web打印控件是一种比较快捷方便的解决方法。Web打印控件目前对于个人可以申请免费注册,有什么问题请加入QQ群:135506194(此群已满,请加另一个群:150850837)或者请直接Q我:12988672。
报表预览和编辑的网址:http://www.xinyuerj.com/ASP/
http://www.xinyuerj.com/ASP.NET/


Tags:  web分页打印 免费web打印 web打印 web打印控件 打印机获取状态

延伸阅读

最新评论

发表评论