编程新手。我正在尝试从MVC打印PDF,如果我使用Action Link,它运行良好,这是我的代码:
<%= Html.ActionLink("Print","GeneratePdf","Home", new { fc="Test" },null) %>
public ActionResult GeneratePdf(string fc)
{
Document document = new Document();
MemoryStream workStream = new MemoryStream();
PdfWriter.GetInstance(document, workStream);
document.Open();
document.Add(new iTextSharp.text.Paragraph("\n\n"));
// need to add the user name
iTextSharp.text.Paragraph p = new iTextSharp.text.Paragraph("Name: " + fc);
p.Alignment = 1;
document.Add(p);
document.Close();
byte[] byteInfo = workStream.ToArray();
SendPdfToBrowser(byteInfo);
return null;
}
public void SendPdfToBrowser(byte[] buf)
{
string filename = "Certificate.pdf";
// Prepare the headers.
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
// Write the PDF data.
Response.BinaryWrite(buf);
// Flush the buffer to the browser.
Response.End();
Response.Flush();
Response.Clear();
}
我需要使用Json,这是代码:
function PrintChart(fc) {
var fc = "Test";
var url = '<%= Url.Content("~/Home/GeneratePdf") %>';
$.post(url, { fc: fc },
function (content) {
if (content != null) { 5 }
}, "json");
<input type="button" onclick="PrintChart();" value="Print" />
我没有收到任何错误,但它不会生成PDF文件。提前谢谢。
答案 0 :(得分:0)
您无法使用Ajax下载文件。 jQuery $ .post()期望来自服务器的响应是文本。 要以Ajax方式下载文件,一般方法是使用隐藏的iframe并将iframe的src设置为文件的URL
<iframe id="hiddenFrame" src="" style="display:none; visibility:hidden;"></iframe>
在PrintChart()中创建包含数据作为查询字符串的URL并设置iframe的src:
function PrintChart(fc) {
var fc = "Test";
var url = '<%= Url.Content("~/Home/GeneratePdf") %>';
url += "?fc="+fc;
$('#hiddenFrame').attr('src', url);
}