You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm如何在一页上下排列打印两个PictureBox中的条码

实现WinForm中两个PictureBox条码的同页上下打印

我来给你梳理一个清晰的实现方案,咱们用WinForm自带的PrintDocument控件就能搞定这个需求,步骤很直观:

1. 添加必要的打印控件

先在你的WinForm窗体里添加两个核心控件:

  • PrintDocument:负责处理打印内容的绘制逻辑
  • PrintDialog:用来弹出打印设置对话框,让用户选择打印机、纸张规格等

你可以直接从工具箱里拖拽这两个控件到窗体(默认控件名是printDocument1和printDialog1),也可以通过代码实例化,拖拽操作更省心。

2. 编写PrintPage事件处理方法

这是实现上下排列打印的核心部分,我们要在这个事件里把两个PictureBox的条码图像绘制到打印页面上,手动控制布局。代码如下:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    // 先检查两个PictureBox是否都生成了条码图像
    if (pictureBox1.Image == null || pictureBox2.Image == null)
    {
        MessageBox.Show("请先生成两个条码再执行打印!");
        e.Cancel = true;
        return;
    }

    // 获取打印页面的可绘制区域(自动扣除系统默认边距)
    var printArea = e.MarginBounds;

    // 计算第一个条码的绘制位置:页面上方居中,顶部留20px空白
    int img1X = printArea.Left + (printArea.Width - pictureBox1.Image.Width) / 2;
    int img1Y = printArea.Top + 20;

    // 绘制第一个条码
    e.Graphics.DrawImage(pictureBox1.Image, img1X, img1Y);

    // 计算第二个条码的绘制位置:第一个条码下方,中间留30px间距,同样居中
    int img2Y = img1Y + pictureBox1.Image.Height + 30;
    int img2X = printArea.Left + (printArea.Width - pictureBox2.Image.Width) / 2;

    // 绘制第二个条码
    e.Graphics.DrawImage(pictureBox2.Image, img2X, img2Y);
}

3. 添加打印触发按钮

在窗体上添加一个打印按钮(比如命名为btnPrint),点击时弹出打印对话框,用户确认后启动打印流程:

private void btnPrint_Click(object sender, EventArgs e)
{
    // 绑定打印对话框和打印文档
    printDialog1.Document = printDocument1;

    // 弹出打印设置窗口,用户确认后执行打印
    if (printDialog1.ShowDialog() == DialogResult.OK)
    {
        printDocument1.Print();
    }
}

4. 可选优化细节

  • 图像缩放:如果你的条码图像过大超出打印页面,可以按比例缩放后绘制,示例代码:
    // 缩放到页面宽度的80%,保持比例
    float scale = printArea.Width * 0.8f / pictureBox1.Image.Width;
    int scaledWidth = (int)(pictureBox1.Image.Width * scale);
    int scaledHeight = (int)(pictureBox1.Image.Height * scale);
    e.Graphics.DrawImage(pictureBox1.Image, img1X, img1Y, scaledWidth, scaledHeight);
    
  • 自定义边距:可以手动调整打印边距,让布局更美观:
    printDocument1.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(40, 40, 40, 40);
    

这样,当你生成好两个PictureBox里的条码后,点击打印按钮就能在同一页上实现上下排列的打印效果了。

内容的提问来源于stack exchange,提问作者Boris Radenkovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:14:35