从asp.net mvc创建多页pdf?

时间:2015-09-11 11:03:38

标签: c# asp.net asp.net-mvc pdf-generation

我试图动态创建一个pdf并通过附加邮件发送它。 这是我的代码,它对我来说很完美。

   public ActionResult sendmail()
    {
        MemoryStream ms = new MemoryStream();
        Document doc = new Document(PageSize.A4, 10f, 10f, 100f, 0.0f);
        PdfWriter writer = PdfWriter.GetInstance(doc, ms);
        doc.Open(); //open doc for editing
        doc.Add(new Paragraph("First Paragraph"));
        doc.Add(new Paragraph("Second Paragraph"));
        writer.CloseStream = false; //important
        doc.Close(); //build the doc.

        ms.Position = 0;

        SmtpClient smtpClient = new SmtpClient();
        smtpClient.Host = "provider.com";
        smtpClient.Credentials = new NetworkCredential("credentialmailid", "password");


        MailMessage mailMessage = new MailMessage()
        {
            From = new MailAddress("from@gmail.com")
        };
        mailMessage.To.Add(new MailAddress("to@gmail.com"));
        mailMessage.Subject = "Pdf attached";            
        mailMessage.Attachments.Add(new Attachment(ms, "pdfname.pdf"));
        smtpClient.Send(mailMessage);
        return RedirectToAction("index");
    }

现在我的问题是:我必须发送的文件是购买确认。它将有3页。很多标题和风格都会出现在其中。

还有一些我必须动态传递的值,比如谁购买它和日期很明智,很多数据应该动态传递

怎么做?我想创建一个要发送的pdf文件的Html,并使用类似这样的动态添加参数......

        string mailpath = Server.MapPath("~/Mail/HtmlOF_pdfToSend.html");
        string mailbody = System.IO.File.ReadAllText(mailpath);
        mailbody = mailbody.Replace("##CompanyName", "Bhavin Merchant");
        mailbody = mailbody.Replace("##BusinessType", "Bhavin business");

2 个答案:

答案 0 :(得分:1)

您可以在文档中添加更多页面,如下所示:

 doc.Open(); //open doc for editing
 doc.Add(new Paragraph("First Paragraph"));
 doc.newPage();
 doc.add(new Paragraph("This is a new page =)"));

答案 1 :(得分:1)

Fist你必须添加iTextSharp dll然后你必须添加一些包:

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html;
using iTextSharp.text.xml;
using iTextSharp.text.html.simpleparser;

然后根据你的问题。你想动态传递值,所以我发布一些语法作为例子:

       // Create a Document object
        var document = new Document(PageSize.A4, 50, 50, 25, 25);
        var output = new MemoryStream();

    // Create a new PdfWriter object, specifying the output stream
    var writer = PdfWriter.GetInstance(document, output);

   // Open the Document for writing
        document.Open();

假设您的pdf documnet中有标题,那么语法将是:

        var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/it.jpg"));
        logo.SetAbsolutePosition(300, 750);
        document.Add(logo);

如果您想添加短语:

        Phrase titl = new Phrase("\nE-Ticket\n");
        titl.Font.SetStyle(Font.BOLD);
        document.Add(titl);

添加行:

   Phrase titl1 = new   Phrase("--------------------------------------------------------------------------------------\n\n");
        titl1.Font.SetStyle(Font.BOLD);
        document.Add(titl1);

更改文字样式:

在这里你可以改变字体样式&颜色。

       Phrase title = new Phrase("Booking Date-" + txtDate1.Text + "\n");
        title.Font.SetStyle(Font.BOLD);
        document.Add(title);

如果要添加pdf表:-dt是数据表。

      PdfPTable UserInfoTable = new PdfPTable(dt.Columns.Count);
        PdfPRow row = null;
       UserInfoTable.AddCell(--add cell----);
       document.Add(UserInfoTable);

关闭文档 - 这会将文档内容保存到输出流

        document.Close();


       Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", string.Format("attachment;filename=Receipt-{0}.pdf", "hello"));
        Response.BinaryWrite(output.ToArray())

在这里,我将一些示例代码粘贴为您的问题。