weixin_33722405 2015-04-02 14:05 采纳率: 0%
浏览 25

获取当前页面的pdf MVC 5

I am trying to get a pdf of a div in my view.

I am doing the following: I get the element, uri encode its html, then pass it to a method via ajax:

AJAX:

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");
    });
}

Method:

[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);
}

In the end I get a popup to open a pdf but it won't open, according to adobe acrobat it is corrupt.

I tried sending the html as a perameter to the method, but the perameter is too long

HTTP Error 404.15 - Not Found The request filtering module is configured to deny a request where the query string is too long.

What would be a good way of doing this.

  • 写回答

1条回答 默认 最新

  • weixin_33736048 2015-04-06 15:13
    关注
    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); }

    Then in the view:

     $.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");
            });
    

    Apparently its very easy Just base64 the pdf and send it over at the json response.

    评论

报告相同问题?

悬赏问题

  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码