Unity调用打印机打印图片
本文实例为大家分享了Unity打印机打印图片的具体代码,供大家参考,具体内容如下
1、调用打印机首先就是要配置好打印机
就是电脑跟打印机已经连接好,有默认的打印机可以启动使用
2、调用方式
(1)使用外部第三方软件exe
代码如下:(就两句)
stringpath=Application.dataPath+@"\Textures\002.png";
System.Diagnostics.Process.Start("mspaint.exe",path);//调用第三方应用去打印(其中path是要打印图片的路径,而mspaint.exe是调用Windows中的画板,然后从画板里启用打印功能)
(2)使用win自带软件
这个需要下载一个应用(应用会放在我的博客下载文件中名字是PrintImage.exe)
然后直接上代码:
publicvoidTest()
{
stringpath=Application.dataPath+@"\Textures\002.png,0,0,750,400";//从纸张的0.0点,将图像调整为750×350点(计算:150mm/28.346px/cm=529点,100mm/28.346pm/cm=352点)图片路径
stringexepath=Application.streamingAssetsPath+@"\PrintImage.exe";//这个是需要下载的应用直接放到电脑上就行(调用打印机打印图片应用的路径)
ProcessStartInfoinfo=newProcessStartInfo(exepath);//指定启动进程时使用的一组值
info.Arguments=path;//获取或设置启动应用程序时要使用的一组命令行自变量
using(Processp=newProcess())
{
p.StartInfo=info;
p.Start();
}
}
(3)自己进行打印
//////打印 /// publicvoidPrintFile() { PrintDocumentpri=newPrintDocument(); pri.PrintPage+=Printpagetest; pri.Print(); } privatevoidPrintpagetest(objectsender,PrintPageEventArgse) { try { System.Drawing.Imageimage=System.Drawing.Image.FromFile(printPath); System.Drawing.Graphicsg=e.Graphics; g.TranslateTransform(_4AHeight,0); g.RotateTransform(90); g.DrawImage(image,0,0,_4AWidth,_4AHeight); } catch(Exceptionee) { Debug.LogError(ee.Message); } }
(这里的第三种我还未进行测试,如出现错误无法实现请指正)
这里我选择的是第二种,1不好实现静默,3太麻烦,2使用是后台调用命令行
3、颜色问题
同时这里本人还找到了有博主自己写的调用打印机方法
项目中需要用到调用打印机打印图片,原本觉得会很复杂,结果一搜索发现Assetstore有相应的插件。在网上找到别人分享的插件,完美的实现了功能,所以现在也来分享一下(因为想看到具体实现,所以用工具反编译了DLL,原本插件是直接导入就可以的)。
usingSystem;
usingSystem.Diagnostics;
usingSystem.Drawing.Printing;
usingSystem.IO;
usingUnityEngine;
namespaceLCPrinter
{
publicstaticclassPrint
{
publicstaticvoidPrintTexture(byte[]texture2DBytes,intnumCopies,stringprinterName)
{
if(texture2DBytes==null)
{
UnityEngine.Debug.LogWarning("LCPrinter:Textureisempty.");
return;
}
PrinterSettingsprinterSettings=newPrinterSettings();
if(printerName==null||printerName.Equals(""))
{
printerName=printerSettings.PrinterName;
UnityEngine.Debug.Log("LCPrinter:Printingtodefaultprinter("+printerName+").");
}
stringstr=string.Concat(newstring[]
{
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()
});
stringtext=(Application.persistentDataPath+"\\LCPrinterFiletmp_"+str+".png").Replace("/","\\");
UnityEngine.Debug.Log("LCPrinter:TemporaryPath-"+text);
File.WriteAllBytes(text,texture2DBytes);
Print.PrintCMD(text,numCopies,printerName);
}
publicstaticvoidPrintTextureByPath(stringpath,intnumCopies,stringprinterName)
{
PrinterSettingsprinterSettings=newPrinterSettings();
if(printerName==null||printerName.Equals(""))
{
printerName=printerSettings.PrinterName;
UnityEngine.Debug.Log("LCPrinter:Printingtodefaultprinter("+printerName+").");
}
Print.PrintCMD(path,numCopies,printerName);
}
privatestaticvoidPrintCMD(stringpath,intnumCopies,stringprinterName)
{
Processprocess=newProcess();
try
{
for(inti=0;i
这是实现功能的源码。调用方法如下:
usingUnityEngine;
usingSystem.Collections;
usingSystem.Diagnostics;
usingSystem;
usingSystem.IO;
usingLCPrinter;
usingUnityEngine.UI;
publicclassLCExampleScript:MonoBehaviour{
publicTexture2Dtexture2D;
publicstringprinterName="";
publicintcopies=1;
publicInputFieldinputField;
publicvoidprintSmileButton()
{
Print.PrintTexture(texture2D.EncodeToPNG(),copies,printerName);//打印一张编辑器中的图片
}
publicvoidprintByPathButton()
{
Print.PrintTextureByPath("D:\\pic.png",copies,printerName);//打印一张存在指定路径的图片
}
}
由于原本插件是添加好引用的,反编译之后缺少了引用,所以要去统一的安装路径E:\unity5.3.2\统一\编辑\数据\单声道\lib中\单\2.0(这是我本地安装的路径)中找到System.Drawing.dll程序程序放入项目中的插件下。如在VS中报错没有添加引用,则要对项目添加引用
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。