问题描述
- 关于C#调用打印机异常问题
-
项目介绍:在客户那边有一个平台,是通过web浏览器去访问的,我主要做的就是在客户端提供一个服务程序,然后让他们的平台调用我的服务程序的url来完成各种相关的数据处理。我用的是C#和nancy,做的是控制台的项目,然后用nssm弄成windows服务,服务目前其他各项处理都没问题,除了这个打印的功能。打印的这一块存在问题,我在xamarin和vs里面进行运行或调试的时候打印功能一切正常,但是使用nssm装成windows服务以后就开始报异常,异常的详细信息如下:System.Drawing.Printing.InvalidPrinterException: No printers are installed. at System.Drawing.Printing.PrinterSettings.GetHdevmodeInternal() at System.Drawing.Printing.PrinterSettings.GetHdevmode(PageSettings pageSettings) at System.Drawing.Printing.PrintController.OnStartPrint(PrintDocument document, PrintEventArgs e) at System.Windows.Forms.PrintControllerWithStatusDialog.OnStartPrint(PrintDocument document, PrintEventArgs e) at System.Drawing.Printing.PrintController.Print(PrintDocument document) at System.Drawing.Printing.PrintDocument.Print() at AliAssetTagger.Services.AssetCardService.PrintUserdata(UserData userdata) in c:UsersglgstwpDesktopGloit2015-07-281.1.0ali-asset-taggerali-asset-taggerali-asset-taggerali-asset-taggerServicesAssetCardService.cs:line 105
我的打印部分的代码是
public string Print (UserData userdata)
{try{
userdataToPrint = userdata;
PrintDocument pd = new PrintDocument ();
pd.PrintPage += new PrintPageEventHandler (pd_PrintPage);
pd.Print (); //异常指向的就是这一行
}catch(Exception e) {
return e.ToString ();
}
return "打印完成!";
}
public void pd_PrintPage (object sender, System.Drawing.Printing.PrintPageEventArgs e)
{ Console.WriteLine ("打印ing");
try {
//通过GDI+绘制打印文档
e.Graphics.DrawString ("广西国税", new Font ("宋体", 8), Brushes.Black, 90, 0);
e.Graphics.DrawString ("广西壮族自治区税务厅", new Font ("宋体", 4), Brushes.Black, 90, 12);
e.Graphics.DrawLine (new Pen (Color.Black, (float)1.00), 90, 18, 200, 18);
e.Graphics.DrawString ("XX市XX县(区)国家税务局", new Font ("宋体", 7), Brushes.Black, 90, 22);
e.Graphics.DrawLine (new Pen (Color.Yellow, (float)5.00), 0, 39, 300, 39);
e.Graphics.DrawString ("资产编号: " + userdataToPrint.asset_No, new Font ("宋体", 12, FontStyle.Bold), Brushes.Black, 12, 55);
e.Graphics.DrawString ("资产名称: " + userdataToPrint.asset_Name, new Font ("宋体", 12, FontStyle.Bold), Brushes.Black, 12, 80);
e.Graphics.DrawString ("规格型号: " + userdataToPrint.specification_Model, new Font ("宋体", 12, FontStyle.Bold), Brushes.Black, 12, 105);
e.Graphics.DrawString ("使用部门: " + userdataToPrint.department, new Font ("宋体", 12, FontStyle.Bold), Brushes.Black, 12, 130);
e.Graphics.DrawString ("使用人: " + userdataToPrint.responsible, new Font ("宋体", 12, FontStyle.Bold), Brushes.Black, 12, 155);
e.Graphics.DrawString ("购置日期: " + userdataToPrint.purchased_On, new Font ("宋体", 12, FontStyle.Bold), Brushes.Black, 12, 180);
Console.WriteLine ("打印结束");
}
catch (Exception ex) {MessageBox.Show (ex.ToString ());
}
}
我在网上也看到了很多No printers are installed的异常,但是并不是没有安装打印机驱动,在电脑上的打印机和传真那里可以看到很多的打印机和传真,在xamarin studio或者visual studio里面都是正常的,没有异常输出,能够正确打印,但是一装成windows服务就不行,是不是弹窗的原因?我知道nssm装服务的时候有弹窗是不成功不允许的,但是调用打印机的时候怎么做才能不闪出任何打印机相关的窗口呢?我上面的代码已经是直接使用默认的打印机打印了,但是运行的时候还是会有一个窗口在任务栏闪一下,应该是打印机的相关的。请各位帮帮忙,感激不尽!项目很急,我刚毕业,公司没人可以帮到我,万能的网友,拜托了!
解决方案
解决方案二:
添加一个虚拟打印机,比如acrobat或者随便添加一个打印机看看
解决方案三:
InvalidPrinterException: No printers are installed,这里提示没有安装打印机,你查看一下你的电脑安装了打印机驱动没有,后者确保打印机好的,能够工作的。
C#调用打印机
解决方案四:
大概看了一看,初步估计不是你代码的问题,而是机器的问题,也就是说你安装的打印机是不是有问题还是安装错误,或者没有安装。。 ;
如何还是不行,换一台电脑试试,还是不可以建议尝试换一种方式来实现;