中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

以 .NET 創(chuàng)建 Code 39 條碼圖片 供水晶報(bào)表打印

教導(dǎo)如何用 C# 創(chuàng)建 Code 39 編碼的「條碼 (barcode)」圖片,以供 ASP.NET + Crystal Reports 水晶報(bào)表呈現(xiàn)和打印此條碼。本帖提供 ASP.NET 3.5 示例下載。

本帖的示例下載點(diǎn):http://files.cnblogs.com/WizardWu/100914.zip

執(zhí)行本示例,需要 SQL Server 的 Northwind 數(shù)據(jù)庫(kù),以及 VS 2008 或 IIS,另還需要 Crystal Reports 2008 標(biāo)準(zhǔn)版 (SAP 公司的網(wǎng)站可下載完整的安裝程序,無(wú)使用限制,但安裝前需要輸入安裝序號(hào))。
若是 VS 2005/2008 內(nèi)置的免費(fèi)簡(jiǎn)易版 Crystal Reports,由于不具備「動(dòng)態(tài)截取網(wǎng)絡(luò)圖片」的功能、無(wú)法抓取既有的條碼圖片,因此不適用本帖的教學(xué)。
  日前做 ASP.NET 的項(xiàng)目用到 Crystal Reports 水晶報(bào)表,必須要能在瀏覽器中的報(bào)表顯示和打印條碼。原本我采用「字體 (font)」的方式產(chǎn)生條碼 (水晶報(bào)表內(nèi)置將某個(gè)數(shù)據(jù)庫(kù)字段,直接轉(zhuǎn)成條形碼的功能),但后來(lái)發(fā)現(xiàn)這種做法,布署時(shí)必須在每一臺(tái)客戶(hù)端的 Windows 上安裝特定的條碼字體,如:free3of9 (可免費(fèi)下載),才能在客戶(hù)端瀏覽器正確顯示和打印條碼。因此后來(lái)?xiàng)売眠@種做法,改用「圖片」的方式產(chǎn)生條碼。
      做法是先用 C# 和 .NET 的繪圖 API,搭配一維條碼里最普遍的 Code 39 編碼其規(guī)則,寫(xiě)一個(gè)可創(chuàng)建條碼圖片的 .ashx (HttpHandler) 或 .ASPx,(這個(gè)文件放在報(bào)表的同一個(gè) ASP.NET 項(xiàng)目里即可,不必發(fā)布成 service)。接著在 Crystal Reports 文件里,隨便插入一張圖片,透過(guò)水晶報(bào)表標(biāo)準(zhǔn)版才有的「動(dòng)態(tài)截取網(wǎng)絡(luò)圖片」功能 (Visual Studio 內(nèi)置的免費(fèi)版水晶報(bào)表無(wú)此功能),去抓取這張已創(chuàng)建的條碼圖片,并要能動(dòng)態(tài)傳入?yún)?shù),以讓報(bào)表在換頁(yè)時(shí),條碼可跟著變動(dòng)內(nèi)容。
      首先用 C# 和 .NET 的繪圖 API,搭配一維條碼里最普遍的 Code 39 編碼其規(guī)則,寫(xiě)一個(gè)可創(chuàng)建條碼圖片的組件。請(qǐng)參考本帖的下載示例,直接執(zhí)行 Code39Handler.ashx,并透過(guò)瀏覽器的 URL 地址欄,手動(dòng)輸入條碼的參數(shù)作測(cè)試。執(zhí)行結(jié)果和源代碼 (這種組件通常是要錢(qián)的) 如下:

 

圖 1 用 C# 和 .NET 的繪圖 API,搭配 Code 39 編碼規(guī)則產(chǎn)生的條碼圖片
     

以下代碼,是用 C# 和 .NET 的繪圖 API,搭配 Code 39 編碼規(guī)則產(chǎn)生條碼圖片。

Code39Handler<%@ WebHandler Language="C#" Class="Code39Handler" %>

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;

