zxing .net 多种条码格式的生成

下载地址:http://zxingnet.codeplex.com/

zxing.net是.net平台下编解条形码和二维码的工具,使用非常方便。

本文主要说明一下多种类型条码的生成。

适用的场景,标签可视化设计时,自定义条码类型,预览。

遍历zxing支持的全部条码类型

if (rb == rb1wm)
            {
                foreach (BarcodeFormat format in Enum.GetValues(typeof(BarcodeFormat)))
                {
                    if (format != BarcodeFormat.All_1D)
                        cbxBarcodeFormat.Items.Add(format.ToString());
                }
                cbxBarcodeFormat.Items.Remove(BarcodeFormat.QR_CODE.ToString());
                cbxBarcodeFormat.Items.Remove(BarcodeFormat.AZTEC.ToString());
                cbxBarcodeFormat.Items.Remove(BarcodeFormat.DATA_MATRIX.ToString());
                cbxBarcodeFormat.Items.Remove(BarcodeFormat.PDF_417.ToString());
            }
            if (rb == rb2wm)
            {
                cbxBarcodeFormat.Items.Add(BarcodeFormat.QR_CODE.ToString());
                cbxBarcodeFormat.Items.Add(BarcodeFormat.AZTEC.ToString());
                cbxBarcodeFormat.Items.Add(BarcodeFormat.DATA_MATRIX.ToString());
                cbxBarcodeFormat.Items.Add(BarcodeFormat.PDF_417.ToString());
            }

根据选择的类型生成条码

