Unity调用打印机打印图片

 更新时间:2020年6月25日 10:36  点击:1974

本文实例为大家分享了Unity打印机打印图片的具体代码,供大家参考,具体内容如下

1、调用打印机首先就是要配置好打印机

就是电脑跟打印机已经连接好,有默认的打印机可以启动使用

2、调用方式

(1)使用外部第三方软件exe

代码如下:(就两句)

string path = Application.dataPath + @"\Textures\002.png";
  System.Diagnostics.Process.Start("mspaint.exe", path);//调用第三方应用去打印(其中path是要打印图片的路径,而mspaint.exe是调用Windows中的画板,然后从画板里启用打印功能) 

(2)使用win自带软件

这个需要下载一个应用(应用会放在我的博客下载文件中名字是PrintImage.exe)
然后直接上代码:

public void Test()
  {
    string path = Application.dataPath + @"\Textures\002.png,0,0,750,400";//从纸张的0. 0点,将图像调整为750×350点(计算:150mm/28.346 px/cm=529点,100mm/28.346 pm/cm=352点) 图片路径
    string exepath = Application.streamingAssetsPath + @"\PrintImage.exe";//这个是需要下载的应用直接放到电脑上就行(调用打印机打印图片应用的路径)
    ProcessStartInfo info = new ProcessStartInfo(exepath);//指定启动进程时使用的一组值
    info.Arguments = path;//获取或设置启动应用程序时要使用的一组命令行自变量
    using (Process p=new Process())
    {
      p.StartInfo = info;
      p.Start();
    }
  }

(3)自己进行打印

/// <summary>
  /// 打印
  /// </summary>
  public void PrintFile()
  {
    PrintDocument pri = new PrintDocument();
    pri.PrintPage += Printpagetest;
    pri.Print();
  }

  private void Printpagetest(object sender, PrintPageEventArgs e)
  {
    try
    {
      System.Drawing.Image image = System.Drawing.Image.FromFile(printPath);
      System.Drawing.Graphics g = e.Graphics;
      g.TranslateTransform(_4AHeight, 0);
      g.RotateTransform(90);
      g.DrawImage(image, 0, 0, _4AWidth, _4AHeight);
    }
    catch (Exception ee)
    {
      Debug.LogError(ee.Message);
    }
  }

(这里的第三种我还未进行测试,如出现错误无法实现请指正)

这里我选择的是第二种,1不好实现静默,3太麻烦,2使用是后台调用命令行

3、颜色问题

同时这里本人还找到了有博主自己写的调用打印机方法
项目中需要用到调用打印机打印图片,原本觉得会很复杂,结果一搜索发现Assetstore有相应的插件。在网上找到别人分享的插件,完美的实现了功能,所以现在也来分享一下(因为想看到具体实现,所以用工具反编译了DLL,原本插件是直接导入就可以的)。

using System;
using System.Diagnostics;
using System.Drawing.Printing;
using System.IO;
using UnityEngine;

namespace LCPrinter
{
  public static class Print
  {
    public static void PrintTexture(byte[] texture2DBytes, int numCopies, string printerName)
    {
      if (texture2DBytes == null)
      {
        UnityEngine.Debug.LogWarning("LCPrinter: Texture is empty.");
        return;
      }
      PrinterSettings printerSettings = new PrinterSettings();
      if (printerName == null || printerName.Equals(""))
      {
        printerName = printerSettings.PrinterName;
        UnityEngine.Debug.Log("LCPrinter: Printing to default printer (" + printerName + ").");
      }
      string str = string.Concat(new string[]
      {
        DateTime.Now.Year.ToString(),
        "-",
        DateTime.Now.Month.ToString(),
        "-",
        DateTime.Now.Day.ToString(),
        "-",
        DateTime.Now.Hour.ToString(),
        "-",
        DateTime.Now.Minute.ToString(),
        "-",
        DateTime.Now.Second.ToString(),
        "-",
        DateTime.Now.Millisecond.ToString()
      });
      string text = (Application.persistentDataPath + "\\LCPrinterFiletmp_" + str + ".png").Replace("/", "\\");
      UnityEngine.Debug.Log("LCPrinter: Temporary Path - " + text);
      File.WriteAllBytes(text, texture2DBytes);
      Print.PrintCMD(text, numCopies, printerName);
    }

