单击打印按钮时系统崩溃

我这样做是为了在运行时生成pdf,当我点击打印按钮时当我点击打印按钮时,这个过程是这样的,pdf是用文件夹生成的。

为此,我这样做了:

private void btnPrint_Click(object sender, EventArgs e) { private const string PAYMENT_PATH = @"c:\xxxxx\xxxxx\paymentType_{0}"; btnPrint.Visible = true; btnPrint.Enabled = true; string pay = cbpaymenttype.Text; string dds = cbddprovider.Text; string path = String.Format(PAYMENT_PATH, DateTime.Now.ToString("ddMMyyyyHHmm")); //List paymenttype = new List(); List printfunction = new List(); foreach (ListViewItem item in lstviewcashmembers.Items) { printfunctions allpayments = new printfunctions(); allpayments.member_Lastname = item.SubItems[1].Text; allpayments.member_Firstname = item.SubItems[2].Text; allpayments.Postcode = item.SubItems[3].Text; allpayments.ddReference = item.SubItems[4].Text; allpayments.ddprovider = item.SubItems[5].Text; allpayments.Monthlyamount = Convert.ToDecimal(item.SubItems[6].Text); allpayments.MembershipType = item.SubItems[7].Text; allpayments.Status = item.SubItems[8].Text; allpayments.Enddate = Convert.ToDateTime(item.SubItems[9].Text); allpayments.paymentmethods = item.SubItems[10].Text; printfunction.Add(allpayments); } new printFunction(printfunction, new Company(mf.gBaseUrl).GetSingleLineCompanyDetails(), path, pay, dds); System.Diagnostics.Process.Start("explorer.exe", path); } 

我已经创建了类printfunctions

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using PdfSharp; using PdfSharp.Drawing; using PdfSharp.Pdf; using PdfSharp.Drawing.Layout; using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; using MigraDoc.DocumentObjectModel.Shapes; using MigraDoc.DocumentObjectModel.Tables; using MigraDoc.DocumentObjectModel.Fields; using System.IO; namespace classes { public class printfunctions { public string member_Lastname; public string member_Firstname; public string Postcode; public string ddReference; public string ddprovider; public decimal Monthlyamount; public string MembershipType; public string Status; public DateTime Enddate; public string paymentmethods; } public class printFunction { private Document _document; private Table _table; private List _array; private string _address; private string _paymethod; private string _ddproviders; public printFunction(List array, string address, string exportpath, string paymentmethod, string ddproviders) { _array = array; _address = address; _paymethod = paymentmethod; _ddproviders = ddproviders; Document ddreportdoc = CreateDocument(); PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true); pdfRenderer.Document = ddreportdoc; if (!Directory.Exists(exportpath)) Directory.CreateDirectory(exportpath); pdfRenderer.RenderDocument(); if (paymentmethod != "All") { pdfRenderer.Save(String.Format(@"{0}\{1} MEMBERS REPORT.pdf", exportpath, _paymethod)); } else if (ddproviders != "") { pdfRenderer.Save(String.Format(@"{0}\{1} MEMBERS REPORT.pdf", exportpath, _ddproviders)); } } public Document CreateDocument() { _document = new Document(); if (_ddproviders != "") { _document.Info.Title = string.Format("{0}", _ddproviders); } else if (_paymethod != "All") { _document.Info.Title = string.Format("{0}", _paymethod); } _document.Info.Author = "xxxxxxx"; DefineStyles(); CreatePage(); FillContent(); return _document; } private void DefineStyles() { Style style = _document.Styles["Normal"]; style.Font.Name = "Verdana"; style = _document.Styles[StyleNames.Header]; style.ParagraphFormat.AddTabStop("8cm", TabAlignment.Right); style = _document.Styles[StyleNames.Footer]; style.ParagraphFormat.AddTabStop("7cm", TabAlignment.Center); // Create a new style called Table based on style Normal style = _document.Styles.AddStyle("Table", "Normal"); style.Font.Name = "Verdana"; style.Font.Size = 6; // Create a new style called Reference based on style Normal style = _document.Styles.AddStyle("Reference", "Normal"); style.ParagraphFormat.SpaceBefore = "6mm"; style.ParagraphFormat.SpaceAfter = "6mm"; style.ParagraphFormat.TabStops.AddTabStop("6cm", TabAlignment.Right); } private void CreatePage() { Section section = _document.AddSection(); // Create footer Paragraph paragraph = section.Footers.Primary.AddParagraph(); paragraph.AddText(_address); paragraph.Format.Font.Size = 8; paragraph.Format.Alignment = ParagraphAlignment.Center; paragraph = section.AddParagraph(); paragraph.Format.SpaceBefore = "1.3cm"; paragraph.Style = "Reference"; if (_paymethod == "All") { paragraph.AddFormattedText(string.Format("{0} MEMBERS MONTHLY REPORT", _paymethod), TextFormat.Bold); } else if (_ddproviders == "All providers") { paragraph.AddFormattedText(string.Format("{0} MEMBERS MONTHLY REPORT", _ddproviders), TextFormat.Bold); } paragraph.AddTab(); paragraph.AddDateField("dd MMM yyyy"); _table = section.AddTable(); _table.Style = "Table"; _table.Borders.Color = new Color(0, 0, 0); //Defining the columns Column column = _table.AddColumn("1.7cm"); //Lastname column.Format.Alignment = ParagraphAlignment.Center; column = _table.AddColumn("1.7cm"); // first name column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // postcode column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // DD ref column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); //DD provider Name column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // Monthly Amount column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // mship type column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // status column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // Expiry date column.Format.Alignment = ParagraphAlignment.Left; column = _table.AddColumn("1.7cm"); // payment type column.Format.Alignment = ParagraphAlignment.Right; // Create the header of the _table Row row = _table.AddRow(); row.HeadingFormat = row.Format.Font.Bold = true; row.Format.Alignment = ParagraphAlignment.Center; row.Cells[0].AddParagraph("Last Name"); row.Cells[0].Format.Alignment = ParagraphAlignment.Left; row.Cells[1].AddParagraph("First Name"); row.Cells[1].Format.Alignment = ParagraphAlignment.Left; row.Cells[2].AddParagraph("Post Code"); row.Cells[2].Format.Alignment = ParagraphAlignment.Left; row.Cells[3].AddParagraph("DD Reference"); row.Cells[3].Format.Alignment = ParagraphAlignment.Left; row.Cells[4].AddParagraph("DDProvider Name"); row.Cells[4].Format.Alignment = ParagraphAlignment.Left; row.Cells[5].AddParagraph("Monthly Amount"); row.Cells[5].Format.Alignment = ParagraphAlignment.Left; row.Cells[6].AddParagraph("Memebrship Type"); row.Cells[6].Format.Alignment = ParagraphAlignment.Left; row.Cells[7].AddParagraph("Status"); row.Cells[7].Format.Alignment = ParagraphAlignment.Left; row.Cells[8].AddParagraph("ExpiryDate"); row.Cells[8].Format.Alignment = ParagraphAlignment.Left; row.Cells[9].AddParagraph("payment type"); row.Cells[9].Format.Alignment = ParagraphAlignment.Left; } private void FillContent() { foreach (var item in _array) { // Each item fills two rows Row row1 = _table.AddRow(); row1.TopPadding = 1.0; Paragraph paragraph; row1.Cells[0].VerticalAlignment = VerticalAlignment.Center; row1.Cells[0].Format.Alignment = ParagraphAlignment.Left; row1.Cells[0].AddParagraph(item.member_Lastname); row1.Cells[1].Format.Alignment = ParagraphAlignment.Right; paragraph = row1.Cells[1].AddParagraph(item.member_Firstname); row1.Cells[2].Format.Alignment = ParagraphAlignment.Left; paragraph = row1.Cells[2].AddParagraph(item.Postcode); row1.Cells[3].Format.Alignment = ParagraphAlignment.Right; paragraph = row1.Cells[3].AddParagraph(item.ddReference); row1.Cells[4].Format.Alignment = ParagraphAlignment.Left; paragraph = row1.Cells[4].AddParagraph(item.ddprovider); row1.Cells[5].Format.Alignment = ParagraphAlignment.Right; paragraph = row1.Cells[5].AddParagraph(item.Monthlyamount.ToString("F2")); row1.Cells[6].Format.Alignment = ParagraphAlignment.Left; paragraph = row1.Cells[6].AddParagraph(item.MembershipType); row1.Cells[7].Format.Alignment = ParagraphAlignment.Right; paragraph = row1.Cells[7].AddParagraph(item.Status); row1.Cells[8].Format.Alignment = ParagraphAlignment.Left; paragraph = row1.Cells[8].AddParagraph(item.Enddate.ToString("dd MMM yyyy")); row1.Cells[9].Format.Alignment = ParagraphAlignment.Right; paragraph = row1.Cells[9].AddParagraph(item.paymentmethods); } } } } 

ListView lstviewcashmembers的行数达到100或300时,它的工作正常,但当ListView lstviewcashmembers有1600行时,它不起作用。

系统在此行崩溃:

 pdfRenderer.RenderDocument(); 

执行不会转到下一行,并且它没有显示任何exception,当我单击打印按钮并且ListView有1600行时系统也会崩溃。

我的代码在运行时使用MigraDoc和PDFsharp库生成PDF有什么问题吗?

有人请帮忙吗…..

非常感谢……..

  MODIFIED : It will take four minutes for generating pdf so how should I reduce this time 

对此有任何帮助

非常感谢

在这里启用VS中的exception处理,您将获得确切的exception描述。 查看您的问题描述听起来像这可能是行数限制。 顺便提一下,查看链接。

问候。

摘自http://pdfsharp.codeplex.com/releases/view/37054 :

如果您喜欢速度:请继续使用PDFsharp 1.30。 如果您喜欢小PDF文件:请使用PDFsharp 1.31。 PDFsharp的未来版本将支持这两种模式(支持速度和支持大小)。

也许这有帮助。