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