LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

我需要打印一个标签,上面有文字、图片、线条、一维码、二维码等内容打印前需要预览,用C#如何将内容加载到panel或PrintPreviewDialog控件中,实现预览效果

admin
2025年6月27日 16:6 本文热度 55

在C#中实现标签打印预览,可以通过自定义绘制内容到Panel控件或直接使用PrintDocument实现。以下是两种推荐方案:

方案1:使用Panel控件模拟预览(适合简单需求)

// 添加Panel控件到窗体 (panelPreview)

private void GeneratePreview()

{

    panelPreview.Paint += (sender, e) =>

    {

        Graphics g = e.Graphics;

        g.Clear(Color.White);

        g.SmoothingMode = SmoothingMode.AntiAlias;


        // 1. 绘制文字

        using (Font font = new Font("微软雅黑", 10))

        {

            g.DrawString("产品标签", font, Brushes.Black, new PointF(20, 20));

        }


        // 2. 绘制图片

        Image logo = Image.FromFile("logo.png");

        g.DrawImage(logo, new Rectangle(20, 50, 100, 50));


        // 3. 绘制线条

        using (Pen pen = new Pen(Color.Black, 1))

        {

            g.DrawLine(pen, 20, 110, 200, 110);

        }


        // 4. 绘制一维码 (需安装BarcodeLib)

        Barcode barcode = new Barcode();

        Image barcodeImg = barcode.Encode(BarcodeLib.TYPE.CODE128, "123456");

        g.DrawImage(barcodeImg, 20, 130);


        // 5. 绘制二维码 (需安装ZXing.Net)

        var writer = new BarcodeWriterPixelData

        {

            Format = BarcodeFormat.QR_CODE,

            Options = new EncodingOptions { Height = 100, Width = 100 }

        };

        var pixelData = writer.Write("https://example.com");

        using (Bitmap qrImg = new Bitmap(pixelData.Width, pixelData.Height, PixelFormat.Format32bppRgb))

        {

            BitmapData bmData = qrImg.LockBits(new Rectangle(0, 0, qrImg.Width, qrImg.Height), ImageLockMode.WriteOnly, qrImg.PixelFormat);

            Marshal.Copy(pixelData.Pixels, 0, bmData.Scan0, pixelData.Pixels.Length);

            qrImg.UnlockBits(bmData);

            g.DrawImage(qrImg, 150, 130);

        }

    };

    panelPreview.Invalidate(); // 触发重绘

}


// 打印按钮事件

private void btnPrint_Click(object sender, EventArgs e)

{

    PrintDocument pd = new PrintDocument();

    pd.PrintPage += (s, args) =>

    {

        // 创建与打印机分辨率匹配的Bitmap

        Bitmap bmp = new Bitmap(panelPreview.Width, panelPreview.Height);

        panelPreview.DrawToBitmap(bmp, panelPreview.ClientRectangle);

        args.Graphics.DrawImage(bmp, args.MarginBounds);

    };

    

    PrintPreviewDialog preview = new PrintPreviewDialog();

    preview.Document = pd;

    preview.ShowDialog();

}

方案2:直接使用PrintDocument(推荐专业方案)

private void PrintWithPreview()

{

    PrintDocument pd = new PrintDocument();

    pd.DefaultPageSettings.PaperSize = new PaperSize("Custom", 300, 200); // 标签尺寸(1/10英寸)

    

    pd.PrintPage += (sender, e) =>

    {

        Graphics g = e.Graphics;

        g.PageUnit = GraphicsUnit.Millimeter; // 使用毫米单位


        // 绘制元素(单位毫米)

        g.DrawString("产品标签", new Font("Arial", 8), Brushes.Black, 10, 5);

        

        // 绘制图片(自动缩放)

        Image logo = Image.FromFile("logo.png");

        g.DrawImage(logo, new RectangleF(10, 15, 30, 15));

        

        // 绘制线条

        g.DrawLine(new Pen(Color.Black, 0.2f), 10, 35, 80, 35);

        

        // 绘制条码(使用内存绘制)

        using (Bitmap barcode = GenerateBarcode("123456"))

        {

            g.DrawImage(barcode, 10, 40, 50, 15);

        }

    };


    // 显示预览

    PrintPreviewDialog preview = new PrintPreviewDialog();

    preview.Document = pd;

    preview.ShowDialog();

}


// 生成条码辅助方法

private Bitmap GenerateBarcode(string text)

{

    Barcode barcode = new Barcode();

    return barcode.Encode(BarcodeLib.TYPE.CODE128, text);

}

推荐方案比较

方案优点缺点适用场景
Panel预览开发简单,所见即所得分辨率低,打印质量受限简单标签、快速原型
PrintDocument打印质量高,支持专业打印控制需要双重绘制逻辑商业级标签打印

专业建议

1、条码生成库

  • 一维码:安装NuGet包 BarcodeLib

  • 二维码:安装 ZXing.Net (支持QR Code/Datamatrix等)

Install-Package BarcodeLib

Install-Package ZXing.Net

2、精确控制打印尺寸

// 设置精确的标签尺寸(毫米转1/100英寸)

int widthInHundredths = (int)(50 * 100 / 25.4); // 50mm

int heightInHundredths = (int)(30 * 100 / 25.4); // 30mm

pd.DefaultPageSettings.PaperSize = new PaperSize("Custom", widthInHundredths, heightInHundredths);

3、使用专业标签设计器

对于复杂标签需求,推荐集成第三方控件:

  • ​Bartender Automation (商业级)

  • Labelary Web Service (在线服务)

  • Telerik Reporting (报表控件)

4、分辨率处理技巧

// 提高打印质量

e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;

e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

重要提示:实际打印前务必测试不同DPI的打印机,建议使用e.Graphics.DpiXe.Graphics.DpiY获取打印机实际分辨率进行自适应布局。

完整实现步骤:

  1. 创建打印内容模型类

  2. 设计预览面板/打印文档的绘制逻辑

  3. 添加打印机设置界面(选择纸张、尺寸等)

  4. 实现打印预览和打印功能

  5. 添加条码生成异常处理

通过以上方法,您可以实现专业的标签打印预览系统,满足文字、图片、线条、条码等混合内容的打印需求。


该文章在 2025/6/27 17:03:51 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved