如何 在 .net 下使用 zint 生成条形码

1、首先你需要编译好的 zint 条码库。什么,你没有?那没关系,请参看:在 win32 下编译 zint 条码库

2、启动 VISUAL STUDIO,新建一 “Windows Forms Application”,将 zint.dll、zlib1.dll 和 libpng15.dll 添加到项目中,属性窗口中设置“Copy to Output Directory”为”Copy always”。

3、打开“Form1.cs”代码文件,声明 zint:

 

        /// <summary>
        /// 条形码编码类型。
        /// </summary>
        public enum Symbology
        {
            BARCODE_CODE11 = 1,
            BARCODE_C25MATRIX = 2,
            BARCODE_C25INTER = 3,
            BARCODE_C25IATA = 4,
            BARCODE_C25LOGIC = 6,
            BARCODE_C25IND = 7,
            BARCODE_CODE39 = 8,
            BARCODE_EXCODE39 = 9,
            BARCODE_EANX = 13,
            BARCODE_EAN128 = 16,
            BARCODE_CODABAR = 18,
            BARCODE_CODE128 = 20,
            BARCODE_DPLEIT = 21,
            BARCODE_DPIDENT = 22,
            BARCODE_CODE16K = 23,
            BARCODE_CODE49 = 24,
            BARCODE_CODE93 = 25,
            BARCODE_FLAT = 28,
            BARCODE_RSS14 = 29,
            BARCODE_RSS_LTD = 30,
            BARCODE_RSS_EXP = 31,
            BARCODE_TELEPEN = 32,
            BARCODE_UPCA = 34,
            BARCODE_UPCE = 37,
            BARCODE_POSTNET = 40,
            BARCODE_MSI_PLESSEY = 47,
            BARCODE_FIM = 49,
            BARCODE_LOGMARS = 50,
            BARCODE_PHARMA = 51,
            BARCODE_PZN = 52,
            BARCODE_PHARMA_TWO = 53,
            BARCODE_PDF417 = 55,
            BARCODE_PDF417TRUNC = 56,
            BARCODE_MAXICODE = 57,
            BARCODE_QRCODE = 58,
            BARCODE_CODE128B = 60,
            BARCODE_AUSPOST = 63,
            BARCODE_AUSREPLY = 66,
            BARCODE_AUSROUTE = 67,
            BARCODE_AUSREDIRECT = 68,
            BARCODE_ISBNX = 69,
            BARCODE_RM4SCC = 70,
            BARCODE_DATAMATRIX = 71,
            BARCODE_EAN14 = 72,
            BARCODE_CODABLOCKF = 74,
            BARCODE_NVE18 = 75,
            BARCODE_JAPANPOST = 76,
            BARCODE_KOREAPOST = 77,
            BARCODE_RSS14STACK = 79,
            BARCODE_RSS14STACK_OMNI = 80,
            BARCODE_RSS_EXPSTACK = 81,
            BARCODE_PLANET = 82,
            BARCODE_MICROPDF417 = 84,
            BARCODE_ONECODE = 85,
            BARCODE_PLESSEY = 86,

            BARCODE_TELEPEN_NUM = 87,
            BARCODE_ITF14 = 89,
            BARCODE_KIX = 90,
            BARCODE_AZTEC = 92,
            BARCODE_DAFT = 93,
            BARCODE_MICROQR = 97,

            BARCODE_HIBC_128 = 98,
            BARCODE_HIBC_39 = 99,
            BARCODE_HIBC_DM = 102,
            BARCODE_HIBC_QR = 104,
            BARCODE_HIBC_PDF = 106,
            BARCODE_HIBC_MICPDF = 108,
            BARCODE_HIBC_BLOCKF = 110,
            BARCODE_HIBC_AZTEC = 112,

            BARCODE_AZRUNE = 128,
            BARCODE_CODE32 = 129,
            BARCODE_EANX_CC = 130,
            BARCODE_EAN128_CC = 131,
            BARCODE_RSS14_CC = 132,
            BARCODE_RSS_LTD_CC = 133,
            BARCODE_RSS_EXP_CC = 134,
            BARCODE_UPCA_CC = 135,
            BARCODE_UPCE_CC = 136,
            BARCODE_RSS14STACK_CC = 137,
            BARCODE_RSS14_OMNI_CC = 138,
            BARCODE_RSS_EXPSTACK_CC = 139,
            BARCODE_CHANNEL = 140,
            BARCODE_CODEONE = 141,
            BARCODE_GRIDMATRIX = 142
        }
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct ZintSymbolStruct
        {
            public Symbology symbology;

            public int height;
            public int whitespace_width;
            public int border_width;

            public int output_options;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string fgcolour;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string bgcolour;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
            public string outfile;

            public float scale;
            public int option_1;
            public int option_2;
            public int option_3;
            public int show_hrt;

            public int input_mode;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
            public string text;

            public int rows;
            public int width;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
            public string primary;

            [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 25454)]
            public byte[] encoded_data;

            [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I4, SizeConst = 178)]
            public int[] row_height;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
            public string errtxt;

            public IntPtr bitmap;

            public int bitmap_width;
            public int bitmap_height;
            public IntPtr rendered;
        }
        [DllImport("zint.dll",
            CallingConvention = CallingConvention.StdCall,
            EntryPoint = "ZBarcode_Create")]
        public extern static IntPtr InitZint();

        [DllImport("zint.dll",
            CallingConvention = CallingConvention.StdCall,
            EntryPoint = "ZBarcode_Encode_and_Buffer",
            CharSet = CharSet.Ansi)]
        public extern static int ZintEncode(
             ref ZintSymbolStruct symbol,
             string input,
             int length,
             int rotate_angle);

        [DllImport("zint.dll",
            CallingConvention = CallingConvention.StdCall,
            EntryPoint = "ZBarcode_Encode_and_Print",
            CharSet = CharSet.Ansi)]
        public extern static int ZintEncodeAndPrint(
             ref ZintSymbolStruct symbol,
             string input,
             int length,
             int rotate_angle);

 

