点击打印按钮时,系统崩溃

问题描述:

我已经这样做了在运行时生成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).

这也许会有所帮助。