来自预定义模板的多页 PDF 文档

发布于 2024-12-21 19:24:35 字数 2997 浏览 1 评论 0原文

我需要使用一些预定义的公司模板生成 PDF 格式的发票报告。我能够使用 iTextSharp 创建/生成单页 PDF 报告。

问题:当发票报表跨越多页时,就会出现问题。我无法将报告(发票声明)扩展到下一页(第二页)。如果一页无法容纳所有数据,则应写在第二页,同时仍使用公司模板。

该模板位于以下路径:

HostingEnvironment.MapPath("~/Content/InvoiceTemplate/invoiceTemplate.pdf")

我正在使用 iTextSharp 库来创建文档。以下是用于生成 PDF 的代码:

public class pdfStatementController : Controller {

        Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();

        //
        // GET: /pdfStatement/


        public ActionResult SendPdfStatement(string InvoiceNumber) {
            try {
                InvoiceNumber = InvoiceNumber.Trim();

                ObjectParameter[] parameters = new ObjectParameter[1];
                parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

                List<Models.Statement> statementList = new List<Models.Statement>();
                statementList = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();
                pdfStatementController.WriteInTemplate(statementList);

                return RedirectToAction("Invoice", "Invoice", new { id = statementList.FirstOrDefault().Customer_ID.ToString().Trim() });
            } catch (Exception e) {
                return View("Error");
            }
        } 

    public static void WriteInTemplate(List<Models.Statement> statementList) {
        string invoiceNumber = statementList.FirstOrDefault().Invoice.ToString().Trim();
        string month = null;
        string day = null;
        string year = null;

        PdfReader pdfReader = new PdfReader(
                                  HostingEnvironment.MapPath(
                                       "~/Content/InvoiceTemplate/invoiceTemplate.pdf"));
        FileStream fileStream = new FileStream(
                                   HostingEnvironment.MapPath(
                                      "~/Content/reports/" + invoiceNumber + ".pdf"),
                                      FileMode.Create);
        PdfStamper pdfStamper = new PdfStamper(pdfReader, fileStream);
        AcroFields pdfFields = pdfStamper.AcroFields;

        pdfFields.SetField("BillToCompany", statementList.FirstOrDefault().BillToCompany.ToString().Trim().ToUpper());
        pdfFields.SetField("BillToContact", statementList.FirstOrDefault().BillToContact.ToString().Trim().ToUpper());
        pdfFields.SetField("CustomerId", statementList.FirstOrDefault().Customer_ID);
        pdfFields.SetField("InvoiceNumber", statementList.FirstOrDefault().Invoice.ToString().Trim());
        pdfFields.SetField("JobNumber", statementList.FirstOrDefault().JobNumber.ToString().Trim());
        pdfFields.SetField("Caller", statementList.FirstOrDefault().Caller.ToString().Trim());

        pdfStamper.FormFlattening = true; // generate a flat PDF 
        pdfStamper.Close();
        pdfReader.Close();
    }
}

I have a requirement to generate invoice reports in PDF using some predefined company templates. I am able to create/generate SINGLE PAGE PDF reports using iTextSharp.

Problem: The problem comes when the invoice statement spans MULTIPLE PAGES. I am not able to extend the report(invoice statement) to next(2nd) page. If all the data can not be accommodated on one page it should be written on 2nd page, while still using the company template.

The template is present at following path:

HostingEnvironment.MapPath("~/Content/InvoiceTemplate/invoiceTemplate.pdf")

I am using iTextSharp library to create documents. Below is the code used to generate the PDF:

public class pdfStatementController : Controller {

        Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();

        //
        // GET: /pdfStatement/


        public ActionResult SendPdfStatement(string InvoiceNumber) {
            try {
                InvoiceNumber = InvoiceNumber.Trim();

                ObjectParameter[] parameters = new ObjectParameter[1];
                parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

                List<Models.Statement> statementList = new List<Models.Statement>();
                statementList = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();
                pdfStatementController.WriteInTemplate(statementList);

                return RedirectToAction("Invoice", "Invoice", new { id = statementList.FirstOrDefault().Customer_ID.ToString().Trim() });
            } catch (Exception e) {
                return View("Error");
            }
        } 

