生成条码(图1)、二维码(图2)图片及打印出二维码标签(图3)效果

               

图1                                       图2                                                   图3

示例代码下载

DLL说明

BarcodeLib.dll--生成条码图片组件

ThoughtWorks.QRCode.dll--生成二维码图片组件

FNTHEX32.DLL--用于斑马条码打印机打印中文

注:打印机名称在Web.config 文件中

网络共享打印机:\\网络计算机名称或IP\网络打印机名称

本地打印机:打印机名称

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Data;
namespace PrintLib.Printers.Zebra
{
using System = global::System;
using ThoughtWorks.QRCode.Codec;
using System.Drawing;
using System.Drawing.Printing;
public class Printer
{
public string Name;
#region 从Web.config文件中获取打印机名称,如
public Printer()
{
this.Name = System.Configuration.ConfigurationManager.AppSettings["Printer"];
}
public Printer(string name)
{
this.Name = name;
}
#endregion
#region DLL声明
//ZPL
[DllImport(@"FNTHEX32.DLL", CharSet = CharSet.Ansi)]
public static extern int GETFONTHEX(
string chnstr,
string fontname,
string chnname,
int orient,
int height,
int width,
int bold,
int italic,
StringBuilder param1);
//EPL
[DllImport(@"Eltronp.dll", CharSet = CharSet.Ansi)]
public static extern int PrintHZ(int Lpt, //0:LPT1,1 LPT2
int x,
int y,
string HZBuf,
string FontName,
int FontSize,
int FontStyle);
#endregion
#region 指令说明
/**
^XA 开始 ^XZ 结束
^LH起始坐标  ^PR进纸回纸速度 ^MD 对比度
^FO标签左上角坐标  ^XG打印图片参数1图片名称后两个为坐标
^FS标签结束符  ^CI切换国际字体 ^FT坐标 ^FD定义一个字符串
^A定义字体  ^FH十六进制数 ^BY模块化label ^BC条形码128
^PQ打印设置 参数一 打印数量 参数二暂停 参数三重复数量  参数四为Y时表明无暂停
**/
#endregion
#region PrintDocument 打印条码、二维码
public void Print()
{
System.Drawing.Printing.PrintDocument _Document = new System.Drawing.Printing.PrintDocument();
_Document.PrintPage += _Document_PrintPage;
PageSettings pageSet = new PageSettings();
pageSet.Landscape = false;
pageSet.Margins.Top = 0;
pageSet.Margins.Left = 1;
pageSet.PaperSize = new System.Drawing.Printing.PaperSize("小票", 2, 2);
_Document.DefaultPageSettings = pageSet;
_Document.Print();
}
void _Document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
float x = 0;
float y = 0;
float width = 300;
float height = 60;
e.Graphics.DrawImage(CreateBarcodeImage("--test--",""), x, y, width, height);
e.HasMorePages = false;
}
#endregion
#region ZPL 打印条码、二维码
/// <summary>
/// 条码打印(标签两列)
/// </summary>
/// <param name="l">左边距 推荐值:0</param>
/// <param name="h">上边距 推荐值:0</param>
/// <param name="cl">第一列与第二列的距离 推荐值:0</param>
/// <param name="bch">条码高 推荐值:0</param>
/// <param name="str">条码内容1,内容2两个字符串 推荐值:11位字母数字组成</param>
/// <returns>true /false 执行状态</returns>
public bool PrintBarcode(int l,int h,int cl,int bch, params string[] str)
{
l = l == 0 ? 0 : l;
h = h == 0 ? 8 : h;
cl = cl == 0 ? 30 : cl;
bch = bch == 0 ? 100 : bch;
StringBuilder sb = new StringBuilder();
sb.Append("^XA");
//连续打印两列(单列只写一条)
sb.Append(string.Format("^MD30^LH{0},{1}^FO{2},{3}^ACN,18,10^BY1.8,3,{4}^BC,,Y,N^FD{5}^FS", l, h, l, h, bch, str[0]));
sb.Append(string.Format("^MD30^LH{0},{1}^FO{2},{3}^ACN,18,10^BY1.8,3,{4}^BC,,Y,N^FD{5}^FS", l, h, l + cl, h, bch, str[1]));
sb.Append("^XZ");
return RawPrinterHelper.SendStringToPrinter(this.Name, sb.ToString());
}
/// <summary>
/// 二维码打印(标签两列)
/// </summary>
/// <param name="l">左边距 推荐值:0</param>
/// <param name="h">上边距 推荐值:0</param>
/// <param name="cl">第一列与第二列的距离 推荐值:0</param>
/// <param name="bch">二维码放大倍数 推荐值:0</param>
/// <param name="str">内容1,内容2两个字符串 推荐值:字母数字组成(位数不限制)</param>
/// <returns>true /false 执行状态</returns>
public bool PrintQRCode(int l, int h, int cl, int bch, params string[] str)
{
if (str.Length <2) return false;
string[] str0 = str[0].Split(',');
string[] str1 = str[1].Split(',');
l = l == 0 ? 5 : l;
h = h == 0 ? 8 : h;
cl = cl == 0 ? 360 : cl;
bch = bch == 0 ? 5 : bch;
StringBuilder sb = new StringBuilder();
sb.Append("^XA");
sb.Append(string.Format("^LH{0},{1}^FO{2},{3}^BQ,2,{4}^FDQA,{5}^FS", l, h, 0, h, bch, str0[0]));
sb.Append(TextToHex(str0[1], str0[0], 24));
sb.Append(string.Format("^FT{0},{1}^XG{2},1,1^FS", 125+l, h+60, str0[0]));
sb.Append(TextToHex(str0[0], str0[0], 20));
sb.Append(string.Format("^FT{0},{1}^XG{2},1,1^FS", 125 + l, h + 90, str0[0]));
sb.Append(string.Format("^LH{0},{1}^FO{2},{3}^BQ,2,{4}^FDQA,{5}^FS", l, h, 0 + cl, h, bch, str1[0]));
sb.Append(TextToHex(str1[1], str1[0], 24));
sb.Append(string.Format("^FT{0},{1}^XG{2},1,1^FS", 125 + cl + l, h + 60, str1[0]));
sb.Append(TextToHex(str1[0], str1[0], 20));
sb.Append(string.Format("^FT{0},{1}^XG{2},1,1^FS", 125 + cl + l, h + 90, str1[0]));
sb.Append("^XZ");
return RawPrinterHelper.SendStringToPrinter(this.Name, sb.ToString());
}
#endregion
#region 条码、二维码图片生成
/// <summary>
/// 生成条形码图片
/// </summary>
/// <param name="num">条形码序列号</param>
/// <param name="path">图片存放路径(绝对路径)</param>
/// <returns>返回图片</returns>
public System.Drawing.Image CreateBarcodeImage(string num, string path)
{
BarcodeLib.Barcode b = new BarcodeLib.Barcode();
b.BackColor = System.Drawing.Color.White;
b.ForeColor = System.Drawing.Color.Black;
b.IncludeLabel = true;
b.Alignment = BarcodeLib.AlignmentPositions.CENTER;
b.LabelPosition = BarcodeLib.LabelPositions.BOTTOMCENTER;
b.ImageFormat = System.Drawing.Imaging.ImageFormat.Png;
System.Drawing.Font font = new System.Drawing.Font("verdana", 10f);
b.LabelFont = font;
try
{
System.Drawing.Image image = b.Encode(BarcodeLib.TYPE.CODE128B, num);
image.Save(path);
return image;
}
catch (Exception)
{
}
return null;
}
/// <summary>
/// 生成二维码图片
/// </summary>
/// <param name="num">二维码序列号</param>
/// <param name="path">图片存放路径(绝对路径)</param>
/// <returns>返回图片</returns>
public System.Drawing.Image CreateQRCodeImage(string num,string path)
{
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
String encoding = "Byte";
if (encoding == "Byte")
{
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
}
else if (encoding == "AlphaNumeric")
{
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
}
else if (encoding == "Numeric")
{
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
}
try
{
int scale = Convert.ToInt16(4);
qrCodeEncoder.QRCodeScale = scale;
}
catch (Exception)
{
}
try
{
int version = Convert.ToInt16(7);
qrCodeEncoder.QRCodeVersion = version;
}
catch (Exception)
{
}
string errorCorrect = "M";
if (errorCorrect == "L")
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
else if (errorCorrect == "M")
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
else if (errorCorrect == "Q")
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
else if (errorCorrect == "H")
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
try
{
Bitmap bm = qrCodeEncoder.Encode(num);
bm.Save(path);
MemoryStream ms = new MemoryStream();
bm.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return System.Drawing.Image.FromStream(ms);
}
catch (Exception)
{
}
return null;
}
#endregion
#region ZPL 打印中文小票
public string TextToHex(string text, string textId, int height)
{
StringBuilder hexBuilder = new StringBuilder(4 * 1024);
int subStrCount = 0;
subStrCount = GETFONTHEX(text, "Arial", textId, 0, height, 0, 1, 0, hexBuilder);
return hexBuilder.ToString().Substring(0, subStrCount);
}
public string DeviceLabelToHex(string text, string textId)
{
StringBuilder hexBuilder = new StringBuilder(4 * 1024);
int subStrCount = 0;
subStrCount = GETFONTHEX(text, "Arial", textId, 0, 40, 0, 1, 0, hexBuilder);
return hexBuilder.ToString().Substring(0, subStrCount);
}
public bool IsZebraPrinter(string printerName)
{
return printerName.IndexOf("ZDesigner") + printerName.IndexOf("Zebra") >= -1;
}
public void ZPLPrintDeviceLabel(DataTable dt, int copies)
{
ZPLPrintDeviceLabel(dt, true, copies);
}
public void ZPLPrintDeviceLabel(DataTable dt, bool isRequireTextToHex, int copies)
{
Project.Printers.Prints.Label label = null;
for (int i = 0; i < copies; i++)
{
foreach (DataRow row in dt.Rows)
{
List<Project.Printers.Prints.Label> labelList = new List<Project.Printers.Prints.Label>();
label = new Project.Printers.Prints.Label();
#region Data
label.Id = "HName";
label.Text = row["HName"].ToString();
label.XPos = 150;
label.YPos = 60;
labelList.Add(label);
label = new Project.Printers.Prints.Label();
label.Id = "AName";
label.Text = row["AName"].ToString();
label.XPos = 10;
label.YPos = 140;
labelList.Add(label);
//label = new Project.Printers.Prints.Label();
//label.Id = "name1";
//label.Text = row["name1"].ToString();
//label.XPos = 70;
//label.YPos = 180;
//labelList.Add(label);
label = new Project.Printers.Prints.Label();
label.Id = "ANo";
label.Text = row["ANo"].ToString();
label.XPos = 10;
label.YPos = 185;
labelList.Add(label);
//label = new Project.Printers.Prints.Label();
//label.Id = "No1";
//label.Text = row["No1"].ToString();
//label.XPos = 70;
//label.YPos = 245;
//labelList.Add(label);
label = new Project.Printers.Prints.Label();
label.Id = "UResponsible";
label.Text = row["UResponsible"].ToString();
label.XPos = 10;
label.YPos = 234;
labelList.Add(label);
//label = new Project.Printers.Prints.Label();
//label.Id = "Responsible1";
//label.Text = row["Responsible1"].ToString();
//label.XPos = 70;
//label.YPos = 305;
//labelList.Add(label);
label = new Project.Printers.Prints.Label();
label.Id = "RPerson";
label.Text = row["RPerson"].ToString();
label.XPos = 325;
label.YPos = 140;
labelList.Add(label);
//label = new Project.Printers.Prints.Label();
//label.Id = "Person1";
//label.Text = row["Person1"].ToString();
//label.XPos = 355;
//label.YPos = 180;
//labelList.Add(label);
label = new Project.Printers.Prints.Label();
label.Id = "BDate";
label.Text = row["BDate"].ToString();
label.XPos = 10;
label.YPos =334;
labelList.Add(label); label = new Project.Printers.Prints.Label();
label.Id = "UPrice";
label.Text = row["UPrice"].ToString();
label.XPos = 325;
label.YPos = 185;
labelList.Add(label);
labelList.Add(label); label = new Project.Printers.Prints.Label();
label.Id = "MResponsible";
label.Text = row["MResponsible"].ToString();
label.XPos = 10;
label.YPos = 280;
#endregion
labelList.Add(label);
if (isRequireTextToHex)
{
ZPLPrintLabels(this.Name, labelList.ToArray(), 100);
}
else
{
ZPLPrintLabelsWithHexText(this.Name, labelList.ToArray());
}
}
}
}
private void ZPLPrintLabelsWithHexText(string printerName, Project.Printers.Prints.Label[] labels)
{
string labelIdCmd = string.Empty;
string labelContentCmd = string.Empty;
foreach (Project.Printers.Prints.Label label in labels)
{
labelIdCmd += "^FT" + label.XPos.ToString() + "," + label.YPos.ToString() + "^XG" + label.Id + ",1,1^FS";
labelContentCmd += label.Text;
}
string content = labelContentCmd
+ "^XA^LH0,0^PR2,2^MD20^FO0,0"
+ labelIdCmd
+ "^PQ1,0,1,Y^XZ";
RawPrinterHelper.SendStringToPrinter(printerName, content);
}
private void ZPLPrintLabels(string printerName, Project.Printers.Prints.Label[] labels, int height)
{
string labelIdCmd = string.Empty;
string labelContentCmd = string.Empty;
string headTitle = string.Empty;
string barcodeNo = string.Empty;
foreach (Project.Printers.Prints.Label label in labels)
{
labelIdCmd += "^FT" + label.XPos.ToString() + "," + label.YPos.ToString() + "^XG" + label.Id + ",1,1^FS";
if (label.Id == "HName")
{
//headTitle += "^FDMA," + label.Id + "^FS";
}
if (label.Id == "ANo")
{
barcodeNo += "^FDMA,YF10069^FS";
}
labelContentCmd += TextToHex(label.Text, label.Id, height);
}
#region 打印具有格式的小票
string content = labelContentCmd
+ "^XA^LH0,0^PR2,2^MD20^FO0,0"
//+ headTitle
+ "^FO20,80^GB560,0,3^FS"
+ labelIdCmd
+ "^FT455,340^BQN,2,4"
+ barcodeNo
+ "^PQ1,0,1,Y^XZ";
RawPrinterHelper.SendStringToPrinter(printerName, content);
#endregion
}
#endregion
}
}

