Virgo标签
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Virgo标签相关的知识,希望对你有一定的参考价值。
Virgo标签打印工具说明文档
工具简述:
很多生活场景中,对于商品需要贴上各式各样的标签,以便客户,和销售人员准确知道商品的定义。
本工具重点在于解决不同产品,不同客户,不同标签纸规格,标签样式不一致,而生的多样化标签解决方案,使客户,维护人员现场操作,即可达到修改标签样式规格的操作,以更好的增加用户体验度。
工具概述:
该工具目前没有直接连接数据查询数据功能,考虑到多样化,图形化配置操作。第三方调用时候需要增加一部分对接代码。这会在后面文档中细说。下面我们先介绍工具使用。
1 必须文件
文件名称 |
简述 |
详细说明 |
Virgo.Demo40.exe |
工具启动文件 |
这里我为了减少启动文件容量,采用另一个项目去启动 |
Virgo.ReportPrint.dll |
工具dll |
该dll为工具主要文件,不可缺少 |
Virgo.VControl.dll |
控件dll |
工具部分控件dll |
Report.xml |
数据配置文件 |
该文件可以灵活的配置标签数据,工具没有直接获取数据,第三方是往该数据xml中填充数据,同时在设计标签的时候,会将配置文件中唯一标识绑定到配置文件中去 |
2 界面
3 Report.xml配置说明(这里举例,具体如何定义会在第三方调用出具体说明)
<?xml version="1.0" encoding="utf-8"?>
<Report Note="Name为其他系统识别标识,SysName为本系统绑定数据显示标识。此文件应该不断完善,后期改动比较小
在配置的时候需要读取某个节点。绑定到ID,
第三方调用时 这里填入对应的数据,
打印的时候将这里数据对应的到界面上去。
">
<Type Name="Demo" ID="Type001">
<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="" />
<Table Name="表格数据商品明细" ID="Table001" >
<Columns>
<Column ID="T001" SysName="明细1" Name="明细1" />
<Column ID="T002" SysName="明细2" Name="明细2" />
<Column ID="T003" SysName="明细3" Name="明细3" />
<Column ID="T004" SysName="明细4" Name="明细4" />
</Columns>
</Table>
<Image ID="I00001" SysName="自定义图片1" Name="自定义图片1" Value="这里应该填入二进制" />
<Image ID="I00002" SysName="自定义图片2" Name="自定义图片2" Value="这里应该填入二进制" />
<Barcode ID="B00001" SysName="商品条码内容" Name="商品条码内容" Value="条码内容" />
</Type>
</Report>
4 标签说明
标签名称 |
属性 |
释义 |
范例 |
文字标签 填入固定文字,或者数据绑定,由第三方传入
|
Color |
文字颜色 |
|
DefaultText |
需要打印的文字内容 |
|
|
StartPoint |
起始坐标 |
|
|
EndPoint |
结束坐标 |
|
|
Font |
字体样式 |
|
|
IsRectangleF |
是否需要文字环绕边框 |
|
|
NowBindFileDescription |
绑定的字段 |
|
|
StringAlignmentUpDown |
字体上下对齐方式 |
|
|
StringAlignmentLeftRight |
字体左右对齐方式 |
|
|
线条 打印一条直线 |
PenW |
线的宽度 |
|
Color |
线的颜色 |
|
|
StartPoint |
开始坐标 |
|
|
EndPoint |
结束坐标 |
|
|
条码 |
BarcodeString |
条码内容, |
|
NowBindFileDescription |
绑定的字段 |
|
|
图片 |
Image |
图片内容 |
|
NowBindFileDescription |
绑定的字段,当不绑定的时候直接取设计的图片 |
|
|
空表格, 设计的过程中发现拖线条画框比较繁琐,这个相对来说快捷一些。 |
LineColor |
线条颜色的集合 |
|
ListLineXPoint |
竖线条x轴集合 |
|
|
ListLineYPoint |
更线条y轴集合 |
|
|
PenW |
线条宽度 |
|
|
主界面 |
Color |
背景色 |
|
NowBindFileDescription |
数据绑定 |
|
|
Size |
打印大小 |
|
5 操作说明
右键菜单
这里通过右键菜单添加不同的标签,并修改标签属性来设计样式,并且可通过预览查看打印效果。
主菜单
菜单 |
说明 |
保存 |
将配置文件保存到本地 |
打开 |
从本地打开一个文件 |
新建 |
暂无 |
另存为 |
将配置文件另存到一个目录 |
查看源 |
暂无 |
移动 |
方便通过键盘上下左右键进行微调,可选择微调的间距 |
第三方调用
上述文件提到Report.xml为数据文件,这里详细说明下。
Report.xml的数据文件主要包括如下节点
<?xml version="1.0" encoding="utf-8"?>
<Report >
<Type Name="Demo" ID="Type001">
<String ID="S00001" SysName="商品名称" Name="商品名称" Note="" Value="" />
<Table Name="表格数据商品明细" ID="Table001" >
<Columns>
<Column ID="T001" SysName="明细1" Name="明细1" />
</Columns>
</Table>
<Image ID="I00002" SysName="自定义图片2" Name="自定义图片2" Value="这里应该填入二进制" />
<Barcode ID="B00001" SysName="商品条码内容" Name="商品条码内容" Value="条码内容" />
</Type>
</Report>
简单说就是 String、Table、Columns、Column、Image、Barcode 几个配置内容,说到这个文件,我需要提到工具自带和配置相匹配的数据类了,(Virgo.ReportPrint.Common.ReportData)
Report.xml文件是根据第三方需要配置的文件,该类可通过构造函数直接将xml文件传给ReportData,并更具实际需要对数据类进行赋值,最后传给打印对象Virgo.ReportPrint.Print(string printName)
调用方法 如下方法进行打印、预览
public void PrintReport(ReportData rd, string path) //打印
public void PreviewReport(ReportData rd, string path)//预览
ReportData结构说明
第三方更相应标识找到具体的数据进行赋值,不同的打印取不同的数据节点配置和对应的界面配置文件。
具体demo后续更新
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace Virgo.ReportPrint.Common
{
public class ReportData
{
private ReportData(XmlDocument xml)
{
_ListReportType = new List<ReportType>();
ReportType rt = null;
XmlElement xReport = xml.SelectNodes("Report")[0] as XmlElement;
foreach (XmlElement xe in xReport.ChildNodes)
{
rt = new ReportType(xe);
_ListReportType.Add(rt);
}
}
public ReportType GetReportType(string name)
{
foreach (ReportType rt in _ListReportType)
{
if (rt.ID == name.GetSplitID())
return rt;
}
return null;
}
private List<string> _ListReportTypeName = null;
public List<string> ListReportTypeName
{
get
{
if (_ListReportTypeName == null)
{
_ListReportTypeName = new List<string>();
foreach (ReportType rt in ListReportType)
{
_ListReportTypeName.Add(rt.ToString());
}
}
return _ListReportTypeName;
}
}
private List<ReportType> _ListReportType = null;
public List<ReportType> ListReportType { get { return _ListReportType; } }
#region 外部初始化
public static ReportData InitReportData()
{
//从本地获取
string path = Application.StartupPath + @"\\Report.xml";
XmlDocument dataBaseXml = new System.Xml.XmlDocument();
dataBaseXml.Load(path);
return new ReportData(dataBaseXml);
}
public static ReportData InitReportData(XmlDocument xml)
{
return new ReportData(xml);
}
#endregion
}
/// <summary>
/// Report类型
/// </summary>
public class ReportType : IReport
{
public ReportType(XmlElement xe)
{
this.Init(xe);
ReportString rs = null;
ReportTable rt = null;
ReportImage ri = null;
ReportBarcode rb = null;
if (xe.ChildNodes.Count != 0)
{
_DicReportString = new Dictionary<string, ReportString>();//字符串
_DicReportTable = new Dictionary<string, ReportTable>();
_DicReportImage = new Dictionary<string, ReportImage>();
_DicReportBarcode = new Dictionary<string, ReportBarcode>();
string nodeName = string.Empty;
for (int i = 0; i < xe.ChildNodes.Count; i++)
{
nodeName = xe.ChildNodes[i].Name;
switch (nodeName)
{
case "String":
rs = new ReportString(xe.ChildNodes[i] as XmlElement);
_DicReportString.Add(rs.ID, rs);
break;
case "Table":
rt = new ReportTable(xe.ChildNodes[i] as XmlElement);
_DicReportTable.Add(rt.ID, rt);
break;
case "Image":
ri = new ReportImage(xe.ChildNodes[i] as XmlElement);
_DicReportImage.Add(ri.ID, ri);
break;
case "Barcode":
rb = new ReportBarcode(xe.ChildNodes[i] as XmlElement);
_DicReportBarcode.Add(rb.ID, rb);
break;
}
}
}
}
private IDictionary<string, ReportString> _DicReportString = null;
private IDictionary<string, ReportTable> _DicReportTable = null;
private IDictionary<string, ReportImage> _DicReportImage = null;
private IDictionary<string, ReportBarcode> _DicReportBarcode = null;
public IDictionary<string, ReportString> DicReportString { get { return _DicReportString; } }
public IDictionary<string, ReportTable> DicReportTable { get { return _DicReportTable; } }
public IDictionary<string, ReportImage> DicReportImage { get { return _DicReportImage; } }
public IDictionary<string, ReportBarcode> DicReportBarcode { get { return _DicReportBarcode; } }
}
/// <summary>
/// 字符串类型的数据
/// </summary>
public class ReportString : IReport
{
public ReportString(XmlElement xe)
{
this.Init(xe);
}
}
/// <summary>
/// 图片类型的数据
/// </summary>
public class ReportImage : IReport
{
public ReportImage(XmlElement xe)
{
this.Init(xe);
}
}
/// <summary>
/// 图片类型的数据
/// </summary>
public class ReportBarcode : IReport
{
public ReportBarcode(XmlElement xe)
{
this.Init(xe);
}
}
/// <summary>
/// 表格数据
/// </summary>
public class ReportTable : IReport
{
public ReportTable(XmlElement xe)
{
this.Init(xe);
_ListReportTableRow = new List<ReportTableRow>();
_DicReportTableColumn = new Dictionary<string, ReportTableColumn>();
ReportTableColumn rtc = null;
foreach (XmlElement x in xe.ChildNodes)
{
switch (x.Name)
{
case "Columns":
foreach (XmlElement x1 in x.ChildNodes)
{
rtc = new ReportTableColumn(x1);
_DicReportTableColumn.Add(rtc.ID, rtc);
}
break;
case "Row":
_ListReportTableRow.Add(new ReportTableRow(x));
break;
}
}
}
private List<ReportTableRow> _ListReportTableRow = null;
public List<ReportTableRow> ListReportTableRow { get { return _ListReportTableRow; } set { _ListReportTableRow = value; } }
private Dictionary<string, ReportTableColumn> _DicReportTableColumn = null;
public Dictionary<string, ReportTableColumn> DicReportTableColumn { get { return _DicReportTableColumn; } }
}
/// <summary>
/// 表格数据
/// </summary>
public class ReportTableRow : IReport
{
public ReportTableRow(XmlElement xe)
{
_Index = xe.GetAttribute("Index"); //这里的Index作为排序用
if (_Index == string.Empty) _Index = Guid.NewGuid().ToString(); //若为空,那么代码生成GUID
ReportTableColumn rtc = null;
foreach (XmlElement x in xe.ChildNodes)
{
switch (x.Name)
{
case "Columns":
foreach (XmlElement x1 in x.ChildNodes)
{
rtc = new ReportTableColumn(x1);
_DicReportTableColumn.Add(rtc.ID, rtc);
}
break;
}
}
}
public ReportTableRow(string index, Dictionary<string, ReportTableColumn> dic)
{
_Index = index; //这里的Index作为排序用
if (_Index == string.Empty) _Index = Guid.NewGuid().ToString(); //若为空,那么代码生成GUID
ReportTableColumn rtc = null;
_DicReportTableColumn = new Dictionary<string, ReportTableColumn>();
foreach (KeyValuePair<string, ReportTableColumn> key in dic)
{
rtc = new ReportTableColumn(key.Value);
_DicReportTableColumn.Add(rtc.ID, rtc);
}
}
private string _Index = string.Empty;
public string Index { get { return _Index; } }
private Dictionary<string, ReportTableColumn> _DicReportTableColumn = null;
public Dictionary<string, ReportTableColumn> DicReportTableColumn { get { return _DicReportTableColumn; } }
}
/// <summary>
/// 表格列的数据
/// </summary>
public class ReportTableColumn : IReport
{
public ReportTableColumn(XmlElement xe)
{
this.Init(xe);
}
public ReportTableColumn(ReportTableColumn rtc)
{
this.Init(rtc);
}
}
public class IReport
{
public IReport()
{
}
public override string ToString()
{
return this.Name + "(" + this.ID + ")";
}
/// <summary>
/// 继承该对象的东西才能去调用
/// </summary>
/// <param name="xe"></param>
protected void Init(XmlElement xe)
{
_ID = xe.GetAttribute("ID");
_Name = xe.GetAttribute("Name");
_SysName = xe.GetAttribute("SysName");
_Value = xe.GetAttribute("Value");
}
protected void Init(IReport xe)
{
_ID = xe.ID;
_Name = xe.Name;
_SysName = xe.SysName;
_Value = xe.Value;
}
private string _SysName = string.Empty;
private string _ID = string.Empty;
private string _Name = string.Empty;
private string _Value = string.Empty;
public string ID { get { return _ID; } }
public string Name { get { return _Name; } }
public string SysName { get { return _SysName; } }
public string Value { get { return _Value; } set { _Value = value; } }
}
}
以上是关于Virgo标签的主要内容,如果未能解决你的问题,请参考以下文章