Bitmap bitmap = new Bitmap(pbxBarcode.Width, pbxBarcode.Height);
            Graphics g = Graphics.FromImage(bitmap);
            g.Clear(Color.White);
            Format = (BarcodeFormat)Enum.Parse(typeof(BarcodeFormat), cbxBarcodeFormat.SelectedItem.ToString());
            try
            {
                var options = new ZXing.Common.EncodingOptions
                {
                    PureBarcode = !chxDisplayBarcode.Checked
                };
                #region 根据条码类型Write Image 
                switch (Format)
                {
                    case BarcodeFormat.QR_CODE:
                        #region QRCode
                        if (cbxErrorLevel.SelectedItem.ToString().Equals("L"))
                            ErrorCorrectionLevel = QR_ErrorCorrectionLevel.L;
                        if (cbxErrorLevel.SelectedItem.ToString().Equals("H"))
                            ErrorCorrectionLevel = QR_ErrorCorrectionLevel.H;
                        if (cbxErrorLevel.SelectedItem.ToString().Equals("M"))
                            ErrorCorrectionLevel = QR_ErrorCorrectionLevel.M;
                        if (cbxErrorLevel.SelectedItem.ToString().Equals("Q"))
                            ErrorCorrectionLevel = QR_ErrorCorrectionLevel.Q;
                        ErrorCorrectionLevel level = null;
                        switch (ErrorCorrectionLevel)
                        {
                            case QR_ErrorCorrectionLevel.H:
                                level = ZXing.QrCode.Internal.ErrorCorrectionLevel.H;
                                break;
                            case QR_ErrorCorrectionLevel.M:
                                level = ZXing.QrCode.Internal.ErrorCorrectionLevel.M;
                                break;
                            case QR_ErrorCorrectionLevel.L:
                                level = ZXing.QrCode.Internal.ErrorCorrectionLevel.L;
                                break;
                            case QR_ErrorCorrectionLevel.Q:
                                level = ZXing.QrCode.Internal.ErrorCorrectionLevel.Q;
                                break;
                        }
                        QrCodeEncodingOptions qr_options = new QrCodeEncodingOptions
                        {
                            Margin = 0,
                            DisableECI = true,
                            CharacterSet = "UTF-8",
                            ErrorCorrection = level,
                            PureBarcode = !chxDisplayBarcode.Checked,
                            Width = pbxBarcode.Width,
                            Height = pbxBarcode.Height
                        };
                        var qrWriter = new ZXing.BarcodeWriter();
                        qrWriter.Format = BarcodeFormat.QR_CODE;
                        qrWriter.Options = qr_options;
                        #endregion
                        bitmap = qrWriter.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(qrWriter.Options, Format, bitmap);
                        break;
                    case BarcodeFormat.PDF_417:
                        #region PDF417
                        PDF417EncodingOptions pdf_options = new PDF417EncodingOptions
                        {
                            Margin = 0,
                            DisableECI = true,
                            CharacterSet = "UTF-8",
                            Width = pbxBarcode.Width,
                            Height = pbxBarcode.Height,
                            PureBarcode = !chxDisplayBarcode.Checked
                        };
                        var pdf417Writer = new ZXing.BarcodeWriter();
                        pdf417Writer.Format = BarcodeFormat.PDF_417;
                        pdf417Writer.Options = pdf_options;
                        #endregion
                        bitmap = pdf417Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(pdf417Writer.Options, Format, bitmap);
                        break;
                    case BarcodeFormat.DATA_MATRIX:
                        #region DataMatrix
                        DatamatrixEncodingOptions dataMatrix_options = new DatamatrixEncodingOptions
                        {
                            Margin = 0,
                            SymbolShape = (ZXing.Datamatrix.Encoder.SymbolShapeHint)(Enum.Parse(typeof(ZXing.Datamatrix.Encoder.SymbolShapeHint), cbxDataMatrixOption.SelectedItem.ToString())),
                            Width = pbxBarcode.Width,
                            Height = pbxBarcode.Height,
                            PureBarcode = !chxDisplayBarcode.Checked,
                        };
                        var dataMatrixWriter = new ZXing.BarcodeWriter();
                        dataMatrixWriter.Format = BarcodeFormat.DATA_MATRIX;
                        dataMatrixWriter.Options = dataMatrix_options;
                        #endregion
                        bitmap = dataMatrixWriter.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(dataMatrixWriter.Options, Format, bitmap);
                        break;
                    case BarcodeFormat.AZTEC:
                        #region Aztec
                        ZXing.Aztec.AztecEncodingOptions aztecEncodingOptions = new ZXing.Aztec.AztecEncodingOptions
                        {
                            Margin = 0,
                            ErrorCorrection = 2,
                            PureBarcode = !chxDisplayBarcode.Checked,
                            Layers = 16
                        };
                        var aztecWriter = new ZXing.BarcodeWriter();
                        aztecWriter.Format = BarcodeFormat.AZTEC;
                        aztecWriter.Options = aztecEncodingOptions;
                        #endregion
                        bitmap = aztecWriter.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(aztecWriter.Options, Format, bitmap);
                        break;
                    case BarcodeFormat.CODE_128:
                        #region Code128
                        ZXing.OneD.Code128EncodingOptions code128_options = new ZXing.OneD.Code128EncodingOptions
                        {
                            Margin = 0,
                            PureBarcode = !chxDisplayBarcode.Checked,
                            Width = pbxBarcode.Width,
                            Height = pbxBarcode.Height,
                            ForceCodesetB = true
                        };
                        var code128_Writer = new ZXing.BarcodeWriter();
                        code128_Writer.Format = BarcodeFormat.CODE_128;
                        code128_Writer.Options = code128_options;
                        #endregion
                        bitmap = code128_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(code128_Writer.Options, Format, bitmap);
                        break;
                    case BarcodeFormat.CODABAR:
                        var codeBar_Writer = new ZXing.BarcodeWriter();
                        codeBar_Writer.Format = BarcodeFormat.CODABAR;
                        codeBar_Writer.Options = options;
                        bitmap = codeBar_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.EAN_13:
                        var ean13_Writer = new ZXing.BarcodeWriter();
                        ean13_Writer.Format = BarcodeFormat.EAN_13;
                        ean13_Writer.Options = options;
                        bitmap = ean13_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.EAN_8:
                        var ean8_Writer = new ZXing.BarcodeWriter();
                        ean8_Writer.Format = BarcodeFormat.EAN_8;
                        ean8_Writer.Options = options;
                        bitmap = ean8_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.CODE_39:
                        var code39_Writer = new ZXing.BarcodeWriter();
                        code39_Writer.Format = BarcodeFormat.CODE_39;
                        code39_Writer.Options = options;
                        bitmap = code39_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.UPC_A:
                        var upca_Writer = new ZXing.BarcodeWriter();
                        upca_Writer.Format = BarcodeFormat.UPC_A;
                        upca_Writer.Options = options;
                        bitmap = upca_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.UPC_E:
                        var upce_Writer = new ZXing.BarcodeWriter();
                        upce_Writer.Format = BarcodeFormat.UPC_E;
                        upce_Writer.Options = options;
                        bitmap = upce_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.MSI:
                        var msi_Writer = new ZXing.BarcodeWriter();
                        msi_Writer.Format = BarcodeFormat.MSI;
                        msi_Writer.Options = options;
                        bitmap = msi_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.ITF:
                        var itf_Writer = new ZXing.BarcodeWriter();
                        itf_Writer.Format = BarcodeFormat.ITF;
                        itf_Writer.Options = options;
                        bitmap = itf_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.PLESSEY:
                        var plessey_Writer = new ZXing.BarcodeWriter();
                        plessey_Writer.Format = BarcodeFormat.PLESSEY;
                        plessey_Writer.Options = options;
                        bitmap = plessey_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    case BarcodeFormat.MAXICODE:
                        var code_Writer = new ZXing.BarcodeWriter();
                        code_Writer.Format = BarcodeFormat.MAXICODE;
                        code_Writer.Options = options;
                        bitmap = code_Writer.Write(tbxBarcodeValue.Text.Trim());
                        BarCodeOptionsChanged?.Invoke(options, Format, bitmap);
                        break;
                    default:
                        throw new Exception("条码格式暂不支持!");
                }
                #endregion
            }
            catch (Exception ex)
            {
                MessageBox.Show("编码生成错误:" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                pbxBarcode.Image = bitmap;
            }

  

posted @ 2017-10-11 14:00  数据酷软件  阅读(2977)  评论(0编辑  收藏  举报