windows系统提供打印api,Unity通过调用windows dll,发起打印请求,打印机需要自己提前配置好,打印有两种模式,一种是会显示打印预览窗口,需要用户确认设置后打印,一种是不会显示打印预览窗口,无需用户点击,直接后台打印;
一、显示打印预览窗口
显示打印预览窗口,需要用户确认,如图:
打印预览窗口
点击打印按钮后调用打印机打印。
代码如下:
public void PrintImage()
{
string path = @"c:\1.png"; //要打印的目标图片
System.Diagnostics.Process process = new System.Diagnostics.Process(); //系统进程
process.StartInfo.CreateNoWindow = false; //不显示调用程序窗口
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //
process.StartInfo.UseShellExecute = true; //采用操作系统自动识别模式
process.StartInfo.FileName = path; //要打印的文件路径
process.StartInfo.Verb = "print"; //指定对图片执行的动作,打印:print 打开:open …………
process.Start(); //开始打印
}
二、不显示打印预览窗口
该方式不显示打印窗口,程序后台运行,直接调用打印机打印。
/// <summary>
/// 后台打印
/// </summary>
/// <param name="printerName">系统打印机的名称</param>
public void PrintImage(string printerName)
{
string path = @"c:\\1.png"; //要打印的目标图片
Process process = new Process();
try
{
process.StartInfo.FileName = "rundll32";
process.StartInfo.Arguments = string.Concat(new string[]
{
"C:\\WINDOWS\\system32\\shimgvw.dll,ImageView_PrintTo \"",
path,
"\" \"",
printerName,
"\""
});
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.UseShellExecute = true;
process.Start();
}
catch (Exception arg)
{
Debug.LogWarning("PrintImage: " + arg);
}
finally
{
process.Close();
Debug.Log("PrintImage: Texture printing.");
}
}
注意:printName是系统打印机的名称,填写错误不会报错,也不会打印成功,在设置->设备->打印机与扫描仪中查看打印机的名称,如图:
打印机的名称
为方便测试可以在cmd命令行输入命令测试:
rundll32.exe C:\Windows\System32\shimgvw.dll,ImageView_PrintTo "c:\1.png" "Mi All-in-One Inkjet Printer"










网友评论