为数据表中的每一行生成不同的pdf文件,并发送电子邮件附件

时间:2016-03-08 06:38:18

标签: c# asp.net sql-server

我需要有一个功能,点击按钮我需要使用C#.net

为数据表中的每条记录生成pdf文件

我需要为每个人生成PDF,然后将PDF附件发送给每个人。 PDF的数据被提取到所有学生的数据表中。

我只需要一个功能,我可以为数据表中的每一行生成单独的pdf并发送电子邮件附件。

任何人都可以帮助我并告诉我其他任何软件包都可以在C#.net。

中找到

我已经尝试过这种方式但是不起作用,这在数据表中的一行工作之后,它没有返回生成pdf的下一个循环,请查看以下代码。

StringBuilder sb = new StringBuilder();
string companyName = "ASPSnippets";
int orderNo = 2303;
protected void BTNsubmint_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("server=ServerName; database=Dbname; Integrated Security=True");
    SqlDataAdapter da = new SqlDataAdapter("select * from productss", con);
    DataTable dt = new DataTable();          
    da.Fill(dt);
    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter hw = new HtmlTextWriter(sw))
        {

            //Generate Invoice (Bill) Header.
            sb.Append("<table width='100%' cellspacing='0' cellpadding='2'>");
            sb.Append("<tr><td align='center' style='background-color: #18B5F0' colspan = '2'><b>Order Sheet</b></td></tr>");
            sb.Append("<tr><td colspan = '2'></td></tr>");
            sb.Append("<tr><td><b>Order No: </b>");
            sb.Append(orderNo);
            sb.Append("</td><td align = 'right'><b>Date: </b>");
            sb.Append(DateTime.Now);
            sb.Append(" </td></tr>");
            sb.Append("<tr><td colspan = '2'><b>Company Name: </b>");
            sb.Append(companyName);
            sb.Append("</td></tr>");
            sb.Append("</table>");
            sb.Append("<br />");

            //Generate Invoice (Bill) Items Grid.
            sb.Append("<table border = '1'>");
            sb.Append("<tr>");
            foreach (DataColumn column in dt.Columns)
            {
                sb.Append("<th>");
                sb.Append(column.ColumnName);
                sb.Append("</th>");
            }
            sb.Append("</tr>");
            foreach (DataRow row in dt.Rows)
            {
                sb.Append("<tr>");
                foreach (DataColumn column in dt.Columns)
                {
                    sb.Append("<td>");
                    sb.Append(row[column]);
                    sb.Append("</td>");
                }

                sb.Append("</tr>");
                sb.Append("</table>");

                StringReader sr = new StringReader(sb.ToString());
                Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc,                               Response.OutputStream);
                pdfDoc.Open();
                htmlparser.Parse(sr);
                pdfDoc.Close();
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment;filename=Invoice_" + orderNo + ".pdf");
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Write(pdfDoc);
                Response.End();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

这适用于数据表中的一行

问题是Response.End()命令 - 它退出了你的脚本,所以不会处理第二行和下一行。

请参阅此问题:Convert HTML to PDF in .NET在没有Response.End的情况下重写代码。调试代码以查看问题的实际位置。