调用方法

using System;
using System.Data;
using PrintLib.Printers.Zebra;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//打印 小票(标签)
protected void Button3_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable("table1");
dt.Columns.Add(new DataColumn("HName", typeof(string)));
dt.Columns.Add(new DataColumn("AName", typeof(string)));
dt.Columns.Add(new DataColumn("ANo", typeof(string)));
dt.Columns.Add(new DataColumn("UResponsible", typeof(string)));
dt.Columns.Add(new DataColumn("MResponsible", typeof(string)));
dt.Columns.Add(new DataColumn("RPerson", typeof(string)));
dt.Columns.Add(new DataColumn("UPrice", typeof(string)));
dt.Columns.Add(new DataColumn("BDate", typeof(string)));
DataRow row = dt.NewRow();
row["HName"] = "第二炮兵工程大学";
row["AName"] = "资产名称" + " 笔记本";
row["ANo"] = "资产编号"+"  YF10069";
row["UResponsible"] = "使用单位" + "  营房处";
row["MResponsible"] = "管理单位" + "  教保处";
row["RPerson"] = "负责人" +"  丁延龙";
row["BDate"] = "购置日期  "+System.DateTime.Now.ToShortDateString();
row["UPrice"] = "单价 0";
dt.Rows.Add(row);
Printer printer = new Printer();
printer.ZPLPrintDeviceLabel(dt, 1);
#region old print mode
//PrinterWSR.ZebraPrinter zebraPrinterWS = new PrinterWSR.ZebraPrinter();
zebraPrinterWS.de
//Process p = new Process();
//try
//{
//    p.StartInfo.FileName = @"D:\Debug\PrintApp.exe";
//    p.StartInfo.UseShellExecute = false;
//    p.StartInfo.RedirectStandardInput = true;
//    p.StartInfo.RedirectStandardOutput = true;
//    p.StartInfo.CreateNoWindow = false;
//    p.Start();
//    //p.StandardInput.WriteLine(TextBox1.Text.Trim());
//    //Process.Start("D:/Debug/PrintApp.exe", TextBox1.Text.Trim());
//}
//catch
//{
//}
//finally
//{
//    p.WaitForExit();
//    p.Dispose();
//}
p.Kill();
#endregion
}
//生成图片
protected void Button1_Click(object sender, EventArgs e)
{
//根据一定的规则,生成序列号作为唯一标识 如:
string num = "01008D004Q-0";
string fileName = num+".png";
//生成条形码
try
{
String savePath = Server.MapPath("BarcodeImages") + "/" + fileName;
new PrintLib.Printers.Zebra.Printer().CreateBarcodeImage(num, savePath);
this.Image1.ImageUrl = "BarcodeImages/" + fileName;
}
catch (Exception)
{
}
//生成二维码图片
try
{
String savePath = Server.MapPath("QRCodeImages") + "/" + fileName;
new PrintLib.Printers.Zebra.Printer().CreateQRCodeImage(num, savePath);
this.Image2.ImageUrl = "QRCodeImages/" + fileName;
}
catch (Exception)
{
}
}
//打印
protected void Button2_Click(object sender, EventArgs e)
{
//批量打印时先从选中的记录中取出序列号放入一个字符型数组中 如:{"序列号1,名称1","序列号2,名称2"}
string[] str = new string[] { "01008D004Q-0,试件名称!" ,"01008D004Q-2,试件名称2!" };
/*
单列打印请修改
* PrintLib.Printers.Zebra.Printer().PrintQRCode方法中的打印指令
*/
//执行批量打印(双列标签)
for (int i = 0; i < str.Length; i++)
{
if ((i + 1) == str.Length)
{
new PrintLib.Printers.Zebra.Printer().PrintQRCode(0, 0, 0, 0, str[i], str[i]);
}
else
{
new PrintLib.Printers.Zebra.Printer().PrintQRCode(0, 0, 0, 0, str[i], str[i + 1]);
}
i++;
}
/*
for (int i = 0; i < str.Length; i++)
{
if ((i + 1) == str.Length)
{
new PrintLib.Printers.Zebra.Printer().PrintBarcode(0, 0, 0, 0, str[i], str[i]);
}
else
{
new PrintLib.Printers.Zebra.Printer().PrintBarcode(0, 0, 0, 0, str[i], str[i + 1]);
}
i++;
}*/
}
}

