最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#實(shí)現(xiàn)二維碼和條形碼生成與打印

 更新時(shí)間:2025年10月22日 09:29:16   作者:t19875128  
本文介紹了基于C#實(shí)現(xiàn)二維碼和條形碼生成及打印的技術(shù)方案,包括核心庫(kù)選型、圖像處理、打印實(shí)現(xiàn)、高級(jí)功能、異常處理、性能優(yōu)化、部署建議和安全措施,適用于多種打印需求,需要的朋友可以參考下

一、技術(shù)選型與依賴庫(kù)

核心庫(kù)選擇

ZXing.Net:開(kāi)源條碼處理庫(kù),支持QR Code、Code 128等格式

Install-Package ZXing.Net

QRCoder:純C#實(shí)現(xiàn)的二維碼生成庫(kù)

Install-Package QRCoder

二、代碼實(shí)現(xiàn)

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
            }
        };
        
        // 添加糾錯(cuò)級(jí)別(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);
        }
    }
}

三、圖像處理與優(yōu)化

3.1 圖像增強(qiáng)

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;
}

四、打印實(shí)現(xiàn)方案

4.1 本地打?。╓in32 API)

using System.Drawing.Printing;

public class PrinterService
{
    public void PrintBitmap(Bitmap image)
    {
        using (var printDoc = new PrintDocument())
        {
            printDoc.PrinterSettings.PrinterName = "Zebra ZT410"; // 指定打印機(jī)
            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 網(wǎng)絡(luò)打?。═CP/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);
            }
        }
    }
}

五、高級(jí)功能實(shí)現(xiàn)

5.1 ZPL指令打?。ò唏R打印機(jī))

public string GenerateZPL(string content)
{
    return $@"
    ^XA
    ^FO50,50
    ^BQN,2,8
    ^FD{content}^FS
    ^XZ";
}

// 發(fā)送指令
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($"打印超時(shí): {ex.Message}");
        RestartPrinter();
    }
    catch (IOException ex)
    {
        Logger.LogError($"設(shè)備斷開(kāi): {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}");
    }
}

七、性能優(yōu)化

圖像緩存

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];
}

異步處理

public async Task<Bitmap> GenerateAsync(string data)
{
    return await Task.Run(() => GenerateQRCode(data));
}

批量生成優(yōu)化

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

八、部署建議

硬件要求

  • 最低配置:i5-8代/8GB內(nèi)存
  • 推薦配置:i7-12代/16GB內(nèi)存+NVIDIA顯卡(GPU加速)

環(huán)境配置

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

安全措施

  • 打印內(nèi)容加密:AES加密敏感數(shù)據(jù)
  • 訪問(wèn)控制:IP白名單驗(yàn)證
public bool ValidateIP(string ip)
{
    return allowedIPs.Contains(ip);
}

九、測(cè)試用例

[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); // 最小尺寸驗(yàn)證
        }
    }
}

到此這篇關(guān)于基于C#實(shí)現(xiàn)二維碼和條形碼生成與打印的文章就介紹到這了,更多相關(guān)C#二維碼和條形碼生成與打印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#基于COM方式讀取Excel表格的方法

    C#基于COM方式讀取Excel表格的方法

    這篇文章主要介紹了C#基于COM方式讀取Excel表格的方法,涉及C# COM組件的調(diào)用與Excel表格的使用技巧,需要的朋友可以參考下
    2016-07-07
  • C#異步編程詳解

    C#異步編程詳解

    本文主要介紹異步編程中Task、Async和Await的基礎(chǔ)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#數(shù)據(jù)級(jí)聯(lián)操作的法寶DataRelation詳解(操作步驟)

    C#數(shù)據(jù)級(jí)聯(lián)操作的法寶DataRelation詳解(操作步驟)

    本文給大家介紹在C#中使用DataRelation的典型方法和典型代碼實(shí)現(xiàn),總結(jié)DataRelation的核心優(yōu)勢(shì),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • C#通過(guò)windows注冊(cè)表獲取軟件清單的方法

    C#通過(guò)windows注冊(cè)表獲取軟件清單的方法

    這篇文章主要介紹了C#通過(guò)windows注冊(cè)表獲取軟件清單的方法,涉及C#針對(duì)注冊(cè)表的訪問(wèn)讀取與遍歷操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#定時(shí)器Timer實(shí)現(xiàn)精確到1-2毫秒以內(nèi)

    C#定時(shí)器Timer實(shí)現(xiàn)精確到1-2毫秒以內(nèi)

    最近在排查項(xiàng)目OTA的一個(gè)問(wèn)題,觸發(fā)了一毫秒或者2毫秒執(zhí)行一次進(jìn)程間通信的,導(dǎo)致通信阻塞的問(wèn)題,這樣就需要用到模擬觸發(fā)1ms或者2ms觸發(fā)事件,所以本文給大家介紹了C#?定時(shí)器?Timer?如何精確到?1-2?毫秒以內(nèi),需要的朋友可以參考下
    2024-12-12
  • c# 遍歷 Dictionary的四種方式

    c# 遍歷 Dictionary的四種方式

    這篇文章主要介紹了c# 遍歷 Dictionary的四種方式,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-09-09
  • C# IDE VS2005中的Hosting Process (vshost.exe)作用介紹

    C# IDE VS2005中的Hosting Process (vshost.exe)作用介紹

    這篇文章主要介紹了C# IDE VS2005中的Hosting Process (vshost.exe)作用介紹,vshost.exe是一個(gè)宿主進(jìn)程,主要用來(lái)提高調(diào)試效率,需要的朋友可以參考下
    2015-01-01
  • C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼

    C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼

    本篇文章主要介紹了C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼,C# WinForm控件的拖動(dòng)和縮放是個(gè)很有用的功能,有興趣的可以了解一下。
    2017-01-01
  • C# 擴(kuò)展方法小結(jié)

    C# 擴(kuò)展方法小結(jié)

    這篇文章主要介紹了C#的擴(kuò)展方法的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 使用C#將Excel轉(zhuǎn)換為Markdown表格的實(shí)現(xiàn)方法

    使用C#將Excel轉(zhuǎn)換為Markdown表格的實(shí)現(xiàn)方法

    在技術(shù)文檔寫作、開(kāi)源項(xiàng)目維護(hù)以及數(shù)據(jù)報(bào)告生成等場(chǎng)景中,Markdown 表格憑借其輕量、易讀且版本控制友好的特性,成為開(kāi)發(fā)者首選的數(shù)據(jù)展示格式之一,然而,大量結(jié)構(gòu)化數(shù)據(jù)往往存儲(chǔ)在Excel文件中,索引本文將介紹如何使用C#將Excel轉(zhuǎn)換為Markdown表格,需要的朋友可以參考下
    2026-05-05

最新評(píng)論

资中县| 汤阴县| 义马市| 枣阳市| 津南区| 南安市| 洪洞县| 黄石市| 庆云县| 封开县| 天峨县| 东山县| 青冈县| 彭泽县| 庆元县| 嘉定区| 清苑县| 邻水| 株洲县| 宿州市| 黔东| 宣威市| 高淳县| 柞水县| 平湖市| 平塘县| 辽阳县| 桂东县| 如皋市| 文登市| 洛川县| 深圳市| 马关县| 吉安县| 精河县| 宜昌市| 澄迈县| 平乐县| 曲松县| 三亚市| 新郑市|