C#利用Zxing.net生成条形码和二维码并实现打印的功能

    开篇:zxing.net是.net平台下编解条形码和二维码的工具。

下载地址:http://pan.baidu.com/s/1kTr3Vuf

Step1:使用VS2010新建一个窗体程序项目:

Step2:添加三个类:分别是BarCodeClass.cs、DocementBase.cs、imageDocument.cs。(下一步贴出这些类的代码);;;;添加下载回来的引用zxing.dll。

》说明:

《1》   BarCodeClass.cs主要用来实现条形码和二维码的生成和解析。

《2》   DocementBase.cs、imageDocument.cs这两个类是用来实现对生成的条形码和二维码进行打印。

Step3:编写上一步的三个类的代码:

》BarCodeClass.cs

    using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using ZXing.Common;

using ZXing;

using System.Windows.Forms;

using System.Drawing;

using System.Text.RegularExpressions;

using ZXing.QrCode;

namespace BarCode

{

class BarCodeClass

{

///<summary>

///生成条形码

///</summary>

///<paramname="pictureBox1"></param>

///<paramname="Contents"></param>

public void CreateBarCode(PictureBoxpictureBox1,string Contents)

{

Regexrg = new Regex("^[0-9]{12}$");

if(!rg.IsMatch(Contents))

{

MessageBox.Show("本例子采用EAN_13编码,需要输入12位数字");

return;

}

EncodingOptionsoptions =null;

BarcodeWriterwriter =null;

options = newEncodingOptions

{

Width = pictureBox1.Width,

Height = pictureBox1.Height

};

writer = newBarcodeWriter();

writer.Format = BarcodeFormat.ITF;

writer.Options = options;

Bitmapbitmap = writer.Write(Contents);

pictureBox1.Image = bitmap;

}

///<summary>

///生成二维码

///</summary>

///<paramname="pictureBox1"></param>

///<paramname="Contents"></param>

public void CreateQuickMark(PictureBoxpictureBox1,string Contents)

{

if(Contents == string.Empty)

{

MessageBox.Show("输入内容不能为空!");

return;

}

EncodingOptionsoptions =null;

BarcodeWriterwriter =null;

options = newQrCodeEncodingOptions

{

DisableECI = true,

CharacterSet = "UTF-8",

Width = pictureBox1.Width,

Height = pictureBox1.Height

};

writer = newBarcodeWriter();

writer.Format = BarcodeFormat.QR_CODE;

writer.Options = options;

Bitmapbitmap = writer.Write(Contents);

pictureBox1.Image = bitmap;

}

///<summary>

///解码

///</summary>

///<paramname="pictureBox1"></param>

public void Decode(PictureBoxpictureBox1)

{

BarcodeReaderreader =new BarcodeReader();

Resultresult = reader.Decode((Bitmap)pictureBox1.Image);

}

}

}

》DocementBase.cs

    using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing.Printing;

using System.Drawing;

using System.Windows.Forms;

namespace BarCode

{

class DocementBase : PrintDocument

{

//fields

public Font Font = new Font("Verdana",10, GraphicsUnit.Point);

//预览打印

public DialogResult showPrintPreviewDialog()

{

PrintPreviewDialogdialog =new PrintPreviewDialog();

dialog.Document = this;

returndialog.ShowDialog();

}

//先设置后打印

public DialogResult ShowPageSettingsDialog()

{

PageSetupDialogdialog =new PageSetupDialog();

dialog.Document = this;

returndialog.ShowDialog();

}

}

}

》imageDocument.cs

    using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using System.Drawing.Printing;

namespace BarCode

