开篇: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))

{

位数字");

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#Zxing.net生成条形码和二维码

    下载Zxing.net官网:https://archive.codeplex.com/?p=zxingnet 或者去VS程序包下载 封装好的代码: using System; using System ...

  2. 利用ZXing.Net生成和识别二维码

    ZXing.Net:ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库. github:https://github.com/micjahn/ZXing.Net 直接将字符 ...

  3. C# 利用ZXing.Net来生成条形码和二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...

  4. 使用谷歌Z生成条形码以及二维码

    下载地址:http://zxingnet.codeplex.com/ zxing.net是.net平台下编解条形码和二维码的工具,使用非常方便. 首先下载二进制dll文件,引入工程: using Sy ...

  5. 使用ZXing.Net生成与识别二维码(QR Code)

    Google ZXing是目前一个常用的基于Java实现的多种格式的1D/2D条码图像处理库,出于其开源的特性其现在已有多平台版本.比如今天要用到的ZXing.Net就是针对微软.Net平台的版本.使 ...

  6. ZXing生成条形码、二维码、带logo二维码

    采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...

  7. winform生成条形码和二维码(ZXing.Net)

    首先在项目添加ZXing.Net. 工具-->Nuget包管理器-->Nuget程序包  在所搜栏输入 ZXing.Net 如下图: 添加完成后会看见: 效果图: 所有代码: /// &l ...

  8. iOS开发——生成条形码,二维码

    - (void)viewDidLoad { [super viewDidLoad]; self.imageView.image = [self generateBarCode:@"15248 ...

  9. ZXing.net 生成和解析二维码

    nuget引用zxing.net包 public partial class Form1 : Form { public Form1() { InitializeComponent(); } priv ...

随机推荐

  1. 学习JAVA第一章的心得

    我抱着万分期待的心情开始了我第一天的JAVA学习课程,其实在第一开始的时候我对计算机行业便有很高地兴趣了.这主要归功于我真的从很小开始就就接触了电脑.进入学校以来,我就很期待老师会怎样教我们,会怎样带 ...

  2. 自定义CCNode

    对Touch事件的获取与处理可以使用CCLayer, CCMenuItem等,但是如果我们需要一个虚拟按键或者需要对特定精灵进行拖动等等,我们就需要自定义Touch类. 自定义Touch事件处理类重要 ...

  3. SSIS 更新变量

    在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一 ...

  4. java File读取文件始终不存在的问题分析

    先上图: 如图,f1 始终能读到该文件,使用的是绝对路径 f2 却是相对路径. 感觉很奇怪,明明一模一样的代码为什么会产生不同的结果呢? 首先想到的是是不是有什么特殊字符.. 拿到notepad++中 ...

  5. JavaScript快速入门-ECMAScript语句

    JavaScript语句(if.for.for in.do...while.while.break.continue.switch) 一.if语句 if (condition) statement1 ...

  6. setBit testBit权限管理

    1.jdk7文档解释 public boolean testBit(int n) Returns true if and only if the designated bit is set. (Com ...

  7. JQ_返回顶部

    $(function(){ $('#goto_top_btn').click(function() {var s = $(window).scrollTop(),h = $(window).heigh ...

  8. GitLab篇之Linux下环境搭建

    之前公司一直在使用微软的VSS和SVN做为源代码管理工具,考虑到VSS和SVN的局限性,个人一直建议我们应该采用Git来管理我们的源代码.Git的好处不多说相信大家也都知道的.Git不仅仅是一个源代码 ...

  9. 初识kibana

    前言: 什么是Kibana?? Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的.你可以用kibana搜索.查看.交互存放在Elasticsearch索引里 ...

  10. PAT甲题题解-1015. Reversible Primes (20)-素数

    先判断n是否为素数然后把n转化成d进制下再反转,转化为十进制的num判断num是否为素数 注意n为0和1时,不是素数!!!注意反转后的num也有可能为1,不是素数!!! #include <io ...