将 jsPDF base64 字符串发送到 C# 控制器

问题描述 投票:0回答:1

大家好,我在尝试使用 javascript 发布通过 jsPDF 生成的 PDF 文件时遇到了很多麻烦。我使用 pdf.output('datauristring') 方法获取 PDF 文件的 base64,但我无法理解如何将其发送到控制器而不在控制台中出现“非法调用”错误。

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

控制器/服务器端代码:

public ActionResult SendEmailTest(string data)
    {
        //create pdf
        var pdfBinary = Convert.FromBase64String(data);
        
        return null;
    }

更新:

已尝试使用输出('blob')方法,我可以看到控制器方法被击中,但数据字符串为空。

function testPdfSend() {
        var doc = new jsPDF("l", "pt", "letter");
        var file = doc.output('blob');
        var fd = new FormData();     // To carry on your data  
        fd.append('data',file);

        $.ajax({
            url: "/Jobs/SendEmailTest",
            data: fd,
            dataType: 'text',
            processData: false,
            contentType: false,
            type: 'POST'
        });
    }

服务器方法不变

javascript c# .net pdf html2canvas
1个回答
1
投票

好吧,我已经找到了一个可行的解决方案(感谢 chiliNUT 的指导)。我已将其应用到我的预期用途 Invoice pdf Web 应用程序中,现在也按预期工作。具有更好编码知识的人可以让我知道这个解决方案是否有好处吗?我从未使用过“Request.Form”来访问表单数据,这是正确的用法吗?:

var file = doc.output('blob');
        var fd = new FormData();     // To carry on your data  
        fd.append('testString',file);

        $.ajax({
            url: "/Jobs/SendInvoiceEmail",
            data: fd,
            dataType: 'text',
            processData: false,
            contentType: false,
            type: 'POST'
        });

服务器端:

public ActionResult SendInvoiceEmail(byte[] testString)
    {
        //create pdf file
        var file = Request.Form.Files[0];
        string fileName = Path.GetFileName(test.FileName);
        var attachment = new Attachment(file.OpenReadStream(), "invoice.pdf");                 
             //From here the attachment when emailed shows as intended as a .pdf file                            
    }
© www.soinside.com 2019 - 2024. All rights reserved.