WPF实现打印用户界面功能
2024-08-26 05:15:06
方式一:
public bool Print(string pathStr)
{
try
{
if (File.Exists(pathStr) == false)
return false; var pr = new Process
{
StartInfo =
{
FileName = pathStr,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
Verb = "Print"//printo、edit、open
//printto 调用默认打印机打印
//open 打开图片
}
};
pr.Start();
return true;
}
catch (Exception)
{
return false;
}
}
//等价于==》 private void PrintImage(string filePath)
{
Process process = new Process();
process.StartInfo.FileName ="filePath";
string[] items=process.StartInfo.Verbs;
process.StartInfo.Verb = "printto";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.Start();
}
private void SaveWindowToImage(Window window, string fileName)
{
FrameworkElement element = window.Content as FrameworkElement;
RenderTargetBitmap bmp = new RenderTargetBitmap((int)element.ActualWidth,
(int)element.ActualHeight, 96d, 96d, PixelFormats.Default);
bmp.Render(window); BmpBitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp)); using(FileStream stream=File.Open(fileName,FileMode.OpenOrCreate))
{
encoder.Save(stream);
}
}
调用方式如下:
SaveWindowToImage(this,"c:\\test.bmp");
Print("c:\\test.bmp");
实现思路:用户界面转换为图片,打印图片文件。
方式二:
第一步,将WPF用户界面转换为图片
private string SaveWindowToImage(Window window, string fileName)
{
FrameworkElement element = window.Content as FrameworkElement;
RenderTargetBitmap bmp = new RenderTargetBitmap((int)element.ActualWidth,
(int)element.ActualHeight, 96d, 96d, PixelFormats.Default);
bmp.Render(window); BmpBitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp)); using (FileStream stream = File.Open(fileName, FileMode.OpenOrCreate))
{
encoder.Save(stream);
}
return fileName;
}
第二步,打印图片
SolidBrush brush = new SolidBrush(System.Drawing.Color.Black);
Font DrawFont = new Font("Arial", 22);
private PrintDocument pd = new PrintDocument();
private void button3_Click(object sender, RoutedEventArgs e)
{
pd.PrintPage += PicturePrintDocument_PrintPage; //注册打印事件
//pd.PrinterSettings.PrinterName = "HP LaserJet Professional M1213nf MFP"; //打印机选择
pd.Print(); // =>就似这么简单
} /// <summary>
/// 打印事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PicturePrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
System.Drawing.Image img = new Bitmap(filePath);
e.Graphics.DrawImage(img, 50, 50);
//e.Graphics.DrawString("aaa", DrawFont, brush, 600, 600); //绘制字符串
e.HasMorePages = false;
}
//filePath=SaveWindowToImage(this,"c:\\test.bmp");
最新文章
- js获取Html元素的实际宽度高度
- HTML中图像代替提交按钮
- Linux环境下中文字体乱码处理办法
- 判断 0 和 &#39;&#39; 以及 empty null false的关系
- sessions 表的架构过程
- IDEA社区版运行并发布web项目
- SqlServer中创建Oracle连接服务器
- Win7+ubuntu kylin+CentOS 6.5三系统安装图文教程
- 离PACKET_INp获取信息acket data
- structs2的核心和工作原理
- springboot入门的一点基础
- 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
- Django的认证系统
- 同一个服务器部署两个Tomcat并用Nginx实现反向代理
- java之路 定义个一初始值 取它 个位 十位 百位 千位。。的数值。
- LVM初级配置
- 从网站上扒网页,保存为file文件格式
- stm32_DMA采集一个AD数据_并通过DMA向串口发送
- 函数前修饰const与函数名后修饰const
- 洛谷P3457 [POI2007]POW-The Flood [并查集,模拟]