Unity中怎么调用打印机打印图片
创始人
2024-12-23 03:22:37
0次

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

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

2、调用方式

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

代码如下:(就两句)

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

(2)使用win自带软件

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

public void Test()  {    string path = Application.dataPath + @"\Textures02.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)自己进行打印

///

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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...