    public static void PrintTextureByPath(string path, int numCopies, string printerName)
    {
      PrinterSettings printerSettings = new PrinterSettings();
      if (printerName == null || printerName.Equals(""))
      {
        printerName = printerSettings.PrinterName;
        UnityEngine.Debug.Log("LCPrinter: Printing to default printer (" + printerName + ").");
      }
      Print.PrintCMD(path, numCopies, printerName);
    }

    private static void PrintCMD(string path, int numCopies, string printerName)
    {
      Process process = new Process();
      try
      {
        for (int i = 0; i < numCopies; i++)
        {
          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)
      {
        UnityEngine.Debug.LogWarning("LCPrinter: " + arg);
      }
      finally
      {
        process.Close();
        UnityEngine.Debug.Log("LCPrinter: Texture printing.");
      }
    }
  }
}

这是实现功能的源码。调用方法如下:

using UnityEngine;
using System.Collections;
using System.Diagnostics;
using System;
using System.IO;
using LCPrinter;
using UnityEngine.UI;

public class LCExampleScript : MonoBehaviour {

  public Texture2D texture2D;
  public string printerName = "";
  public int copies = 1;

  public InputField inputField;

  public void printSmileButton()
  {
    Print.PrintTexture(texture2D.EncodeToPNG(), copies, printerName);//打印一张编辑器中的图片
  }

  public void printByPathButton()
  {
    Print.PrintTextureByPath("D:\\pic.png", copies, printerName);//打印一张存在指定路径的图片
  }
}

由于原本插件是添加好引用的,反编译之后缺少了引用,所以要去统一的安装路径E:\ unity5.3.2 \统一\编辑\数据\单声道\ lib中\单\ 2.0(这是我本地安装的路径)中找到System.Drawing.dll程序程序放入项目中的插件下。如在VS中报错没有添加引用,则要对项目添加引用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • js实现浏览器打印功能的示例代码

    这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • Unity时间戳的使用方法

    这篇文章主要为大家详细介绍了Unity时间戳的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • c# 获取已安装的打印机并调用打印文件

    这篇文章主要介绍了c#如何获取已安装的打印机并调用打印文件,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
  • vue实现页面打印自动分页的两种方法

    这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • Springboot+MDC+traceId日志中打印唯一traceId

    本文主要介绍了Springboot+MDC+traceId日志中打印唯一traceId,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-17
  • Unity中 ShaderGraph 实现旋涡传送门效果入门级教程(推荐)

    通过Twirl 旋转节点对Gradient Noise 梯度噪声节点进行操作,就可得到一个旋转的旋涡效果。具体实现代码跟随小编一起通过本文学习下吧...2021-07-11
  • Unity延时执行的多种方法小结

    本文主要介绍了4种延时执行的方法,主要包括Update计时器,Invoke,协程,DoTween,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-07
  • C#操作excel打印的示例

    这篇文章主要介绍了C#操作excel打印的示例,帮助大家利用c#打印表格,提高办公效率,感兴趣的朋友可以了解下...2020-12-08
  • C#基本打印事件用法实例

    这篇文章主要介绍了C#基本打印事件用法,实例分析了C#中print打印及DrawString文本字符串绘制等相关技巧,需要的朋友可以参考下...2020-06-25
  • Unity shader实现遮罩效果

    这篇文章主要为大家详细介绍了Unity shader实现遮罩效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • unity 如何判断鼠标是否在哪个UI上(两种方法)

    这篇文章主要介绍了unity 判断鼠标是否在哪个UI上的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
  • Unity实现换装系统

    这篇文章主要为大家详细介绍了Unity实现换装系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-11
  • C# 实现简单打印的实例代码

    C# 实现简单打印的实例代码,需要的朋友可以参考一下...2020-06-25
  • 利用unity代码C#封装为dll的步骤分享

    这篇文章主要给大家介绍了关于利用unity代码C#封装为dll的相关资料,文中通过图文将实现的方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • Unity Shader实现径向模糊效果

    这篇文章主要为大家详细介绍了Unity Shader实现径向模糊效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-09
  • web打印 window.print()介绍

    web打印 window.print()介绍,需要的朋友可以参考一下...2020-06-25
  • unity 实现摄像机绕某点旋转一周

    这篇文章主要介绍了unity 实现摄像机绕某点旋转一周,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • Unity实现截图功能

    这篇文章主要为大家详细介绍了Unity实现截图功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • Unity中EventTrigger的几种使用操作

    这篇文章主要介绍了Unity中EventTrigger的几种使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
  • Unity Shader实现2D水流效果

    这篇文章主要为大家详细介绍了Unity Shader实现2D水流效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25