当前位置: 首页 > news >正文

C#实现二维码和条形码生成与打印

一、技术选型与依赖库

核心库选择
  • ZXing.Net:开源条码处理库,支持QR Code、Code 128等格式

    Install-Package ZXing.Net
    
  • QRCoder:纯C#实现的二维码生成库

    Install-Package QRCoder
    

二、代码实现

2.1 二维码生成(ZXing.Net)
using ZXing;
using ZXing.Common;public class QRCodeGenerator
{public Bitmap GenerateQRCode(string content, int size = 300){var writer = new BarcodeWriter{Format = BarcodeFormat.QR_CODE,Options = new EncodingOptions{Width = size,Height = size,Margin = 1,PureBarcode = true}};// 添加纠错级别(L/M/Q/H)writer.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);return writer.Write(content);}
}
2.2 条形码生成(Code 128)
public class BarcodeGenerator
{public Bitmap GenerateCode128(string data){var options = new EncodingOptions{Height = 100,Width = 400,Margin = 2};using (var writer = new BarcodeWriter{Format = BarcodeFormat.CODE_128,Options = options}){return writer.Write(data);}}
}

三、图像处理与优化

3.1 图像增强
public Bitmap EnhanceImage(Bitmap source)
{using (var graphics = Graphics.FromImage(source)){graphics.SmoothingMode = SmoothingMode.AntiAlias;graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;graphics.PixelOffsetMode = PixelOffsetMode.HighQualityBilinear;// 添加边框var border = new Pen(Color.Black, 2);graphics.DrawRectangle(border, 0, 0, source.Width-1, source.Height-1);return source;}
}
3.2 图像保存
public void SaveImage(Bitmap image, string path)
{ImageCodecInfo jpegEncoder = GetEncoder(ImageFormat.Jpeg);EncoderParameters encoderParams = new EncoderParameters(1);encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 90L);image.Save(path, jpegEncoder, encoderParams);
}private ImageCodecInfo GetEncoder(ImageFormat format)
{ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();foreach (var codec in codecs){if (codec.FormatID == format.Guid)return codec;}return null;
}

四、打印实现方案

4.1 本地打印(Win32 API)
using System.Drawing.Printing;public class PrinterService
{public void PrintBitmap(Bitmap image){using (var printDoc = new PrintDocument()){printDoc.PrinterSettings.PrinterName = "Zebra ZT410"; // 指定打印机printDoc.DefaultPageSettings.PaperSize = new PaperSize("Custom", 400, 300);printDoc.PrintPage += (s, e) => {e.Graphics.DrawImage(image, 0, 0, image.Width, image.Height);};printDoc.Print();}}
}
4.2 网络打印(TCP/IP)
public class NetworkPrinter
{public void SendToPrinter(string ip, Bitmap image){using (var client = new TcpClient(ip, 9100)){using (var stream = client.GetStream()){var ms = new MemoryStream();image.Save(ms, ImageFormat.Png);stream.Write(ms.ToArray(), 0, ms.Length);}}}
}

五、高级功能实现

5.1 ZPL指令打印(斑马打印机)
public string GenerateZPL(string content)
{return $@"^XA^FO50,50^BQN,2,8^FD{content}^FS^XZ";
}// 发送指令
using (var client = new TcpClient("192.168.1.100", 9100))
{NetworkStream stream = client.GetStream();byte[] data = Encoding.ASCII.GetBytes(zplCommand);stream.Write(data, 0, data.Length);
}
5.2 批量打印管理
public class PrintQueue
{private Queue<PrintJob> _jobs = new Queue<PrintJob>();public void Enqueue(PrintJob job){_jobs.Enqueue(job);}public async Task ProcessQueueAsync(){while (_jobs.Count > 0){var job = _jobs.Dequeue();await PrintService.PrintAsync(job.Bitmap);await Task.Delay(1000); // 防卡纸间隔}}
}

参考代码 C#二维码和条形码生成 打印处理 www.youwenfan.com/contentcsj/57421.html

六、异常处理与日志

6.1 异常捕获
public void SafePrint(Action printAction)
{try{printAction();}catch (TimeoutException ex){Logger.LogError($"打印超时: {ex.Message}");RestartPrinter();}catch (IOException ex){Logger.LogError($"设备断开: {ex.Message}");}
}
6.2 日志记录
public static class Logger
{private static readonly string logPath = "print_log.txt";public static void LogError(string message){File.AppendAllText(logPath, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} [ERROR] {message}{Environment.NewLine}");}
}

七、性能优化

  1. 图像缓存

    private static Dictionary<string, Bitmap> _imageCache = new Dictionary<string, Bitmap>();public Bitmap GetCachedImage(string key, Func<Bitmap> generateFunc)
    {if (!_imageCache.ContainsKey(key)){_imageCache[key] = generateFunc();}return _imageCache[key];
    }
    
  2. 异步处理

    public async Task<Bitmap> GenerateAsync(string data)
    {return await Task.Run(() => GenerateQRCode(data));
    }
    
  3. 批量生成优化

    public void BatchGenerate(List<string> dataList)
    {Parallel.ForEach(dataList, item => {var img = GenerateQRCode(item);SaveImage(img, $"{Guid.NewGuid()}.png");});
    }
    

八、部署建议

  1. 硬件要求

    • 最低配置:i5-8代/8GB内存
    • 推荐配置:i7-12代/16GB内存+NVIDIA显卡(GPU加速)
  2. 环境配置

    <!-- app.config -->
    <configuration><system.drawing><PrinterSettings><add key="DefaultPrinter" value="Zebra ZT410"/></PrinterSettings></system.drawing>
    </configuration>
    
  3. 安全措施

    • 打印内容加密:AES加密敏感数据
    • 访问控制:IP白名单验证
    public bool ValidateIP(string ip)
    {return allowedIPs.Contains(ip);
    }
    

九、测试用例

[TestClass]
public class PrintTests
{[TestMethod]public void TestQRCodePrint(){var generator = new QRCodeGenerator();var bitmap = generator.GenerateQRCode("https://test.com");using (var ms = new MemoryStream()){bitmap.Save(ms, ImageFormat.Png);Assert.IsTrue(ms.Length > 1024); // 最小尺寸验证}}
}
http://www.dtcms.com/a/511427.html

相关文章:

  • C#WPF如何跳转页面
  • 【高并发服务器】八、Poller描述符监控类实现
  • 用vs2013网站开发四川最好的网络优化公司
  • 如何开发一个 IDEA 插件通过 Ollama 调用大模型为方法生成仙侠风格的注释
  • 【论文精读】Latent-Shift:基于时间偏移模块的高效文本生成视频技术
  • unity基础学习笔记<上>
  • C# WPF Dragablz使用记录 TabControl选项卡可拖拽为单独界面或停靠
  • 机器人场景落地步入技术验证阶段,微美全息加快创新势能探索AI多元路径变革
  • YOLOv4 核心内容笔记
  • 网站开发工程师待遇家庭网站建设
  • 医疗门户网站模板wordpress3.8
  • iOS的多线程下数据安全和内存泄漏以及工具使用监测内存泄漏
  • 『CMake』关于使用CMake构建项目时的现代/传统指令
  • 请被人做网站怎么做倒计时网站
  • App开发框架调研对比
  • Ubuntu下载以及安装详解以及应用安装
  • 亚马逊云代理:AWS的EC2, S3, RDS,Lambda具体简介
  • 2640. QYQ在艾泽拉斯
  • 基于 React + TypeScript + Fabric.js 构建一个封面生成器网站
  • 营销型电子商务网站品牌建设与推广思路
  • 更新网站 seo公司的管理方式与管理方法
  • BZV49-C22,115稳压二极管 NXP安世半导体 工业电源芯片 芯片解析
  • 职场发展—如何避雷垃圾公司
  • 【Linux篇】软链接vs硬链接:Linux文件系统中的两种引用机制
  • C++ list核心接口与实战技巧
  • 微服务框架
  • 网站模块结构图wordpress调用栏目名称
  • 算法学习记录03——二叉树学习笔记:从两道题看透后序位置的关键作用​
  • Rust高性能分布式任务调度系统开发实践:从设计到性能优化
  • go tools安装