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.
For that I have done like this:
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);
}
I have created the class printfunctions
like this:
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);
}
}
}
}
Its working fine when the ListView
lstviewcashmembers has rows upto 100 or 300, but its not working when the ListView
lstviewcashmembers has 1600 rows.
The system crashes at this line:
pdfRenderer.RenderDocument();
The execution does not go to the next line and it does not showing any exception also the system just crashes when I click on the print button and if the ListView
has 1600 rows.
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
would any one help on this
Many thanks