/// <summary>
/// 用 .NET 繪圖 API,搭配條碼最普遍的 Code 39 編碼規(guī)則 (一般超商的讀條碼機(jī)都可讀),產(chǎn)生條碼圖檔
/// </summary>
public class Code39Handler : IHttpHandler {
    
    
public void ProcessRequest (HttpContext context) {
        
//context.Response.ContentType = "text/plain";
        
//context.Response.Write("Hello World");

        
//Logic to retrieve the image file
        
//context.Response.ContentType = "image/jpeg";
        
//context.Response.WriteFile("MyImage01.jpg");

        
string mycode = context.Request["code"];

        
string 字串;
        
string 字元;
        
//字串 = "*-%$*"
        字串 = "*" + mycode + "*";  //Code 39 的特性是前、後置碼會(huì)標(biāo)識(shí)「星號(hào)(*)」,表示開(kāi)始和結(jié)束

        
int 畫(huà)布高 = 35;
        
int 畫(huà)布寬 = 0;
        
int 筆x = 0;
        
int 筆y = 20;
        
//int 筆寬 = 0;
        
        
if (!string.IsNullOrEmpty(mycode))
        {
            畫(huà)布寬 
= 字串.Length * 13;

            Bitmap BMP 
= new Bitmap(畫(huà)布寬, 畫(huà)布高, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
            Graphics G 
= Graphics.FromImage(BMP);
            G.TextRenderingHint 
= TextRenderingHint.AntiAlias;
            G.Clear(Color.White);

            Brush 筆刷1 
= new SolidBrush(Color.White);
            G.SmoothingMode 
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            G.FillRectangle(筆刷1, 
00, 畫(huà)布寬, 畫(huà)布高);

            
for (int i = 0; i < 字串.Length; i++)
            {
                
//取得 Code 39 碼的規(guī)則
                字元 = this.genBarcode(字串.Substring(i, 1).ToUpper());

                
for (int j = 0; j < 4; j++)
                {
                    
if (字元.Substring(j, 1).Equals("0"))
                    {
                        G.DrawLine(Pens.Black, 筆x, 
0, 筆x, 筆y);
                    }
                    
else
                    {
                        G.DrawLine(Pens.Black, 筆x, 
0, 筆x, 筆y);
                        G.DrawLine(Pens.Black, 筆x 
+ 10, 筆x + 1, 筆y);
                        筆x 
+= 1;
                    }

                    筆x 
+= 1;

                    
if (字元.Substring(j + 51).Equals("0"))
                    {
                        G.DrawLine(Pens.White, 筆x, 
0, 筆x, 筆y);
                    }
                    
else
                    {
                        G.DrawLine(Pens.White, 筆x, 
0, 筆x, 筆y);
                        G.DrawLine(Pens.White, 筆x 
+ 10, 筆x + 1, 筆y);
                        筆x 
+= 1;
                    }

                    筆x 
+= 1;
                } 
//end of loop

                
if (字元.Substring(41).Equals("0"))
                {
                    G.DrawLine(Pens.Black, 筆x, 
0, 筆x, 筆y);
                }
                
else
                {
                    G.DrawLine(Pens.Black, 筆x, 
0, 筆x, 筆y);
                    G.DrawLine(Pens.Black, 筆x 
+ 10, 筆x + 1, 筆y);
                    筆x 
+= 1;
                }

                筆x 
+= 2;
            } 
//end of loop

            
int x = 0;
            
int addx = 13;

            G.DrawString(
"-"new Font("Arial"10, FontStyle.Italic), SystemBrushes.WindowText, new PointF(x, 20));
            x 
+= addx;

            
for (int k = 0; k < mycode.Length; k++)
            {
                G.DrawString(mycode.Substring(k, 
1), new Font("Arial"10, FontStyle.Italic), SystemBrushes.WindowText, new PointF(x, 20));
                x 
= x + addx;
            }

            G.DrawString(
"-"new Font("Arial"10, FontStyle.Italic), SystemBrushes.WindowText, new PointF(x, 20));
            BMP.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            G.Dispose();
            BMP.Dispose();

        }
        
else
        {
            畫(huà)布寬 
= 100;

            Bitmap BMP 
= new Bitmap(畫(huà)布寬, 畫(huà)布高, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
            Graphics G 
= Graphics.FromImage(BMP);
            G.TextRenderingHint 
= TextRenderingHint.AntiAlias;
            G.Clear(Color.White);
            
            
//未給參數(shù)時(shí)顯示的提示內(nèi)容
            G.DrawString("無(wú)條碼產(chǎn)生"new Font("宋體"12, FontStyle.Regular), SystemBrushes.WindowText, new PointF(020));

            BMP.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            G.Dispose();
            BMP.Dispose();
        }
    }


    
// 規(guī)則可參考網(wǎng)址 1:http://blog.csdn.NET/xuzhongxuan/archive/2008/05/28/2489358.ASPx
    
// 規(guī)則可參考網(wǎng)址 2:http://blog.163.com/zryou/blog/static/6903184200971704226450/
    /// <summary>
    
/// Code 39 碼的規(guī)則。
    
/// Code 39 碼可使用的字元如下:0~9、A~Z、+、-、*、/、%、$、. 及空白字元。    
    
/// </summary>
    
/// <param name="code"></param>
    
/// <returns></returns>
    public string genBarcode(string code)
    {
        
switch (code)
        {
            
case "0":
                code 
= "001100100";
                
break;
            
case "1":
                code 
= "100010100";
                
break;
            
case "2":
                code 
= "010010100";
                
break;
            
case "3":
                code 
= "110000100";
                
break;
            
case "4":
                code 
= "001010100";
                
break;
            
case "5":
                code 
= "101000100";
                
break;
            
case "6":
                code 
= "011000100";
                
break;
            
case "7":
                code 
= "000110100";
                
break;
            
case "8":
                code 
= "100100100";
                
break;
            
case "9":
                code 
= "010100100";
                
break;
            
case "A":
                code 
= "100010010";
                
break;
            
case "B":
                code 
= "010010010";
                
break;
            
case "C":
                code 
= "110000010";
                
break;
            
case "D":
                code 
= "001010010";
                
break;
            
case "E":
                code 
= "101000010";
                
break;
            
case "F":
                code 
= "011000010";
                
break;
            
case "G":
                code 
= "000110010";
                
break;
            
case "H":
                code 
= "100100010";
                
break;
            
case "I":
                code 
= "010100010";
                
break;
            
case "J":
                code 
= "001100010";
                
break;
            
case "K":
                code 
= "100010001";
                
break;
            
case "L":
                code 
= "010010001";
                
break;
            
case "M":
                code 
= "110000001";
                
break;
            
case "N":
                code 
= "001010001";
                
break;
            
case "O":
                code 
= "101000001";
                
break;
            
case "P":
                code 
= "011000001";
                
break;
            
case "Q":
                code 
= "000110001";
                
break;
            
case "R":
                code 
= "100100001";
                
break;
            
case "S":
                code 
= "010100001";
                
break;
            
case "T":
                code 
= "001100001";
                
break;
            
case "U":
                code 
= "100011000";
                
break;
            
case "V":
                code 
= "010011000";
                
break;
            
case "W":
                code 
= "110001000";
                
break;
            
case "X":
                code 
= "001011000";
                
break;
            
case "Y":
                code 
= "101001000";
                
break;
            
case "Z":
                code 
= "011001000";
                
break;
            
case "*":
                code 
= "001101000";
                
break;
            
case "-":
                code 
= "000111000"//好像辨識(shí)不出來(lái)
                break;
            
case "%":
                code 
= "100101000"//好像辨識(shí)不出來(lái)
                break;
            
case "$":
                code 
= "010101000"//好像辨識(shí)不出來(lái)
                break;
            
default:
                code 
= "010101000"//都不是就印 $
                break;
        }
        
        
return code;
    }
    
 
    
public bool IsReusable {
        
get {
            
return false;
        }
    }

}

NET技術(shù)以 .NET 創(chuàng)建 Code 39 條碼圖片 供水晶報(bào)表打印,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲欧美在线视频 | 一级片av| 999久久久精品 | 欧美一区二区三区四区在线 | 亚洲成a人片 | 亚洲一区二区三区免费在线观看 | 一区二区三区视频在线观看 | 99久久免费精品国产免费高清 | 欧美日韩精品 | 日韩免费福利视频 | 久久久久亚洲精品中文字幕 | 精品福利一区二区三区 | 国产精品一区二 | 日本在线中文 | www日本在线| 精品一区二区三区免费视频 | 久久久久久成人 | 国产一区二区三区在线 | 国产成人福利在线 | 国产亚洲网站 | 成年人在线观看视频 | 日韩精品一区二区三区 | 国产黄色一级电影 | 91伊人| 国产精品无 | 玖玖在线免费视频 | 中文字幕精品一区二区三区精品 | 中文字幕 在线观看 | 久久99久久98精品免观看软件 | 国产亚洲一级 | 国产一区二区精品在线观看 | 99视频 | 成人在线视频观看 | 成人综合一区 | 国产免费又黄又爽又刺激蜜月al | 亚洲一区二区免费视频 | 黄色一级网 | 久久精品国产99国产精品 | 亚洲精品视频在线观看免费 | 欧美激情黄色 | 在线中文字幕视频 |