SSRS report 插入条形码

 

                              EMEX  BarcodeProcess

首先项目需求是:把一个条形码导入到一个SSRS report里面。有两种方法:一: 运用别人封装好的dll文件。二:自己创建dll文件。

一: 运用别人封装好的dll文件。

http://www.barcoderesource.com/reportingServicesBarcode.shtml

这个链接很详细的介绍了应用别人封装好的dll文件,大家可以按照步骤进行操作。 和对VS以及SQlServer配置文件的配置。当你打开这个连接的时候。要注意在向SSRS Report导入代码的时候。

在report的Customer code里面进行书写的时候代码如下:

                       

红框框里面的’代表是注释的意思。 所以如果要使那段代码起到作用,可以delete这个符号。

二:自己创建dll文件。

代码如下:

注意:

1.在写dll文件的时候,应该在本project的properties目录下的

AssemblyInfo.cs: 里面加上[assembly:AllowPartialyTrustedCallers]

2.  所有的dll文件都要和本项目下bin文件里面的dll文件相同。

 

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace Paabo.WordProcessing.Common
{
    public class BarCodeProvider
    {
        #region 单例
        private static BarCodeProvider _Intance;
        public static BarCodeProvider Intance
        {
            get
            {
                if (_Intance == null)
                {
                    _Intance = new BarCodeProvider();
                }
                return _Intance;
            }
        }
        #endregion

        #region Size
        /// <summary>
        /// 图片宽度
        /// </summary>
        private int _Width = 200;
        public int Width
        {
            get { return _Width; }
            set { _Width = value; }
        }


        /// <summary>
        /// 图片高度
        /// </summary>
        private int _Height = 80;
        public int Height 
        {
            get { return _Height; }
            set { _Height = value; }
        }

        /// <summary>
        /// 明文高度
        /// </summary>
        private int _TextHeight = 25;
        public int TextHeight
        {
            get { return _TextHeight; }
            set { _TextHeight = value; }
        }

        #endregion

        #region 边距
        private int _Margin_Top = 5;

        /// <summary>
        /// 上边距
        /// </summary>
        public int Margin_Top
        {
            get { return _Margin_Top; }
            set { _Margin_Top = value; }
        }

        private int _Margin_Left = 5;

        /// <summary>
        /// 左边距
        /// </summary>
        public int Margin_Left
        {
            get { return _Margin_Left; }
            set { _Margin_Left = value; }
        }


        private int _Margin_Right = 5;

        /// <summary>
        /// 右边距
        /// </summary>
        public int Margin_Right
        {
            get { return _Margin_Right; }
            set { _Margin_Right = value; }
        }

        private int _Margin_Bottom = 5;
        /// <summary>
        /// 下边距
        /// </summary>
        public int Margin_Bottom
        {
            get { return _Margin_Bottom; }
            set { _Margin_Bottom = value; }
        }
        #endregion

        private Font _TextFont = new Font("宋体", 12);

        /// <summary>
        /// 明文字体
        /// </summary>
        public Font TextFont
        {
            get { return _TextFont; }
            set { _TextFont = value; }
        }

        private Pen _BlackPen = new Pen(Brushes.Black);
        private Pen _WhitePen = new Pen(Brushes.White);

        /// <summary>
        /// 将明文装换为编码
        /// </summary>
        /// <param name="text">明文内容</param>
        /// <returns>编码</returns>
        private string ConvertToBarCode(string text)
        {
            string code = string.Empty;
            foreach (char item in text)
            {
                int itemValue = item;
                code += Convert.ToString(itemValue, 2) + ",";
            }
            return code;
        }

        /// <summary>
        /// 将字符串生成条形图片
        /// </summary>
        /// <param name="text">明文内容</param>
        /// <returns></returns>
        public Bitmap CreateBarCodeImage(string text)
        {
            Bitmap map = new Bitmap(Width, Height);
            Graphics g = Graphics.FromImage(map);
            try
            {
                string code = ConvertToBarCode(text);
                code = string.Format("101{0}101", code);
                char[] array = code.ToCharArray();
                char[] textArray = text.ToCharArray();
                int lineWidth = (Width - Margin_Left-Margin_Right) / (array.Length - textArray.Length);
                int lineHeight = Height - TextHeight - Margin_Bottom;

                _BlackPen.Width = lineWidth;
                _WhitePen.Width = lineWidth;

                int x = 5;
                int topY = 5;
                int bottonY = Height - Margin_Bottom - TextHeight;

                int index = 0;
                char pItem = ' ';
                Pen pen = null;
                foreach (char item in array)
                {

                    if (item == ',')
                    {
                        string t = textArray[index].ToString();
                        g.DrawString(t, TextFont, Brushes.Black, new PointF(x - (lineWidth * 5), bottonY + 3));
                        index++;
                    }
                    else
                    {
                        if (pItem == ' ')
                        {
                            pen = _BlackPen;
                        }
                        else
                        {
                            if (item != pItem)
                            {
                                pen = pen == _BlackPen ? _WhitePen : _BlackPen;
                            }
                        }
                        pItem = item;
                        g.DrawLine(pen, new Point(x, topY), new Point(x, bottonY));
                    }
                    x += lineWidth;
                }
            }
            catch (Exception ex)
            {
                g.Clear(Color.White);
                g.DrawString(ex.Message, TextFont, Brushes.Black, new PointF(0, 0));
            }
            g.Save();
            return map;
        }
    }
}

但是要注意自己生成的dll文件和被人封装好的dll文件,在导入SSRS reoport的时候,操作是一样的。 都需要根据SQL和VS的版本不同的URL下面去配置文件。

 

 

你可能感兴趣的:(SSRS report 插入条形码)