{

class imageDocument : DocementBase

{

privateImage _Image;

public Image Image

{

get

{

return_Image;

}

set

{

_Image = value;

if(_Image != null)

{

if(_Image.Size.Width > _Image.Size.Height)

DefaultPageSettings.Landscape = true;

else

DefaultPageSettings.Landscape = false;

}

}

}

publicimageDocument()

{

}

publicimageDocument(Image image)

{

this.Image= image;

}

protectedoverridevoidOnPrintPage(PrintPageEventArgs e)

{

if(Image == null)

{

thrownewInvalidOperationException();

}

RectanglebestFit = GetBestFitRectangle(e.MarginBounds, Image.Size);

e.Graphics.DrawImage(Image, bestFit);

e.Graphics.DrawRectangle(Pens.Black, bestFit);

e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds);

}

// 保持高度比:参数为(打印边界的Rectangularle对象,图像大小的Size对象)

protectedRectangle GetBestFitRectangle(Rectangle toContain,SizeobjectSize)

{

//检查页面是水平还是竖直的。

boolcontainerLandscape =false;

if(toContain.Width > toContain.Height)

containerLandscape = true;

//高度比=图像的高/图像的宽

floataspectRatio = (float)objectSize.Height / (float)objectSize.Width;

//得到页面左上角的坐标

intmidContainerX = toContain.Left + (toContain.Width / 2);

intmidContainerY = toContain.Top + (toContain.Height / 2);

intx1 = 0, x2 = 0, y1 = 0, y2 = 0;

if(containerLandscape ==false)

{

//竖直图像

x1 = toContain.Left;

x2 = toContain.Right;

//调整之后的height

intadjustedHeight = (int)((float)toContain.Width * aspectRatio);

y1 = midContainerY -(adjustedHeight / 2);

y2 = y1 + adjustedHeight;

}

else

{

y1 = toContain.Top;

y2 = toContain.Bottom;

//调整之后的height

intadjustedWidth = (int)((float)toContain.Height/ aspectRatio);

x1 = midContainerX -(adjustedWidth / 2);

x2 = x1 + adjustedWidth;

}

returnnewRectangle(x1,y1, x2 - x1, y2 - y1);

}

}

}

Step4:修改界面。

Step5:依次双击【生成条形码】、【生成二维码】、【解码】、【打印】等按钮,进入Click事件,编写后台代码。这里不再一一讲述如何实现。代码参照下一步:


Step6:贴出窗体的全部代码。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Text.RegularExpressions;

using ZXing;

using ZXing.QrCode.Internal;

using ZXing.Common;

using System.IO;

using ZXing.QrCode;

namespace BarCode

{

public partial class Main : Form

{

publicMain()

{

InitializeComponent();

}

private BarCodeClass bcc = newBarCodeClass();

private DocementBase _docement;

//生成条形码

privatevoid button1_Click(objectsender,EventArgs e)

{

bcc.CreateBarCode(pictureBox1,txtMsg.Text);

}

//生成二维码

privatevoid button2_Click(objectsender,EventArgs e)

{

bcc.CreateQuickMark(pictureBox1, txtMsg.Text);

}

privatevoid Form1_Load(objectsender,EventArgs e)

{

txtMsg.Text = System.DateTime.Now.ToString("yyyyMMddhhmmss").Substring(0,12);

}

//解码

privatevoid button4_Click(objectsender,EventArgs e)

{

if(pictureBox1.Image ==null)

{

MessageBox.Show("请录入图像后再进行解码!");

return;

}

BarcodeReaderreader =new BarcodeReader();

Resultresult = reader.Decode((Bitmap)pictureBox1.Image);

MessageBox.Show(result.Text);

}

//打印

privatevoid button3_Click(objectsender,EventArgs e)

{

if(pictureBox1.Image ==null)

{

MessageBox.Show("You Must Load an Image first!");

return;

}

else

{

_docement=new imageDocument(pictureBox1.Image);

}

_docement.showPrintPreviewDialog();

}

}

}

Step7:剩下的就是演示了:本机演示结果如下:

》运行程序:点击【生成条形码】,结果如下:

》点击【解码】按钮,结果如下:

》点击《打印》按钮,结果如下:

》点击【生成二维码】按钮,结果如下:

》点击【解码】按钮,结果如下:


》点击【打印】按钮,结果如下:

 

总结:若有不足,请各位提出批评。

(分享快乐!!!)

