繁体   English   中英

从asp.net MVC创建多页PDF?

[英]create multiple page pdf from asp.net mvc?

我试图动态创建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");

您可以像这样向文档添加更多页面:

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

拳头您必须添加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())

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM