方式一:
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");

  

 

WPF实现打印用户界面功能的更多相关文章

  1. WPF实现打印用户界面功能2

    帮助类: using System; using System.Drawing.Printing; using System.IO; using System.Windows.Forms; names ...

  2. WPF实现打印功能

    WPF实现打印功能 在WPF 中可以通过PrintDialog 类方便的实现应用程序打印功能,本文将使用一个简单实例进行演示.首先在VS中编辑一个图形(如下图所示). 将需要打印的内容放入同一个< ...

  3. WPF备忘录(6)WPF实现打印功能

    在WPF 中可以通过PrintDialog 类方便的实现应用程序打印功能,本文将使用一个简单实例进行演示.首先在VS中编辑一个图形(如下图所示). 将需要打印的内容放入同一个<Canvas> ...

  4. 用WPF实现打印及打印预览

    原文:用WPF实现打印及打印预览 应该说,WPF极大地简化了我们的打印输出工作,想过去使用VC++做开发的时候,打印及预览可是一件极麻烦的事情,而现在我不会再使用C++来做Windows的桌面应用了- ...

  5. C# WPF报表打印

    前天我的一个同学由于打印报表而苦恼,所以就介绍了一下WPF的打印报表,希望能帮助到大家. 展示报表 1. 首先新建项“报表”,选定项目,右击,点击“添加”->“新建项”->“报表”

  6. WPF 流打印

    原文:WPF 流打印 PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { Syst ...

  7. C# WPF发票打印

    微信公众号:Dotnet9,网站:Dotnet9.问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 C# WPF发票打印 内容目录 实现效果 业务场景 编码实现 本文参考 源码下 ...

  8. EasyUI实现购物车、菜单和窗口栏等最常用的用户界面功能

    一.EasyUI jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 javascript 应用的必要的功能. 使用 e ...

  9. js开发打印证书功能

    最近突然被加了要打印证书的功能的需求.其实打印功能很简单,直接调用window.print()就可以打印,只是这是最基本的打印,会打印当前页面的所有元素,而我们要的是局部打印,实现方法: 1.设置好开 ...

随机推荐

  1. C高级第二次PTA作业

    6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...

  2. 卷积神经网络 CNN 笔记

    链接: 在训练卷积神经网络(CNN)的某一个卷积层时,实际上是在训练一系列的滤波器(filter).简单来说,训练CNN在相当意义上是在训练每一个卷积层的滤波器.让这些滤波器组对特定的模式有高的激活, ...

  3. 一些简单二分题,简单的hash,H(i),字符串题

    说在前面: 题是乱七八糟的. 几个二分的题. (但是我的做法不一定是二分,有些裸暴力. 1. Equations HDU - 1496 输入a,b,c,d问你这个方程有多少解.a*x1^2+b*x2^ ...

  4. whmcs模板路径

    whmcs网站根目录 比如你的域名是server.nongbin.vip,你需要cd /home/wwwroot/server.nongbin.vip,该目录下然后,cd template/ 给文件夹 ...

  5. ionic1实现热更新以版本检测更新安装包的方法

    1.需要下载热更新插件:插件名称是cordova-hot-code-push 首先打开cli,执行命令 npm install -g cordova-hot-code-push-cli 此功能主要是为 ...

  6. Zabbix-2.4-安装-4

    Zabbix api 对于以上两种方式,有些人都不选,倾向于使用第三种:使用zabbix api加上这个监控在把这台机器删除了,然后discovery和自动注册的都关闭了再换一种方式把它加进去,zab ...

  7. AI三巨头获2018年图灵奖!

    ACM 宣布,2018 年图灵奖获得者是号称深度学习三巨头的 Yoshua Bengio, Yann LeCun 和 Geoffrey Hinton,得奖理由是:他们在概念和工程上取得的巨大突破,使得 ...

  8. [转]总结@Autowired 和@Resource

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了. @Resource有两个属性是比较重要的,分 ...

  9. MySQL 5.7新特性之在线收缩undo表空间

    1. MySQL 5.5时代的undo log 在MySQL5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会越来越大,这会造成2 ...

  10. git 项目配置用户名、邮箱的方法

    git 项目配置用户名.邮箱的方法 单个仓库里,配置用户名.邮箱: git config user.name "姓名" git config user.email "邮箱 ...