4、在窗体上绘制条码:

        protected override void OnPaint(PaintEventArgs e)
        {
            // 初始化编码器
            ZintSymbolStruct symbol = (ZintSymbolStruct)Marshal.PtrToStructure(InitZint(), typeof(ZintSymbolStruct));
            // 设置编码类型
            symbol.symbology = Symbology.BARCODE_QRCODE;
            // 缩放
            symbol.scale = 5;
            // 编码内容
            string s = "0123456789";
            // 编码
            ZintEncode(ref symbol, s, 0, 0);

            // 创建一个位图,以便绘制条码
            byte[] bitmapData = new byte[symbol.bitmap_width * symbol.bitmap_height * 3];
            Marshal.Copy(symbol.bitmap, bitmapData, 0, bitmapData.Length);
            Bitmap bitmap = new Bitmap(symbol.bitmap_width, symbol.bitmap_height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
            System.Drawing.Imaging.BitmapData bmpData = bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap.PixelFormat);
            IntPtr ptr = bmpData.Scan0;
            int bytes = bmpData.Stride * bitmap.Height;
            byte[] rgbValues = new byte[bytes];
            Marshal.Copy(ptr, rgbValues, 0, bytes);

            // Zint 编码生成的位图数据存放格式为 RGB,需要将其转换为 BMP 数据存放格式 BGR
            int row, col;
            byte red, green, blue;
            int i = 0;
            int l = 0;
            for (row = 0; row < symbol.bitmap_height; row++)
            {
                l = bmpData.Stride * row;
                for (col = 0; col < symbol.bitmap_width; col++)
                {
                    red = bitmapData[i];
                    green = bitmapData[i + 1];
                    blue = bitmapData[i + 2];

                    rgbValues[l] = blue;
                    rgbValues[l + 1] = green;
                    rgbValues[l + 2] = red;

                    i += 3;
                    l += 3;
                }
            }
            System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
            bitmap.UnlockBits(bmpData);

            e.Graphics.DrawImage(bitmap, 12, 12);
        }
5、将目标平台更改为“x86”,运行后即可查看效果。

 

源码下载

时间: 2024-08-07 08:25:58

如何 在 .net 下使用 zint 生成条形码的相关文章

使用html2canvas实现批量生成条形码

/*前台代码*/ 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GenerateCodeBar.aspx.cs" 2 Inherits="CodeBar_GenerateCodeBar" EnableEventValidation="false" %> 3 4 <!DOCTYPE html PUBLIC "-/

