我这样做是为了在运行时生成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<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行时它不起作用。
系统在此行崩溃:
pdfRenderer.RenderDocument();
执行没有进入下一行,它也没有显示任何异常,当我点击打印按钮并且ListView
有1600行时系统崩溃了。
我的代码在运行时使用MigraDoc和PDFsharp库生成PDF有什么问题吗?
有人请帮忙吗.....
非常感谢........
MODIFIED : It will take four minutes for generating pdf so how should I reduce this time
对此有任何帮助
非常感谢
答案 0 :(得分:0)
在VS中启用异常处理,例如here,您将获得确切的异常描述。查看您的问题描述听起来像这可能是行数限制。顺便提一下,查看链接。
问候。
答案 1 :(得分:0)
摘自http://pdfsharp.codeplex.com/releases/view/37054:
如果您喜欢速度:请继续使用PDFsharp 1.30。如果你喜欢小PDF 文件:使用PDFsharp 1.31。 PDFsharp的未来版本将支持 两种模式(赞成速度和青睐大小)。
也许这有帮助。