c#如何打印winform 控件 按原布局打印 并保存文件
时间: 2023-08-02 17:11:43 浏览: 140
要按照原布局打印 WinForm 控件并保存文件,你可以使用 `PrintDocument` 和 `PrintDialog` 类来打印控件。以下是一个示例代码,可以帮助你完成此操作:
```csharp
private void btnPrint_Click(object sender, EventArgs e)
{
// 创建打印文档对象
PrintDocument pd = new PrintDocument();
// 设置打印事件处理程序
pd.PrintPage += new PrintPageEventHandler(this.PrintImage);
// 创建打印对话框
PrintDialog printDialog = new PrintDialog();
// 如果用户点击了“确定”按钮
if (printDialog.ShowDialog() == DialogResult.OK)
{
// 设置打印文档对象的打印机名称
pd.PrinterSettings.PrinterName = printDialog.PrinterSettings.PrinterName;
// 打印文档
pd.Print();
}
}
private void PrintImage(object sender, PrintPageEventArgs e)
{
// 获取要打印的控件
Control control = this.Controls[0];
// 创建位图对象
Bitmap bmp = new Bitmap(control.Width, control.Height);
// 将控件绘制到位图上
control.DrawToBitmap(bmp, control.Bounds);
// 计算控件在打印页面上的位置和大小
RectangleF controlRect = new RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, control.Width, control.Height);
// 缩放控件以适应打印页面
float scale = Math.Min(controlRect.Width / bmp.Width, controlRect.Height / bmp.Height);
e.Graphics.ScaleTransform(scale, scale);
// 绘制位图到打印页面上
e.Graphics.DrawImage(bmp, controlRect);
// 释放资源
bmp.Dispose();
}
private void btnSave_Click(object sender, EventArgs e)
{
// 创建保存文件对话框
SaveFileDialog saveFileDialog = new SaveFileDialog();
// 设置文件类型
saveFileDialog.Filter = "JPEG图片|*.jpg|位图文件|*.bmp|PNG图片|*.png";
// 如果用户点击了“确定”按钮
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
// 获取要保存的控件
Control control = this.Controls[0];
// 创建位图对象
Bitmap bmp = new Bitmap(control.Width, control.Height);
// 将控件绘制到位图上
control.DrawToBitmap(bmp, control.Bounds);
// 保存位图到文件
bmp.Save(saveFileDialog.FileName);
// 释放资源
bmp.Dispose();
}
}
```
这段代码会将控件绘制到一个位图中,并将位图绘制到打印页面或保存到文件中。在打印时,它会按照原始布局打印控件。为了适应打印页面,它会缩放控件。你可以根据需要调整缩放比例,例如,通过将 `scale` 的值乘以一个常数来增加缩放比例。
阅读全文