开篇: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. Luogu P1198 [JSOI2008]最大数

    我会用高级(???)的单调栈来打这道题吗? 线段树即可水过. 假设这个数列刚开始所有数都是0,然后我们每次只要进行一个点的修改和区间求和即可. 这不就是 线段树大法. 只要用一个len记录一下当前数列 ...

  2. MiZ702学习笔记8——让MiZ702变身PC的方法

    首先你需要一个安装好的linux系统,这里我用的是Ubuntu的虚拟机.VMWare的话,选择较高版本的成功率会高些(当然根据自己电脑的配置进行选择). 打开Ubuntu的虚拟机,找到一个叫做Disk ...

  3. ElasticSearch入门 第八篇:存储

    这是ElasticSearch 2.4 版本系列的第八篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. Java设计模式-建造者(Builder)模式

    目录 由来 使用 1. 定义抽象 Builder 2. 定义具体 Builder类 3. 定义具体 Director类 4. 测试 定义 文字定义 结构图 优点 举例 @ 最近在看Mybatis的源码 ...

  5. Error:Could not find common.jar (android.arch.core:common:1.0.0)

    Error:Could not find common.jar (android.arch.core:common:1.0.0). Searched in the following location ...

  6. Windows Defender还原误删文件

    Win 10 新版本的Windows Defender隔离/删除的文件没有还原的选项,导致被误删的文件无法在威胁记录中恢复.经过尝试发现可以通过修改注册表添加 “还原” 选项 打开注册表,找到 HKE ...

  7. 【原创】CA证书申请+IIS配置HTTPS+默认访问https路径

    一.CA证书申请 (一). 新StartSSL注册帐号 1.    StartSSL官网 官方网站:https://www.startssl.com/ 2.    进入到StartSSL后,直接点击注 ...

  8. 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构

    题目: 7-1 银行业务队列简单模拟 (30 分)   设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...

  9. Alpha Version Release Of Teamwork: Appendix 1 BUG BASH

    在为期一周的发布周中,我们将app本身最后的细节完善,功能代码到位,UI不断改进和优化,团队在开始准备发布之前,对整个APP进行了一次BUG检查,每个人都部署了app在自己的android设备上进行测 ...

  10. Scalable Object Detection using Deep Neural Networks译文

    原文:https://arxiv.org/abs/1312.2249