Virgo标签打印
去年刚换新的公司,熟悉新的业务和代码,在修改公司打印标签的时候,感觉到无比烦躁与头痛。只因为不好维护,所有的标签打印,全部是GDI+绘制,每次修改微调,都只能全部运行才能看到效果。程序过大,编译过慢,这个修改过程真的是痛不欲生。
经过半年的调查,和整理,准备做个标签打印的配置工具,现在已经完成了大半,基本可用,准备将新版本程序嵌入这个标签工具,以方便日后标签的维护。
下面介绍下这个工具:
1 工具采用GDI+绘制,利用xml保存配置文件。这里我们叫它《标签配置文件》
主要包括String,Image,Table Line,四个标签样式,通过图形化处理,拖拽方式设置位置。
每个标签都有自己一系列的属性,通过属性面板可以设置对应的属性,例如String的Font。
2 工具配置数据绑定
考虑到直连数据库的问题,我没有直接绑定到数据库,而是采取读取另外一个配置文件 (这里我们叫它《数据配置文件》)。将对应的数据的ID绑定到标签配置配置文件中去。第三方调用的时候通过工具自带方法先《数据配置文件》
生成配置文件的对象。第三方更具他本身的条件对这个对象进行赋值,
3 生成标签并且打印
第三方生成数据对象后,读取需要打印的标签配置文件,传入工具自带方法,并且开始打印。
下面提供些工具截图和代码。

