美文网首页
Unity调用windows打印机打印图片

Unity调用windows打印机打印图片

作者: 雄关漫道从头越 | 来源:发表于2023-02-19 14:21 被阅读0次

untiy 调用打印机,以及调试

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"

相关文章

网友评论

      本文标题:Unity调用windows打印机打印图片

      本文链接:https://www.haomeiwen.com/subject/usvikdtx.html