簡體   English   中英

如何使用asp.net c將使用jsPDF生成的PDF附加到郵件中

[英]How to attach a PDF generated using jsPDF to the mail using asp.net c#

我需要知道是否有任何方法可以附加使用jsPDF生成的PDF文件並將其郵寄到asp.net C#中?

我在c#中有以下代碼

MailMessage message = new MailMessage(fromAddress, toAddress);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = StrContent.ToString();
        //message.Attachments.Add(new Attachment("getDPF()"));
        smtp.Send(message);

我正在使用JsPDF庫,如下所示:

<script type="text/javascript" src="jsPdf/jspdf.min.js"></script>
<script type="text/javascript">
    function getPDF()
    {
        var doc = new jsPDF();
        doc.text(20, 20, 'TEST Message');
        doc.addPage();
        //doc.save('volt.pdf');
    }
</script>

在發送之前有沒有辦法在郵件中附加它? 提前致謝。

您無法從服務器代碼(c#)調用客戶端代碼(Javascript函數)。 您只能通過(HTTP / HTTPs)協議進行通信。

我認為您需要從客戶端生成PDF,然后將該PDF發送到服務器,以便您可以將PDF附加到電子郵件中。

在這種情況下,您需要首先生成PDF並將其作為base64字符串發送到服務器。

然后,您可以將base64字符串轉換為C#中的PDF並將其作為附件郵寄。

客戶端:

function generatePdf() {    
    var doc = new jsPdf();
    doc.text("jsPDF to Mail", 40, 30);    
    var binary = doc.output();
    return binary ? btoa(binary) : "";

}

base64 pdf內容發布到服務器:

  var reqData = generatePdf();
$.ajax({
                url:url,
                data: JSON.stringify({data:reqData}),
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                success:function(){}
       });

在服務器上(MVC控制器):

        public ActionResult YourMethod(string data)
        {
            //create pdf
            var pdfBinary = Convert.FromBase64String(data);
            var dir = Server.MapPath("~/DataDump");

            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);

            var fileName = dir + "\\PDFnMail-" + DateTime.Now.ToString("yyyyMMdd-HHMMss") + ".pdf";

            // write content to the pdf
            using (var fs = new FileStream(fileName, FileMode.Create))
            using (var writer = new BinaryWriter(fs))
            {
                writer.Write(pdfBinary, 0, pdfBinary.Length);
                writer.Close();
            }
            //Mail the pdf and delete it
            // .... call mail method here 
           return null; 
}

有關更多信息,請訪問此處https://github.com/Purush0th/PDFnMail

您的代碼示例使用pdf.text() ,但在大多數情況下,您希望導出帶有表格或圖像的html頁面。 最新版本jsPDF html PlugIn而不是addHtml() 下面是使用jsPDF html()和Web API的代碼示例。

客戶端:

function emailHtml() {
    let pdf = new jsPDF('p', 'pt', 'a3'); // a4: part of the page is cut off?
    pdf.html(document.body, {
        callback: function (pdf) {
            let obj = {};
            obj.pdfContent = pdf.output('datauristring');
            var jsonData = JSON.stringify(obj);
            $.ajax({
                url: '/api/jspdf/html2pdf',
                type: 'POST',
                contentType: 'application/json',
                data: jsonData
            });
        }
    });
}

請注意,從datauristring返回的pdf.html具有添加到字符串的filename=generated.pdf;filename=generated.pdf; 此外,SmtpClient已過時 ,請考慮使用MailKit

[Route("[action]")]
[HttpPost]
public void Html2Pdf([FromBody] JObject jObject)
{
    dynamic obj = jObject;
    try
    {
        string strJson = obj.pdfContent;
        var match = Regex.Match(strJson, @"data:application/pdf;filename=generated.pdf;base64,(?<data>.+)");
        var base64Data = match.Groups["data"].Value;
        var binData = Convert.FromBase64String(base64Data);

        using (var memoryStream = new MemoryStream())
        {
            var mail = new MailMessage
            {
                From = new MailAddress("[FromEmail]")
            };
            mail.To.Add("");
            mail.Subject = "";
            mail.Body = "attached";
            mail.IsBodyHtml = true;
            mail.Attachments.Add(new Attachment(new MemoryStream(binData), "htmlToPdf.pdf"));

            var SmtpServer = new SmtpClient("[smtp]")
            {
                Port = 25,
                Credentials = new NetworkCredential("[FromEmail]", "password"),
                EnableSsl = true
            };

            SmtpServer.Send(mail);
        }
    }
    catch (Exception ex)
    {
        throw;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM