0

我使用PerpetuumSoft打印多个报告,但出现以下异常:

Index was outside the bounds of the array.Stack Trace :at System.Drawing.Printing.PrinterSettings.StringCollection.get_Item(Int32 index)

我的代码:

  PrintReportSample.ReportPrintDocument RP = new PrintReportSample.ReportPrintDocument(lectReport);                     
  string pr = System.Drawing.Printing.PrinterSettings.InstalledPrinters[1].ToString();
  RP.PrinterSettings.PrinterName = pr;
  RP.DefaultPageSettings.Landscape = true;
  RP.DefaultPageSettings.PaperSize.Width = 11;
  RP.Print();

我想识别客户端的默认打印机,而不是服务器。

我只在服务器上遇到这个问题,本地一切正常!


编辑 :

根据答案:

string pr = System.Drawing.Printing.PrinterSettings.InstalledPrinters[0].ToString();

它加载了很长时间,根本没有发生任何事情,我没有得到任何异常?


本地当我尝试打印时,出现“保存XPS文档”窗口

4

3 回答 3

2

您正在尝试从不存在的数组元素中提取值,在此行中。

string pr = 
  System.Drawing.Printing.PrinterSettings.InstalledPrinters[1].ToString();

您假设 InstalledPrinters 属性中至少有两个值。

我还怀疑您应该查看数组中的第一个元素。

string pr = 
  System.Drawing.Printing.PrinterSettings.InstalledPrinters[0].ToString();

无论哪种方式,您都应该在使用它之前防御性地检查该值是否存在。

if ( System.Drawing.Printing.PrinterSettings.InstalledPrinters != null && 
     System.Drawing.Printing.PrinterSettings.InstalledPrinters.Count > 0 )
{
   // Do your work here
}
于 2013-04-10T09:44:22.523 回答
1

确保用户安装了任何打印机,如果需要,请使用第一个(索引 0!)。无论如何,您只需使用第二台打印机。

于 2013-04-10T09:41:26.870 回答
1

查看代码,您选择打印的打印机有 OutOfBound 问题。c# 中的集合/数组是零绑定索引。

此外,您甚至应该确保已printer(s)安装。

所以,

InstalledPrinters[1]

应该

//assuming that there is at least one printer installed
InstalledPrinters[0]
于 2013-04-10T09:41:55.090 回答