在我的早期的一篇文章中《Web打印的解决方案之证件套打》,介绍过基于Web的证件套打方式;另外在我的代码生成工具中,一直介绍使用基于NVelocity模板引擎生成的代码,能够高效、快速、拥抱变化式的生成想要的代码。那么结合两者的特点,我们可以Winfrom界面中,利用NVelocity动态生成页面代码,然后利用WebBrowser控件,实现在Winfrom中的证件套打。在我的Winform框架集成了一些证件的套打功能,这样更能丰富日常开发中碰到的各种打印问题,提供更加广阔的应用前景。
首先我们来了解一下实现的效果,然后再来分析其中的实现思路和代码片段。
上面的Winform套打模块中,包含了三个不同证件,6个套打打印的效果。下面我们一个运输许可证的套打为例进行介绍讲解。
首先就是通过上面填写的数据,利用模板引擎自动生成页面代码,把相关的数据写到网页里面去。
private void btnLicensePrint_Click(object sender, EventArgs e) { string tempalte = "Template/LicensePrintTemplate.htm";//相对目录 HelperClassAdapter adapter = new HelperClassAdapter(tempalte); adapter.DirectoryOfOutput = "Template"; adapter.AddKeyValue("CompanyName", this.txtCompanyName.Text) .AddKeyValue("Scope", this.txtScope.Text) .AddKeyValue("License", this.txtLicense.Text) .AddKeyValue("ParkAddr", this.txtParkAddr.Text) .AddKeyValue("IssuingDept", this.txtIssuingDept.Text) .AddKeyValue("LicenseYear", this.txtLicenseDate.Value.Year) .AddKeyValue("LicenseMonth", this.txtLicenseDate.Value.Month) .AddKeyValue("LicenseDay", this.txtLicenseDate.Value.Day) .AddKeyValue("ValidateYear", this.txtLicenseValidity.Value.Year) .AddKeyValue("ValidateMonth", txtLicenseValidity.Value.Month) .AddKeyValue("ValidateDay", this.txtLicenseValidity.Value.Day) .AddKeyValue("Year", DateTime.Now.Year) .AddKeyValue("Month", DateTime.Now.Month) .AddKeyValue("Day", DateTime.Now.Day) .AddKeyValue("EconomicType", this.txtEconomicType.Text); string filePath = adapter.ExecuteSingle(); filePath = Path.Combine(Application.StartupPath, filePath); FrmWebBrowser frmView = new FrmWebBrowser(); frmView.webBrowser1.Navigate(filePath); frmView.Show(); }
通过以上的代码,会根据模板生成相应的页面文件,然后界面就会看到如下所示的效果,虽然看不到具体的套打数据,但是已经写到网页里面去了。
里面的页面代码会生成相应的证件数据,如下所示。
当我们选择“打印预览”的时候,就会调用打印控件进行套打显示了,里面显示的信息就是具体的证件信息了。当然,套打的背景是不会输出到打印机上的。
当我们选择“打印维护”的时候,就可以根据测试打印效果,对内容在纸张中的位置进行调整,指导满意位置,可以把调整的位置信息保存。
它是保存到本地的文件系统里面去的,所以只需要一次设置保存即可,今后就可以利用调好的位置进行套打了。
这样我们就可以实现基于Winform的证件套打,客户可以定制修改位置,使用起来非常友好和人性化。
由于Winform里面已经集成了打印控件的注册认证,因此打印的时候,不会出现版权文字信息了,真的是省心,省钱,呵呵。