在我看来,我正试图得到一个div的pdf。
我正在执行以下操作:获取元素,uri对其html进行编码,然后通过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");
});
}方法:
[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作为参数发送到该方法,但这个参数太长。
HTTP Error 404.15 - Not Found The request filtering module is configured to deny a request where the query string is too long.这样做的好方法是什么。
发布于 2015-04-06 15:13:44
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);}
然后在下列情况下:
$.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的反应。
https://stackoverflow.com/questions/29414927
复制相似问题