用鞭炮炸牛粪的老头
2015-08-04 13:23
采纳率: 0%
浏览 6.9k

关于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:\Users\glgstwp\Desktop\Gloit\2015-07-28\1.1.0\ali-asset-tagger\ali-asset-tagger\ali-asset-tagger\ali-asset-tagger\Services\AssetCardService.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装服务的时候有弹窗是不成功不允许的,但是调用打印机的时候怎么做才能不闪出任何打印机相关的窗口呢?我上面的代码已经是直接使用默认的打印机打印了,但是运行的时候还是会有一个窗口在任务栏闪一下,应该是打印机的相关的。请各位帮帮忙,感激不尽!项目很急,我刚毕业,公司没人可以帮到我,万能的网友,拜托了!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • blownewbee 2015-08-04 13:43

    添加一个虚拟打印机,比如acrobat或者随便添加一个打印机看看

    点赞 打赏 评论
  • lozone11 2015-08-04 13:49

    InvalidPrinterException: No printers are installed,这里提示没有安装打印机,你查看一下你的电脑安装了打印机驱动没有,后者确保打印机好的,能够工作的。
    C#调用打印机

    点赞 打赏 评论
  • 冰恨 2015-08-04 14:56

    大概看了一看,初步估计不是你代码的问题,而是机器的问题,也就是说你安装的打印机是不是有问题还是安装错误,或者没有安装。。 ;
    如何还是不行,换一台电脑试试,还是不可以建议尝试换一种方式来实现;

    点赞 打赏 评论
  • baidu_33368827 2016-08-08 04:19

    请问楼主解决了这个问题吗,我现在也是这种情况。pd.Print (); //异常指向的就是这一行。在vs2012里面调试打印可以,但是一发布到服务就不行了。PS:服务器和本机的本地打印都是正常的。

    点赞 打赏 评论

相关推荐 更多相似问题