ZPL 打印条码、二维码及小票(中文/汉字),生成条码、二维码图片【Asp.Net】-含示例代码相关推荐

  1. python生成二维码教程_使用Python生成个性二维码

    任务目的 这一步会介绍通过Python中的MyQR包实现生成二维码的操作,包括生成普通二维码.带有静态图和动态图的二维码,同时也会对MyQR生成二维码的常用参数进行介绍说明. 任务步骤注:CVM适合用 ...

  2. Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)(示例代码)

    简介  这篇文章主要介绍了Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)(示例代码)以及相关的经验技巧,文章约21106字,浏览量320,点赞数5,值得参考! ...

  3. Android之扫描二维码和根据输入信息生成名片二维码

    开发中常常遇到二维码扫码操作,前段时间做项目要实现该功能,于是网上查找资料实现了,现在把他做出来给各位分享一下,主要包含了二维码扫描和生成二维码名片, 先来看看效果图:   生成的二维码,打开微信扫一 ...

  4. vue批量生成二维码,打印生成的二维码,并批量下载生成的二维码,qrcode

    通过使用 qrcode 生成二维码, 使用 jszip 打包批量二维码文件, 使用 file-saver 下载打包好的zip文件, 使用 vue-print-nb 打印生成的二维码 生成二维码: 打印 ...

  5. 用条码标签打印软件生成条码的校验码

    一维码的类型有很多种,有些类型最后一个字符是校验码,根据前面的数据计算得出,作用是条码的正确性校验,如EAN-13\8.UPC-A\E等类型. 条码,英文名称barcode,又称条形码,常用种类分为一 ...

  6. java生成一条唯一的邀请码_根据用户id生成一个唯一邀请码

    需求描述:根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...

  7. python制作微信个人二维码_一个python自动生成微信二维码海报的轮子

    由于最近需要做一个线上活动,所以策划了一个微信二维码海报的用户裂变方案.做好了需求以后交给我们可爱的程序媛妹妹.三天过后去问她,她的表情是这样的 她是不是在说,"啊啊,真是不好意思" ...

  8. 生成随机验证图片--ASP.NET中常用代码之二

    生成随机验证图片(转载) 使用方法: 1/**////调用函数将验证码生成图片 2            this.CreateCheckCodeImage(GenerateCheckCode()); ...

  9. python 生成exe 图片资源_爱豆图片下载(含源码及打包exe可执行文件)

    import requests from lxml import etree import os # etree解析网页并返回 def parse(url): headers = { 'User-Ag ...

