ZBLOG

C# 生成含logo的二维码并打印

在C#中生成带有Logo的二维码并打印,可以通过以下步骤实现。这里使用QRCoder库生成二维码,System.Drawing处理图像,以及.NET的打印功能完成输出。


1. 安装必要的NuGet包

Install-Package QRCoder
Install-Package System.Drawing.Common

2. 生成带Logo的二维码代码

using System;
using System.Drawing;
using System.Drawing.Printing;
using QRCoder;

public class QRCodeWithLogoPrinter
{
    // 生成带Logo的二维码(返回Bitmap对象)
    public static Bitmap GenerateQRCodeWithLogo(string data, string logoPath, int pixelsPerModule = 20)
    {
        // 生成基础二维码
        QRCodeGenerator qrGenerator = new QRCodeGenerator();
        QRCodeData qrCodeData = qrGenerator.CreateQrCode(data, QRCodeGenerator.ECCLevel.H); // ECCLevel.H为高容错率
        QRCode qrCode = new QRCode(qrCodeData);
        Bitmap qrImage = qrCode.GetGraphic(pixelsPerModule);

        // 加载Logo并合并到二维码中心
        if (!string.IsNullOrEmpty(logoPath) && File.Exists(logoPath))
        {
            Image logo = Image.FromFile(logoPath);
            int logoSize = Math.Min(qrImage.Width / 4, qrImage.Height / 4); // Logo大小为二维码1/4

            // 创建Graphics对象绘制Logo
            using (Graphics g = Graphics.FromImage(qrImage))
            {
                int x = (qrImage.Width - logoSize) / 2;
                int y = (qrImage.Height - logoSize) / 2;
                g.DrawImage(logo, x, y, logoSize, logoSize);
            }
        }

        return qrImage;
    }

    // 打印二维码
    public static void PrintQRCode(Bitmap qrImage)
    {
        PrintDocument printDoc = new PrintDocument();
        printDoc.PrintPage += (sender, e) =>
        {
            e.Graphics.DrawImage(qrImage, e.MarginBounds);
            e.HasMorePages = false; // 单页打印
        };

        PrintDialog printDialog = new PrintDialog();
        printDialog.Document = printDoc;

        if (printDialog.ShowDialog() == DialogResult.OK)
        {
            printDoc.Print(); // 触发打印
        }
    }
}

3. 调用示例

// 示例:生成并打印带Logo的二维码
string dataToEncode = "https://www.example.com";   // 二维码内容
string logoPath = @"C:\path\to\logo.png";         // Logo路径

// Step1: 生成二维码(含Logo)
Bitmap qrWithLogo = QRCodeWithLogoPrinter.GenerateQRCodeWithLogo(dataToEncode, logoPath);

// Step2: (可选)保存到本地查看效果
qrWithLogo.Save(@"C:\output\qrcode_with_logo.png", ImageFormat.Png);

// Step3: 打印二维码(需连接打印机)
QRCodeWithLogoPrinter.PrintQRCode(qrWithLogo);

关键点说明

  1. 容错率
    ECCLevel.H(高容错)确保即使覆盖部分区域(如Logo),仍能扫描成功。

  2. Logo大小调整
    Logo建议不超过二维码面积的25%(通过logoSize参数控制)。

  3. 打印设置

    • PrintDocument自定义打印内容。
    • PrintDialog提供用户选择打印机和设置选项。
  4. 注意事项

    • Windows服务或ASP.NET环境下可能需要配置权限访问打印机。
    • Linux/macOS需使用跨平台库(如libgdiplus)。

如果需要更复杂的排版(如文字+图片),可通过扩展PrintPage事件实现。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24117

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?