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
相关产品推荐
相关产品推荐