php生成条形码

前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成平行线的图案.在日常生活中,条形码可以标出物品的生产国.制造厂家.商品名称.生产日期.图书分类号.邮件地点起止.类别.日期等许多信息.条形码编码格式具体请参考 打印出来的优惠券,商家需要用验证器读取条形码,来获得其有效性

C#生成条形码图片的简单方法

本文实例讲述了C#生成条形码图片的简单方法.分享给大家供大家参考.具体实现方法如下: 实现原理: 其实Windows本身就有一个字体是用来显示条形码的. 只要将数字改为这种字体就变成了条形码. windows字体库下,有如下八种字体可以用来将数字转换成条形码: Code39AzaleaNarrow1 Code39AzaleaNarrow2 Code39AzaleaNarrow3 Code39AzaleaRegular1 Code39AzaleaRegular2 Code39AzaleaWide1

史上最简洁C# 生成条形码图片思路及示例分享

在网上看到一些人写关于条形码的代码都很长,有的甚至拿来卖,所以查了下资料,希望能对大家有帮助. 我的实现原理是: 其实Windows本身就有一个字体是用来显示条形码的. 只要将数字改为这种字体就变成了条形码. windows字体库下,有如下八种字体可以用来将数字转换成条形码: 代码如下: Code39AzaleaNarrow1 Code39AzaleaNarrow2 Code39AzaleaNarrow3 Code39AzaleaRegular1 Code39AzaleaRegular2 Cod

Excel批量生成条形码

项目要求需要将信息做成条形码的形式,以便通过手持设备直接查看信息,因本次项目信息为固定信息,不需随机生成,故采用本方法: 代码随机生成二维码暂时没有接触,后续有时间会研究 步骤: 1.新建 Excel 文档,将要生成条形码的信息写入 A 列 2.在 B1 中输入:(注意:中间无空格回车符 ,该src 引用属性根据自己需求设置,text为条形码内容) <table><img src="http://t.ashiyue.com/img/barcodegen/html/image.p

java 生成条形码

今天有个新的需求,要在系统中自动生成条形码,之前也没做过生成条形码的功能,今天正好研究一下. 解决方法: Java 生成条码的方案 :    jbarcode.barcode4j.zxing 其实都可以生成一维码(条形码)以下我们就用barcode4j为例: 在pom.xml中引入 <!-- https://mvnrepository.com/artifact/net.sf.barcode4j/barcode4j-light --> <dependency> <groupId

GP-3120TL怎么生成条形码

GP-3120TL是条码打印机,它只负责打印.生成条形码的话需要用到条码生成软件,在条码生成软件中生成你想要的条码.条码生成软件你可以选择专业的条码软件,比如:条码标签打印软件,也可以用网上的在线条码生成器.专业的条码生成软件各种打印机通用,支持普通打印机(彩色喷墨或激光打印机)条码打印机.数码印刷机.喷码打印机以及喷绘写真机等,这里主要介绍的是GP-3120T条码打印机,下面介绍下条码生成软件生成条形码并连接GP-3120TL条码打印机进行打印的步骤: 1.打开条码生成软件,设置一下纸张和标签

C#生成条形码

C#利用Zxing.net生成条形码和二维码并实现打印的功能     开篇:zxing.net是.net平台下编解条形码和二维码的工具. 下载地址:http://pan.baidu.com/s/1i3BXPLN Step1:使用VS2010新建一个窗体程序项目: Step2:添加三个类:分别是BarCodeClass.cs.DocementBase.cs.imageDocument.cs.(下一步贴出这些类的代码);;;;添加下载回来的引用zxing.dll. >说明: <1>   Ba

&lt;经验杂谈&gt;C#生成条形码

虽然二维码满天飞,但也不能忘了条形码,本篇介绍可以在C#中使用的1D/2D编码解码器.条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码: 条形码的标准: 条形码的标准有ENA条形码.UPC条形码.二五条形码.交叉二五条形码.库德巴条形码.三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码.EAN商品条形码亦称通用商品条形码,由国际物品编码协会制定,通用于世界各地,是目前国际上使用最广泛的一种商品条形码.我国目前在国内推行使用的也是这种商品条形码.EAN商品条形码分