首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取当前页面MVC 5的pdf

获取当前页面MVC 5的pdf
EN

Stack Overflow用户
提问于 2015-04-02 14:05:02
回答 1查看 586关注 0票数 1

在我看来,我正试图得到一个div的pdf。

我正在执行以下操作:获取元素,uri对其html进行编码,然后通过ajax将其传递给方法:

AJAX:

代码语言:javascript
复制
function getPDF(html) {
    $.ajax({
        type: "POST",
        url: "@Url.Action("printPage")",
        data: { html: encodeURIComponent(html) }

    }).done(function (result) {
        window.open("data:application/pdf; " + result);
        $("#printArea").html(result);
    }).fail(function (data) {
        alert("Failed");
    });
}

方法:

代码语言:javascript
复制
[HttpPost]
public void printPage(string html)
{
    String decoded = System.Uri.UnescapeDataString(html);
    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = "something.pdf",
        Inline = false
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    var mem = Bcs.Common.Utilities.HTMLtoPDF.getPDF(decoded);
    //var base64EncodedPDF = System.Convert.ToBase64String(pdfByteArray);
    Response.BinaryWrite(mem.ToArray());
    //return File(mem, System.Net.Mime.MediaTypeNames.Application.Octet);
}

最后,我得到一个弹出打开一个pdf,但它不会打开,根据acrobat,它是腐败的。

我尝试将html作为参数发送到该方法,但这个参数太长。

代码语言:javascript
复制
HTTP Error 404.15 - Not Found The request filtering module is configured to deny a request where the query string is too long.

这样做的好方法是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-06 15:13:44

代码语言:javascript
复制
public JsonResult printPage(String html)
        {
            String decoded = System.Uri.UnescapeDataString(html);
            var cd = new System.Net.Mime.ContentDisposition
            {
                FileName = "something.pdf",
                Inline = false
            };
            var mem = Bcs.Common.Utilities.HTMLtoPDF.getPDF(decoded);
            mem.Flush();
            mem.Position = 0;
            String b64Converted = Convert.ToBase64String(mem.ToArray());
            return Json(b64Converted, JsonRequestBehavior.AllowGet );

System.Net.Mime.MediaTypeNames.Application.Octet);}

然后在下列情况下:

代码语言:javascript
复制
 $.ajax({
            type: "POST",
            url: "@Url.Action("printPage")",
            data: { html: encodeURIComponent(html) },

        }).done(function (result) {

            $("#printArea").append('<a href="data:application/pdf;base64,' + result + '">PDF</a>');
        }).fail(function (data) {
            alert("Failed");
        });

显然,这是非常容易的,只要base64的pdf和发送到json的反应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29414927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档