    public static void WriteInTemplate(List<Models.Statement> statementList) {
        string invoiceNumber = statementList.FirstOrDefault().Invoice.ToString().Trim();
        string month = null;
        string day = null;
        string year = null;

        PdfReader pdfReader = new PdfReader(
                                  HostingEnvironment.MapPath(
                                       "~/Content/InvoiceTemplate/invoiceTemplate.pdf"));
        FileStream fileStream = new FileStream(
                                   HostingEnvironment.MapPath(
                                      "~/Content/reports/" + invoiceNumber + ".pdf"),
                                      FileMode.Create);
        PdfStamper pdfStamper = new PdfStamper(pdfReader, fileStream);
        AcroFields pdfFields = pdfStamper.AcroFields;

        pdfFields.SetField("BillToCompany", statementList.FirstOrDefault().BillToCompany.ToString().Trim().ToUpper());
        pdfFields.SetField("BillToContact", statementList.FirstOrDefault().BillToContact.ToString().Trim().ToUpper());
        pdfFields.SetField("CustomerId", statementList.FirstOrDefault().Customer_ID);
        pdfFields.SetField("InvoiceNumber", statementList.FirstOrDefault().Invoice.ToString().Trim());
        pdfFields.SetField("JobNumber", statementList.FirstOrDefault().JobNumber.ToString().Trim());
        pdfFields.SetField("Caller", statementList.FirstOrDefault().Caller.ToString().Trim());

        pdfStamper.FormFlattening = true; // generate a flat PDF 
        pdfStamper.Close();
        pdfReader.Close();
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黑白记忆 2024-12-28 19:24:35

您的代码看起来不错,只缺少几个中间步骤。

由于您对每个页面使用相同的 PDF 模板(当需要生成两个或更多页面时),而不是使用 PdfStamper 将内容直接添加到 文档 ,您使用 PdfSmartCopyPdfCopy 对象。

仍然需要 PdfStamper。但是,在本例中,它用于在您迭代 Models.Statement 集合时创建一个填充数据的内存中(单个)页面。

换句话说,PdfSmartCopy/PdfCopy 将您的语句作为一个整体(总页数)进行维护,而 PdfStamper 则用作缓冲区,将您的各个语句逐页添加到你的PDF。这是一个简单的 HTTP 处理程序 (.ashx) 工作示例:

<%@ WebHandler Language="C#" Class="copyFillTemplate" %>
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.pdf;

public class copyFillTemplate : IHttpHandler {
  public void ProcessRequest (HttpContext context) {
    HttpServerUtility Server = context.Server;
    HttpResponse Response = context.Response;
    Response.ContentType = "application/pdf";
// template used to test __this__ example;
// replace with __your__ PDF template
    string pdfTemplatePath = Server.MapPath(
      "~/app_data/template.pdf"
    );
// this example's test data; replace with __your__ data collection   
    List<Statement> statementList = Statement.GetStatements();

// COPY FROM HERE

    using (Document document = new Document()) {
// PdfSmartCopy reduces PDF file size by reusing parts
// of the PDF template, but uses more memory. you can
// replace PdfSmartCopy with PdfCopy if memory is an issue
      using (PdfSmartCopy copy = new PdfSmartCopy(
        document, Response.OutputStream)
      ) 
      {
        document.Open();
// used to test this example
        int counter = 0;
// generate one page per statement        
        foreach (Statement statment in statementList) {
          ++counter;
// replace this with your PDF form template          
          PdfReader reader = new PdfReader(pdfTemplatePath);
          using (var ms = new MemoryStream()) {
            using (PdfStamper stamper = new PdfStamper(reader, ms)) {
              AcroFields form = stamper.AcroFields;
// replace this with your field data for each page
              form.SetField("title", counter.ToString());
              stamper.FormFlattening = true;
            }
            reader = new PdfReader(ms.ToArray());
// add one page at a time; assumes your template is only one page.
// if your template is more than one page you will need to 
// call GetImportedPage() for each page in your template
            copy.AddPage(copy.GetImportedPage(reader, 1));
          }
        }
      }

// COPY TO HERE

    }
  }
  public bool IsReusable { get { return false; } }

  public class Statement {
    public string FieldName, FieldValue;
    public static List<Statement> GetStatements() {
      List<Statement> s = new List<Statement>();
      for (int i = 0; i < 5; ++i) {s.Add(new Statement());}
      return s;
    }
  }
}

希望内联注释有所帮助。显然,您需要删除替换我用来测试示例代码的一些部分。

Your code looks good and is only missing a couple of intermediate steps.

Since you're using the same PDF template for every page (when two or more pages need to be generated), instead of using a PdfStamper to add content directly to the Document, you use a PdfSmartCopy or PdfCopy object.

The PdfStamper is still needed. However, in this case it's used to create an in-memory (single) page filled with data as you as you iterate over your Models.Statement collection.

In other words, PdfSmartCopy/PdfCopy maintains your statements as a whole, (total pages) and PdfStamper is used as a buffer that adds your individual statements page-by-page to your PDF. Here's a simple working example HTTP hander (.ashx):

<%@ WebHandler Language="C#" Class="copyFillTemplate" %>
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.pdf;

public class copyFillTemplate : IHttpHandler {
  public void ProcessRequest (HttpContext context) {
    HttpServerUtility Server = context.Server;
    HttpResponse Response = context.Response;
    Response.ContentType = "application/pdf";
// template used to test __this__ example;
// replace with __your__ PDF template
    string pdfTemplatePath = Server.MapPath(
      "~/app_data/template.pdf"
    );
// this example's test data; replace with __your__ data collection   
    List<Statement> statementList = Statement.GetStatements();

// COPY FROM HERE

    using (Document document = new Document()) {
// PdfSmartCopy reduces PDF file size by reusing parts
// of the PDF template, but uses more memory. you can
// replace PdfSmartCopy with PdfCopy if memory is an issue
      using (PdfSmartCopy copy = new PdfSmartCopy(
        document, Response.OutputStream)
      ) 
      {
        document.Open();
// used to test this example
        int counter = 0;
// generate one page per statement        
        foreach (Statement statment in statementList) {
          ++counter;
// replace this with your PDF form template          
          PdfReader reader = new PdfReader(pdfTemplatePath);
          using (var ms = new MemoryStream()) {
            using (PdfStamper stamper = new PdfStamper(reader, ms)) {
              AcroFields form = stamper.AcroFields;
// replace this with your field data for each page
              form.SetField("title", counter.ToString());
              stamper.FormFlattening = true;
            }
            reader = new PdfReader(ms.ToArray());
// add one page at a time; assumes your template is only one page.
// if your template is more than one page you will need to 
// call GetImportedPage() for each page in your template
            copy.AddPage(copy.GetImportedPage(reader, 1));
          }
        }
      }

// COPY TO HERE

    }
  }
  public bool IsReusable { get { return false; } }

  public class Statement {
    public string FieldName, FieldValue;
    public static List<Statement> GetStatements() {
      List<Statement> s = new List<Statement>();
      for (int i = 0; i < 5; ++i) {s.Add(new Statement());}
      return s;
    }
  }
}

Hopefully the inline comments help. And you obviously need to remove replace some parts I used to test the example code.

够运 2024-12-28 19:24:35

尽管最后一个答案非常好并且帮助我解决了我的问题,但我将其放在这里是为了总结问题。

问题:我有一个在公司提供的模板中生成多页 pdf 文档的场景。需要生成发票报表并通过 Microsoft Outlook 电子邮件客户端将其附加到电子邮件中。

我使用 MVC3、ASP.NET 4.0、实体框架

解决方案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Hosting;
using System.Web.Mvc;
using System.Data;
using System.Data.Objects;
using System.IO;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.html;
using iTextSharp.text.pdf;
using iTextSharp.text.xml;

namespace InvoiceSearchTool.Controllers

{


 public class pdfStatementController : Controller
{
    Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();
    //
    // GET: /pdfStatement/

    public ActionResult SendPdfStatement(string InvoiceNumber)
    {
        try
        {

            InvoiceNumber = InvoiceNumber.Trim();


            List<Models.Statement> statementList = new List<Models.Statement>();
            //this is if you use entity framework
            {  
               ObjectParameter[] parameters = new ObjectParameter[1];
            parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

               statementList = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();
             }

            //others can simply use line like
            //statementList = GetStatementList(inviceNumber);

            pdfStatementController.WriteInTemplate(statementList);

            return RedirectToAction("Invoice", "Invoice", new { id = statementList.FirstOrDefault().Customer_ID.ToString().Trim() });
        }
        catch (Exception e)
        {
            return View("Error");
        }


    }



public static void WriteInTemplate(List<Models.Statement> statementList)
    {

        try

        {

            string invoiceNumber = statementList.FirstOrDefault().Invoice.ToString().Trim();

            using (Document document = new Document())
            {
                FileStream fileStream = new FileStream(HostingEnvironment.MapPath("~/Content/reports/" + invoiceNumber + ".pdf"), FileMode.Create);
                using (PdfSmartCopy smartCopy = new PdfSmartCopy(document, fileStream))
                {
                    document.Open();

                    PdfReader pdfReader = new PdfReader(HostingEnvironment.MapPath("~/Content/InvoiceTemplate/invoiceTemplate.pdf"));
                            using (var memoryStream = new MemoryStream())
                            {
                                using (PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream))
                                {
                                    string month = null;
                                    string day = null;
                                    string year = null;

                                    AcroFields pdfFields = pdfStamper.AcroFields;
                                    {//billing address
                                        pdfFields.SetField("BillToCompany", statementList.FirstOrDefault().BillToCompany.ToString().Trim().ToUpper());
                                        pdfFields.SetField("BillToContact", statementList.FirstOrDefault().BillToContact.ToString().Trim().ToUpper());

                                        pdfFields.SetField("ShipToCompany", statementList.FirstOrDefault().ShipToCompany.ToString().Trim().ToUpper());
                                        pdfFields.SetField("ShipToContact", statementList.FirstOrDefault().ShipToContact.ToString().Trim().ToUpper());
                                        pdfFields.SetField("PONumber", statementList.FirstOrDefault().PurchaseOrderNo.ToString().Trim());
                                        pdfFields.SetField("OrderNumber", statementList.FirstOrDefault().Order_Number.ToString().Trim());
                                        pdfFields.SetField("ShippingMethod", statementList.FirstOrDefault().Shipping_Method.ToString().Trim());
                                        pdfFields.SetField("PaymentTerms", statementList.FirstOrDefault().Payment_Terms.ToString().Trim());
                                   }
                                   pdfStamper.FormFlattening = true; // generate a flat PDF 

                                }
                                pdfReader = new PdfReader(memoryStream.ToArray());
                                smartCopy.AddPage(smartCopy.GetImportedPage(pdfReader, 1));
                            }
                }
            }

            emailController.CreateMessageWithAttachment(invoiceNumber);
        }
        catch (Exception e)
        {
        }

    }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Net;
using System.Net.Mail;
using System.Web.Hosting;
using System.Net.NetworkInformation;
using System.Data.Objects;

namespace InvoiceSearchTool.Controllers
{


 public class emailController : Controller

 {
    //
    // GET: /email/
    public static void CreateMessageWithAttachment(string invoiceNumber)
    {
        try
        {
            Outlook.Application oApp = new Outlook.Application();
            Outlook.MailItem email = (Outlook.MailItem)(oApp.CreateItem(Outlook.OlItemType.olMailItem));

            Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();

            string recipient = null;
            string messageBody = null;
            #region set email recipients
            {
                ObjectParameter[] parameters = new ObjectParameter[1];
                parameters[0] = new ObjectParameter("InvoiceNumber", invoiceNumber);

                List<Models.EmailAddress> emailList = _db.ExecuteFunction<Models.EmailAddress>("uspGetEmailAddress", parameters).ToList<Models.EmailAddress>();
                if(!string.IsNullOrEmpty(emailList[0].Email.ToString()))
                    recipient = emailList[0].Email.ToString().Trim();
                else
                    recipient = " ";
                email.Recipients.Add(recipient);
            }
            #endregion

            //email subject                 
            email.Subject = "Invoice # " + invoiceNumber;

            #region set email Text
            {
                Models.EmailText emailText = _db.ExecuteFunction<Models.EmailText>("uspEmailText").SingleOrDefault();

                messageBody = emailText.EmailTextLine1.ToString().Trim() + "\n\n\n\n\n\n\n\n\n";
                messageBody += emailText.EmailTextLine2.ToString().Trim() + "\n";
                messageBody += emailText.EmailTextLine3.ToString().Trim();

                email.Body = messageBody;
            }
            #endregion

            #region email attachment
            {
                string fileName = invoiceNumber.Trim();
                string filePath = HostingEnvironment.MapPath("~/Content/reports/");
                filePath = filePath + fileName + ".pdf";
                fileName += ".pdf";
                int iPosition = (int)email.Body.Length + 1;
                int iAttachType = (int)Outlook.OlAttachmentType.olByValue;
                Outlook.Attachment oAttach = email.Attachments.Add(filePath, iAttachType, iPosition, fileName);
            }
            #endregion

            email.Display();
            //uncomment below line to SendAutomatedEmail emails atomaticallly
            //((Outlook.MailItem)email).Send(); 
        }
        catch (Exception e)
        {

        }

    }

Though the last answer is a very good one and helped me to solve my problem, i am putting it here to sum up the question.

Problem: I had a scenario to generate multipage pdf document in Company provided template. Needed to generate invoice statements and attach them to email via Microsoft outlook email Client.

I use MVC3, ASP.NET 4.0, Entity Framework

Solution:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Hosting;
using System.Web.Mvc;
using System.Data;
using System.Data.Objects;
using System.IO;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.html;
using iTextSharp.text.pdf;
using iTextSharp.text.xml;

namespace InvoiceSearchTool.Controllers

{


 public class pdfStatementController : Controller
{
    Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();
    //
    // GET: /pdfStatement/

    public ActionResult SendPdfStatement(string InvoiceNumber)
    {
        try
        {

            InvoiceNumber = InvoiceNumber.Trim();


            List<Models.Statement> statementList = new List<Models.Statement>();
            //this is if you use entity framework
            {  
               ObjectParameter[] parameters = new ObjectParameter[1];
            parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

               statementList = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();
             }

            //others can simply use line like
            //statementList = GetStatementList(inviceNumber);

            pdfStatementController.WriteInTemplate(statementList);

            return RedirectToAction("Invoice", "Invoice", new { id = statementList.FirstOrDefault().Customer_ID.ToString().Trim() });
        }
        catch (Exception e)
        {
            return View("Error");
        }


    }



public static void WriteInTemplate(List<Models.Statement> statementList)
    {

        try

        {

            string invoiceNumber = statementList.FirstOrDefault().Invoice.ToString().Trim();

            using (Document document = new Document())
            {
                FileStream fileStream = new FileStream(HostingEnvironment.MapPath("~/Content/reports/" + invoiceNumber + ".pdf"), FileMode.Create);
                using (PdfSmartCopy smartCopy = new PdfSmartCopy(document, fileStream))
                {
                    document.Open();

                    PdfReader pdfReader = new PdfReader(HostingEnvironment.MapPath("~/Content/InvoiceTemplate/invoiceTemplate.pdf"));
                            using (var memoryStream = new MemoryStream())
                            {
                                using (PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream))
                                {
                                    string month = null;
                                    string day = null;
                                    string year = null;

                                    AcroFields pdfFields = pdfStamper.AcroFields;
                                    {//billing address
                                        pdfFields.SetField("BillToCompany", statementList.FirstOrDefault().BillToCompany.ToString().Trim().ToUpper());
                                        pdfFields.SetField("BillToContact", statementList.FirstOrDefault().BillToContact.ToString().Trim().ToUpper());

                                        pdfFields.SetField("ShipToCompany", statementList.FirstOrDefault().ShipToCompany.ToString().Trim().ToUpper());
                                        pdfFields.SetField("ShipToContact", statementList.FirstOrDefault().ShipToContact.ToString().Trim().ToUpper());
                                        pdfFields.SetField("PONumber", statementList.FirstOrDefault().PurchaseOrderNo.ToString().Trim());
                                        pdfFields.SetField("OrderNumber", statementList.FirstOrDefault().Order_Number.ToString().Trim());
                                        pdfFields.SetField("ShippingMethod", statementList.FirstOrDefault().Shipping_Method.ToString().Trim());
                                        pdfFields.SetField("PaymentTerms", statementList.FirstOrDefault().Payment_Terms.ToString().Trim());
                                   }
                                   pdfStamper.FormFlattening = true; // generate a flat PDF 

                                }
                                pdfReader = new PdfReader(memoryStream.ToArray());
                                smartCopy.AddPage(smartCopy.GetImportedPage(pdfReader, 1));
                            }
                }
            }

            emailController.CreateMessageWithAttachment(invoiceNumber);
        }
        catch (Exception e)
        {
        }

    }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Net;
using System.Net.Mail;
using System.Web.Hosting;
using System.Net.NetworkInformation;
using System.Data.Objects;

namespace InvoiceSearchTool.Controllers
{


 public class emailController : Controller

 {
    //
    // GET: /email/
    public static void CreateMessageWithAttachment(string invoiceNumber)
    {
        try
        {
            Outlook.Application oApp = new Outlook.Application();
            Outlook.MailItem email = (Outlook.MailItem)(oApp.CreateItem(Outlook.OlItemType.olMailItem));

            Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();

            string recipient = null;
            string messageBody = null;
            #region set email recipients
            {
                ObjectParameter[] parameters = new ObjectParameter[1];
                parameters[0] = new ObjectParameter("InvoiceNumber", invoiceNumber);

                List<Models.EmailAddress> emailList = _db.ExecuteFunction<Models.EmailAddress>("uspGetEmailAddress", parameters).ToList<Models.EmailAddress>();
                if(!string.IsNullOrEmpty(emailList[0].Email.ToString()))
                    recipient = emailList[0].Email.ToString().Trim();
                else
                    recipient = " ";
                email.Recipients.Add(recipient);
            }
            #endregion

            //email subject                 
            email.Subject = "Invoice # " + invoiceNumber;

            #region set email Text
            {
                Models.EmailText emailText = _db.ExecuteFunction<Models.EmailText>("uspEmailText").SingleOrDefault();

                messageBody = emailText.EmailTextLine1.ToString().Trim() + "\n\n\n\n\n\n\n\n\n";
                messageBody += emailText.EmailTextLine2.ToString().Trim() + "\n";
                messageBody += emailText.EmailTextLine3.ToString().Trim();

                email.Body = messageBody;
            }
            #endregion

            #region email attachment
            {
                string fileName = invoiceNumber.Trim();
                string filePath = HostingEnvironment.MapPath("~/Content/reports/");
                filePath = filePath + fileName + ".pdf";
                fileName += ".pdf";
                int iPosition = (int)email.Body.Length + 1;
                int iAttachType = (int)Outlook.OlAttachmentType.olByValue;
                Outlook.Attachment oAttach = email.Attachments.Add(filePath, iAttachType, iPosition, fileName);
            }
            #endregion

            email.Display();
            //uncomment below line to SendAutomatedEmail emails atomaticallly
            //((Outlook.MailItem)email).Send(); 
        }
        catch (Exception e)
        {

        }

    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文