最新文章

  1. .NET MVC-去掉验证
  2. 4.3---建立高度最小二叉树
  3. 截断骨干用于检测,YOLO-ReT开源:边缘GPU设备上的高性能检测器
  4. objective-c 编写规范_Objective-c成员变量的定义方式?如何写才规范?
  5. php manager iis 8,PHPManager2下载
  6. let 只能在严格模式下吗_LET的完整形式是什么?
  7. 【探索HTML5第二弹05】响应式布局(中),一步一步响应式布局
  8. mysql 碎片率_计算MySQL表碎片的SQL整理
  9. latex改变文字类型
  10. Linux内核分析 - 网络[七]:NetFilter
  11. remote connect openshift mysql
  12. 伪元素在父元素中居中_web前端Html5开发CSS之元素五大居中方式,实用又简单!...
  13. Android:自定义BaseActivity基类
  14. 编程中的幂等性(一):http幂等性
  15. 新消费业内人说不出口的10个问题
  16. Python 实现电信天翼网关光猫自动重启
  17. linux下安装sg11,Linux安装SG11加密扩展组件教程
  18. python区域找图_使用Imagemagick查找相似区域
  19. 徐明星系列之徐明星创办的OK资本成为RnF金融有限公司的锚定投资者
  20. JMeter - REST API测试 - 完整的数据驱动方法(翻译)

热门文章

  1. Centos7.4安装Nginx实战
  2. 了解ESP32睡眠模式及其功耗
  3. ITM Architecture/ ITM 架构
  4. ORACLE计算2个时间段相差时间小时、分、秒
  5. 如何有效的快速处理恶意差评?
  6. 8月第1周业务风控关注 | 小红书等多款App因内容违规被下架
  7. 配置SDN网关:关于VRF、本地路由及inet-vpn路由
  8. Vue3+Vite3 SSR基本搭建
  9. 消防工程师 8.4 防排烟系统-联动控制 9. 应急照明和疏散指示系统
  10. 消防应急疏散指示系统在某生物制药工厂项目的应用