C#利用zxing.net生成二维码和条形码并实现打印的功能相关推荐

  1. C#生成二维码和条形码并实现打印的功能

    转载:https://www.cnblogs.com/xixim/p/4589078.html 下载地址:http://pan.baidu.com/s/1kTr3Vuf Step1:使用VS2010新 ...

  2. 利用ZXing工具生成二维码以及解析二维码

    今天突然想到二维码是如何存储信息的.于是就开始各种搜索,最终自己也利用Google的ZXing工具完成了一个生成二维码和解析二维码的简单程序. 一. 二维码生成原理(即工作原理) 二维码官方叫版本Ve ...

  3. ZXing 生成二维码和条形码

    今天,做项目需要使用条形码扫描枪扫描二维码,以后后续手动生成二维码和条形码.看了一下,同事写的例子以及自己在网上查看了一下源码,至于源码怎么搞的,没看,直接上使用功能! Step1:下载地址:http ...

  4. 一句代码生成二维码,一句代码生成条形码,批量生成二维码和条形码,步骤教学

    生产企业或者物流快递需要用到大量的二维码和条形码,但是要自行编写代码批量生成二维码或者条形码并不容易,涉及的知识面很广. Excel插件<E灵>提供了二维码接口和条形码接口,您只需要一句代 ...

  5. Python 【生成二维码和条形码】

    一.概述 最近在学习Python , 编写了一个能生成二维码和条形码的窗体.利用窗体上的输入Entrance,可以输入需要编码的原始数据,分别点击按钮可以生成二维码和条形码.分别点击窗体上的按钮,预览 ...

  6. 【Demo】 生成二维码 和 条形码

    为什么80%的码农都做不了架构师?>>>    条形码 和 二维码 对比 一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于 ...

  7. uniapp生成二维码和条形码

    uniapp生成二维码和条形码 我们做小程序在我的这个页面经常会遇到有生成二维码的需求,那么我们使用tki-barcode和tki-qrcode这两个组件进行实现我们的需求 组件下载地址:" ...

  8. python利用myqr库生成二维码

    1.今天,来学习一下利用myqr库来生成二维码,首先,先执行命令安装myqr这个库,输入以下命令: pip install myqr 2.安装成功后,在本地的磁盘底下建一个目录,这里我存放的目录为:E ...

  9. zxing详细使用说明 java生成二维码、条形码

    zxing详细使用 一.引用maven依赖 二.生成条形码 1.生成二维码基本使用 2.`BarcodeFormat` (条形码类型) 3.`EncodeHintType`(条形码自定义属性) 4.` ...

最新文章

  1. 不同数据类型的处理函数(一)
  2. 查看python安装路径以及pip安装的包
  3. Win 11大更新:可安装超千款Android应用
  4. cockpit代替secureCRT
  5. Socket api接口--Send(),Recv()的长度问题
  6. Jrebel 激活方式
  7. 《IT项目管理那些事儿》——新浪微博抽奖活动
  8. wince6移植之创建.pbcxml文件
  9. 国内外3D视觉优秀的实验室或者团队汇总
  10. c语言编程怎么记,新手如何学习c语言
  11. ADS仿真 之 交流仿真和S参数仿真示例
  12. Visual C++ 2010 Express使用教程
  13. Problem : 闰年闰月
  14. 神棍节移动电商显头角
  15. 建服务器数据中心,如何构建一个服务器数据中心
  16. linux 系统迁移 固态硬盘,系统迁移
  17. 程序员开发指南!金三银四Android面试的一些感受,这原因我服了
  18. JavaScript: 多维数组的几个注意点
  19. 激活数字经济澎湃动能
  20. 计算机无法传送文件到打印机,发送文件给打印机却没反应?解决方案都在这里了...

热门文章

  1. C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市
  2. 解决word安全模式打开的问题
  3. IBM成甩手掌柜 倒贴15亿美元出售芯片制造业务
  4. 原来SqlSession只是个甩手掌柜?真香
  5. 2个月女婴注射疫苗后死亡?启示!!
  6. J2ME游戏开发实例讲解(1)
  7. c语言中下标运算符的作用,C语言下标运算符([])
  8. Skype for Business后端服务器部署AlwaysOn可用性组实战篇
  9. 当Web2.0进入企业——免费的企业3.0软件3A完全评测
  10. [附源码]PHP计算机毕业设计老A酒吧网站(程序+LW)