标签配置文件
<DrawReport Color="White" Size="800,700" NowBindFileDescription="" ID="">
<DrawLine StartPoint="81,44" EndPontY="231,44" PenW="1" LineColor="Black" />
<DrawImage Point="54,62" Size="200,87" Image="" NowBindFileDescription="" ID="" />
<DrawString Font="宋体, 12pt" Point="100,13" Width="0" Margin="4" IsRectangleF="False" Formart="名称:{0}" NowBindFileDescription="" ID="" />
<DrawImage Point="98,134" Size="114,164" Image="" NowBindFileDescription="" ID="" />
</DrawReport>
数据配置文件
<?xml version="1.0" encoding="utf-8"?>
<Report Note="Name为其他系统识别标识,SysName为本系统绑定数据显示标识。此文件应该不断完善,后期改动比较小
在配置的时候需要读取某个节点。绑定到ID,
第三方调用时 这里填入对应的数据,
打印的时候将这里数据对应的到界面上去。
">
<Type Name="用户标签" ID="Type004">
<String ID="S00001" SysName="名称" Name="用户名称" Note=" " Value="" />
<String ID="S00002" SysName="条码" Name="用户条码" Note=" " Value="" />
<Image ID="I00001" SysName="条码" Name="用户条码" Value="这里应该填入二进制" />
</Type>
<Type Name="科室标签" ID="Type005">
<String ID="S00001" SysName="名称" Name="科室名称" Note=" " Value="" />
<String ID="S00002" SysName="条码" Name="科室条码" Note=" " Value="" />
<Image ID="I00001" SysName="条码" Name="科室条码" Value="这里应该填入二进制" />
</Type>
<Type Name="测试" ID="Type008">
<String ID="S00001" SysName="产品类型" Name="产品类型" Note="打印包名称" Value="" />
<String ID="S00002" SysName="产品名称" Name="产品名称" Note=" " Value="" />
<String ID="S00003" SysName="包条码" Name="包条码" Note=" " Value="" />
<String ID="S00004" SysName="回收数量" Name="回收数量" Note=" " Value="" />
<String ID="S00005" SysName="配包人" Name="配包人" Note=" " Value="" />
<String ID="S00006" SysName="审核人" Name="审核人" Note=" " Value="" />
<String ID="S00007" SysName="失效日期" Name="失效日期" Note=" " Value="" />
<String ID="S00008" SysName="灭菌日期" Name="灭菌日期" Note=" " Value=""/>
<Table Name="器械明细" ID="Table001" >
<Columns>
<Column ID="T001" SysName="器械名称" Name="器械名称" />
<Column ID="T002" SysName="器械数量" Name="器械数量" />
<Column ID="T003" SysName="器械类型" Name="器械类型" />
<Column ID="T004" SysName="器械条码" Name="器械条码" />
</Columns>
</Table>
<Image ID="I00001" SysName="医院Logo" Name="医院Logo" Value="这里应该填入二进制" />
<Image ID="I00003" SysName="包条码" Name="包条码" Value="这里应该填入二进制" />
</Type>
</Report>
第三代调用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Virgo.ReportPrint;
using Virgo.ReportPrint.Common;
namespace Virgo.Demo40
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void buttonPrint_Click(object sender, EventArgs e)
{
System.Xml.XmlDocument xml = GetXml();
if (xml != null)
{
ReportData rd = ReportData.InitReportData();
//开始给rd赋值
LoadReportData(rd);
Virgo.ReportPrint.Print print = new Print();
print.PrintReport(rd, xml);
}
else
{
MessageBox.Show(this, "请选择对应的配置文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btnPrintShow_Click(object sender, EventArgs e)
{
System.Xml.XmlDocument xml = GetXml();
if (xml != null)
{
ReportData rd = ReportData.InitReportData();
//开始给rd赋值
LoadReportData(rd);
Virgo.ReportPrint.Print print = new Print();
print.PreviewReport(rd, xml);
}
else
{
MessageBox.Show(this, "请选择对应的配置文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private System.Xml.XmlDocument GetXml()
{
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Multiselect = true;
fileDialog.Title = "请选择文件";
fileDialog.Filter = "配置文件(*.xml)|*.xml";
if (fileDialog.ShowDialog() == DialogResult.OK)
{
string file = fileDialog.FileName;
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(file);
return xml;
}
return null;
}
private void btnDesgin_Click(object sender, EventArgs e)
{
Virgo.ReportPrint.frmDesign fd = new Virgo.ReportPrint.frmDesign();
fd.ShowDialog(this);
}
private void LoadReportData(ReportData rd)
{
foreach (ReportType rt in rd.ListReportType)
{
switch (rt.Name)
{
case "包标签":
LoadReportTypePackage(rt);
break;
case "灭菌标签":
break;
default:
break;
}
}
}
/// <summary>
/// </summary>
/// <param name="rt"></param>
private void LoadReportTypePackage(ReportType rt)
{
foreach (KeyValuePair<string, ReportString> key in rt.DicReportString)
{
switch (key.Value.Name)
{
case "包名称":
key.Value.Value = "测试的包名称";
break;
case "产品名称":
key.Value.Value = "测试的产品名称";
break;
case "包条码":
key.Value.Value = "600201709130524";
break;
case "包类型":
key.Value.Value = "测试的类型";
break;
case "配包人":
key.Value.Value = "言护士";
break;
case "灭菌人":
key.Value.Value = "张护士";
break;
case "生产日期":
key.Value.Value = "2017-09-26 09:56";
break;
case "灭菌日期":
key.Value.Value = "2017-09-25 09:56";
break;
default:
break;
}
}
foreach (KeyValuePair<string, ReportImage> key in rt.DicReportImage)
{
switch (key.Value.Name)
{
case "医院Logo":
key.Value.Value = Image.FromFile(@"F:\测试图片\1.jpg").ConvertToString();
break;
case "包条码":
key.Value.Value = Image.FromFile(@"F:\测试图片\A.png").ConvertToString();
break;
default:
break;
}
}
ReportTableRow rtr = null;
foreach (KeyValuePair<string, ReportTable> key in rt.DicReportTable)
{
switch (key.Value.Name)
{
case "器械明细": //器械明细表
if (key.Value.ListReportTableRow == null)
key.Value.ListReportTableRow = new List<ReportTableRow>();
for (int i = 0; i < 5; i++)
{
rtr = new ReportTableRow("0", key.Value.DicReportTableColumn);
foreach (KeyValuePair<string, ReportTableColumn> key1 in rtr.DicReportTableColumn)
{
switch (key1.Value.Name)
{
case "器械名称":
key1.Value.Value = "测试名称" + i.ToString();
break;
case "器械数量":
key1.Value.Value = ReportCommon.GetRandKey(1, 999).ToString();
break;
case "器械类型":
key1.Value.Value = "类型" + i.ToString();
break;
case "器械条码":
key1.Value.Value = "600000000" + i.ToString();
break;
default:
break;
}
}
key.Value.ListReportTableRow.Add(rtr);
}
break;
default:
break;
}
}
}
}
}
第一次写,不要喷!,不足之处共同学习。
谢谢!

浙公网安备 33010602011771号