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标签的主要内容,如果未能解决你的问题,请参考以下文章

Virgo,歌手资料

virgo是啥意思?

侠盗飞车罪恶都市VIRGO这部车,,

求 情侣网名 与 virgo相配

基于OSGi的Virgo环境搭建——环境篇

markdown [收听GraceDB的新活动地图] #gracedb #ligo_virgo #listen