Unity调用打印机

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

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);//打印一张存在指定路径的图片
    }
}

  

posted @ 2022-03-24 13:29  多见多闻  阅读(506)  评论(0)    收藏  举报