Javascript 如何使用asp.net c将使用jsPDF生成的PDF附加到邮件#

Javascript 如何使用asp.net c将使用jsPDF生成的PDF附加到邮件#,javascript,c#,asp.net,jspdf,Javascript,C#,Asp.net,Jspdf,我需要知道是否有任何方法可以附加使用jsPDF生成的PDF文件,并将其发送到asp.net C# 我在c#中有以下代码 我使用的JsPDF库如下所示: <script type="text/javascript" src="jsPdf/jspdf.min.js"></script> <script type="text/javascript"> function getPDF() { var doc = new jsPDF();

我需要知道是否有任何方法可以附加使用jsPDF生成的PDF文件,并将其发送到asp.net C#

我在c#中有以下代码

我使用的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>

函数getPDF()
{
var doc=new jsPDF();
文档文本(20,20,‘测试消息’);
doc.addPage();
//doc.save('volt.pdf');
}
在寄出之前有没有办法在邮件中附上它?
提前谢谢

不能从服务器代码(c#)调用客户端代码(Javascript函数)。 您只能通过(HTTP/HTTPs)协议进行通信

我认为您需要从客户端生成PDF,然后将该PDF发送到服务器,以便将PDF附加到电子邮件中

在这种情况下,您需要首先生成PDF并将其作为base64字符串发送到服务器

然后,您可以将base64字符串转换为C#中的PDF,并将其作为附件发送

客户端:

将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控制器)上:


查看此处了解更多信息

您的代码示例使用
pdf.text()
,但在大多数情况下,您希望导出带有表格或图像的html页面。最新版本的jsPDF html插件,而不是。下面是一个使用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
            });
        }
    });
}
请注意,从
pdf.html
返回的
datauristring
在字符串中添加了一个文件名,
filename=generated.pdf。另外,SmtpClient是考虑使用的。

[路由(“[操作]”)]
[HttpPost]
public void Html2Pdf([FromBody]JObject-JObject)
{
动态对象=作业对象;
尝试
{
字符串strJson=obj.pdfContent;
var match=Regex.match(strJson,@“data:application/pdf;filename=generated.pdf;base64,(?。+)”;
var base64Data=match.Groups[“data”].Value;
var binData=Convert.FromBase64String(base64Data);
使用(var memoryStream=new memoryStream())
{
var mail=新邮件消息
{
From=新邮件地址(“[FromEmail]”)
};
mail.To.Add(“”);
mail.Subject=“”;
mail.Body=“附件”;
mail.IsBodyHtml=true;
mail.Attachments.Add(新附件(新MemoryStream(binData),“htmlToPdf.pdf”);
var SmtpServer=新的SmtpClient(“[smtp]”)
{
端口=25,
凭据=新的网络凭据(“[FromEmail]”,“密码”),
EnableSsl=true
};
发送(邮件);
}
}
捕获(例外情况除外)
{
投掷;
}
}

好吧,客户端上运行JsPDF,服务器上运行电子邮件代码。因此,您必须获取JsPDF生成的PDF并将其传递给服务器。您知道如何将其传递给服务器吗?所有常用的方法……提交表单……通过AJAX……通过WebSocket……等等。或者你可以放弃在客户端生成PDF的想法,改为在服务器上生成。有没有办法通过服务器端生成?你有任何参考资料吗?我们已经在你的。不允许要求我们推荐工具或库。您的服务器端逻辑是C#,所以您是否尝试过在web上搜索“C#创建PDF”?
  var reqData = generatePdf();
$.ajax({
                url:url,
                data: JSON.stringify({data:reqData}),
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                success:function(){}
       });
        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; 
}
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
            });
        }
    });
}
[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;
    }
}