rdlc报表显示条码 .
1.條碼的生成:
private Bitmap GetCode39(string strSource)
??????? {
??????????? int x = 5; //左邊界?????
??????????? int y = 0; //上邊界?????
??????????? int WidLength = 2; //粗BarCode長度?????
??????????? int NarrowLength = 1; //細BarCode長度?????
??????????? int BarCodeHeight = 24; //BarCode高度?????
??????????? int intSourceLength = strSource.Length;
??????????? string strEncode = "010010100"; //編碼字串 初值為 起始符號 *??????
??????????? string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; //Code39的字母?????
??????????? string[] Code39 = //Code39的各字母對應碼
??????????????? {?????
??????????????????? /**//* 0 */ "000110100",??????
??????????????????? /**//* 1 */ "100100001",?????
??????????????????? /**//* 2 */ "001100001",??????
??????????????????? /**//* 3 */ "101100000",?????
??????????????????? /**//* 4 */ "000110001",??????
??????????????????? /**//* 5 */ "100110000",??????
??????????????????? /**//* 6 */ "001110000",??????
??????????????????? /**//* 7 */ "000100101",?????
??????????????????? /**//* 8 */ "100100100",??????
??????????????????? /**//* 9 */ "001100100",??????
??????????????????? /**//* A */ "100001001",??????
??????????????????? /**//* B */ "001001001",?????
??????????????????? /**//* C */ "101001000",??????
??????????????????? /**//* D */ "000011001",??????
??????????????????? /**//* E */ "100011000",??????
??????????????????? /**//* F */ "001011000",?????
??????????????????? /**//* G */ "000001101",??????
??????????????????? /**//* H */ "100001100",??????
??????????????????? /**//* I */ "001001100",??????
??????????????????? /**//* J */ "000011100",?????
??????????????????? /**//* K */ "100000011",??????
??????????????????? /**//* L */ "001000011",??????
??????????????????? /**//* M */ "101000010",??????
??????????????????? /**//* N */ "000010011",?????
??????????????????? /**//* O */ "100010010",??????
??????????????????? /**//* P */ "001010010",??????
??????????????????? /**//* Q */ "000000111",??????
??????????????????? /**//* R */ "100000110",?????
??????????????????? /**//* S */ "001000110",??????
??????????????????? /**//* T */ "000010110",??????
??????????????????? /**//* U */ "110000001",??????
??????????????????? /**//* V */ "011000001",?????
??????????????????? /**//* W */ "111000000",??????
??????????????????? /**//* X */ "010010001",??????
??????????????????? /**//* Y */ "110010000",??????
??????????????????? /**//* Z */ "011010000",?????
??????????????????? /**//* - */ "010000101",??????
??????????????????? /**//* . */ "110000100",??????
??????????????????? /**//*' '*/ "011000100",?????
??????????????????? /**//* $ */ "010101000",?????
??????????????????? /**//* / */ "010100010",??????
??????????????????? /**//* + */ "010001010",??????
??????????????????? /**//* % */ "000101010",??????
??????????????????? /**//* * */ "010010100"?
??????????????? };
??????????? strSource = strSource.ToUpper();
??????????? //實作圖片?????
??????????? Bitmap objBitmap = new Bitmap(((WidLength * 3 + NarrowLength * 7) * (intSourceLength + 2)) + (x * 2), BarCodeHeight + (y * 2));
??????????? Graphics objGraphics = Graphics.FromImage(objBitmap);
??????????? //宣告GDI+繪圖介面?????
??????????? //填上底色?????
??????????? objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height);
??????????? for (int i = 0; i < intSourceLength; i++)
??????????? {
??????????????? //檢查是否有非法字元?????????
??????????????? if (AlphaBet.IndexOf(strSource[i]) == -1 || strSource[i] == '*')
??????????????? {
??????????????????? objGraphics.DrawString("含有非法字元", SystemFonts.DefaultFont, Brushes.Red, x, y);
??????????????????? return objBitmap;
??????????????? }
??????????????? //查表編碼?????????
??????????????? strEncode = string.Format("{0}0{1}", strEncode, Code39[AlphaBet.IndexOf(strSource[i])]);
??????????? }
??????????? strEncode = string.Format("{0}0010010100", strEncode);
??????????? //補上結束符號 *??????
??????????? int intEncodeLength = strEncode.Length;
??????????? //編碼後長度?????
??????????? int intBarWidth;
??????????? for (int i = 0; i < intEncodeLength; i++)
??????????? //依碼畫出Code39 BarCode?????
??????????? {
??????????????? intBarWidth = strEncode[i] == '1' ? WidLength : NarrowLength;
??????????????? objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White, x, y, intBarWidth, BarCodeHeight); x += intBarWidth;
??????????? }
??????????? return objBitmap;
??????? }
?
2.生成條碼圖片
MemoryStream oStream2 = new MemoryStream();
??????????????????????? try
??????????????????????? {
??????????????????????????? Bitmap oBmp2 = GetCode39(goodsNum);
??????????????????????????? oBmp2.Save(oStream2, System.Drawing.Imaging.ImageFormat.Png);
??????????????????????????? //圖片路徑
??????????????????????????? oBmp2.Save(url + goodsName + ".png",?? System.Drawing.Imaging.ImageFormat.Png);
??????????????????????????? oBmp2.Dispose();
??????????????????????? }
??????????????????????? finally
??????????????????????? {
??????????????????????????? oStream2.Dispose();
??????????????????????? }
3.讀取條碼圖片轉化為二進制流
??????????????????????? FileStream file = new FileStream(url + freightBill + ".png", FileMode.Open, FileAccess.Read);
??????????????????????? Byte[] bytGoodsCode = new Byte[file.Length];
??????????????????????? file.Read(bytGoodsCode, 0, bytGoodsCode.Length);
??????????????????????? file.Close();
?
4.將條碼圖片保存進數據庫
5.將條碼圖片在報表上顯示出來:
? 在報表上拖放一個image圖像控件,Source設置為DataBase(External為嵌入圖片,Embedded為外部圖片),Value 選擇條碼字段,設置MIMEType屬性。
?
這樣就能看見報表上面的圖片了。
注:本來數據庫存放條碼圖片的URL,但是在報表上用Embedded顯示圖片的時候,給image控件綁定了條碼圖片的URL值,但是運行圖片顯示不出,image控件的SRC="";還沒有找到問題。
轉載于:https://www.cnblogs.com/ewyb/archive/2011/10/26/2225081.html
總結
以上是生活随笔為你收集整理的rdlc报表显示条码 .的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: N-Case 律师事务所管理系统安装与卸
- 下一篇: 求一个好听的芭比娃娃名字。