索引在打印过程中超出了数组的范围

时间:2013-04-10 09:38:33

标签: c# asp.net performance iis rdlc

我使用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文档窗口“出现

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

确保用户已安装任何打印机,如果需要,请先取下(索引0!)。无论如何,你只需要使用第二台打印机。

答案 2 :(得分:1)

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

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

所以,

InstalledPrinters[1]

应该是

//assuming that there is at least one printer installed
InstalledPrinters[0]