下载地址: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; }