下载地址: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 QRCodeif (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;#endregionbitmap = qrWriter.Write(tbxBarcodeValue.Text.Trim());BarCodeOptionsChanged?.Invoke(qrWriter.Options, Format, bitmap);break;case BarcodeFormat.PDF_417:#region PDF417PDF417EncodingOptions 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;#endregionbitmap = pdf417Writer.Write(tbxBarcodeValue.Text.Trim());BarCodeOptionsChanged?.Invoke(pdf417Writer.Options, Format, bitmap);break;case BarcodeFormat.DATA_MATRIX:#region DataMatrixDatamatrixEncodingOptions 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;#endregionbitmap = dataMatrixWriter.Write(tbxBarcodeValue.Text.Trim());BarCodeOptionsChanged?.Invoke(dataMatrixWriter.Options, Format, bitmap);break;case BarcodeFormat.AZTEC:#region AztecZXing.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;#endregionbitmap = aztecWriter.Write(tbxBarcodeValue.Text.Trim());BarCodeOptionsChanged?.Invoke(aztecWriter.Options, Format, bitmap);break;case BarcodeFormat.CODE_128:#region Code128ZXing.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;#endregionbitmap = 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;}