点击打印按钮时,系统崩溃
我已经这样做了在运行时生成PDF B中的过程是这样的,当我点击与文件夹中生成的PDF打印按钮时,我上的打印按钮$ B $点击。
I have done like this for generating pdf at runtime when i click on the print button The process is like this when I click on the print button the pdf is generated with folder.
有关,我做过这样的:
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<paymenttypeprint> paymenttype = new List<paymenttypeprint>();
List<printfunctions> printfunction = new List<printfunctions>();
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<printfunctions> _array;
private string _address;
private string _paymethod;
private string _ddproviders;
public printFunction(List<printfunctions> 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行的工作不细
Its working fine when the ListView
lstviewcashmembers has rows upto 100 or 300, but its not working when the ListView
lstviewcashmembers has 1600 rows.
在该行系统崩溃:
pdfRenderer.RenderDocument();
执行不进入下一行,并没有显示也是系统刚刚崩溃任何异常当我点击打印按钮,如果的ListView
有1600行。
这有什么错在我的代码使用MigraDoc和PDFsharp库在运行时生成PDF?
Is there anything wrong in my code for generating PDF at run time using MigraDoc and PDFsharp libraries?
会有人请帮助这个......
Would anyone please help on this .....
非常感谢........
Many thanks........
MODIFIED : It will take four minutes for generating pdf so how should I reduce this time
将在这个任何一个帮助
非常感谢
从的 http://pdfsharp.codeplex.com/releases/view/37054 :
如果你喜欢速度:留在PDFsharp 1.30。如果你喜欢小PDF
文件:使用PDFsharp 1.31。 PDFsharp的未来版本将支持
两种模式(支持速度和青睐大小)。
If you favor speed: stay with PDFsharp 1.30. If you favor small PDF files: use PDFsharp 1.31. Future versions of PDFsharp will support both modes (favour speed and favour size).
这也许会有所帮助。