【发布时间】:2018-06-02 06:48:30
【问题描述】:
我有一个将 JSReport 作为编码字节数组返回的 web api。无论我如何尝试读取字节数组,我都会收到黑屏或显示“无法下载 pdf”的错误消息。如果我创建一个隐藏的锚标签并下载 pdf 它工作正常。但是,我不希望用户下载它,我希望他们可以直接从浏览器中查看它。
WEB API 调用
var data = LossReportService.GetLossSummary(request);
var pdf_bytes = LossReportService.GeneratePDFUsingJSReport(data);
byte[] myBinary = new byte[pdf_bytes.Length];
pdf_bytes.Read(myBinary, 0, (int)pdf_bytes.Length);
string base64EncodedPDF = System.Convert.ToBase64String(myBinary);
var response = Request.CreateResponse(HttpStatusCode.OK, base64EncodedPDF);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
response.Content.Headers.ContentLength = pdf_bytes.Length;
return response;
Javascript
$.ajax({
type: "POST",
url: "/Reporting/GetLossSummary",
data: { dataObj },
},
success: function (data) {
if (data != null) {
//I have tried this
var file = new Blob([data], { type: 'application/pdf;base64' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL, "LossSummaryReport");
//which gives me a "failed to load pdf document" error
//and I have tried this, which just renders a blank page
window.open("data:application/pdf," + encodeURI(data));
}
}
});
任何建议将不胜感激。
【问题讨论】:
-
您尚未将文档/内容添加到响应中
-
您还混淆了 mime-type/data-uri 格式。如果返回的数据是 ArrayBuffer,则将 blob 的 mime-type 设置为仅键入:'application/pdf'。如果您选择 data-uri 方法,还要指定 base64(虽然它是默认的): window.open("data:application/pdf;base64," + ...
-
@daddygames - 你是什么意思我没有将文档/内容添加到响应中? API 中的内容位于“base64EncodedPDF”中,并被添加到 api 中的响应对象中。
-
@K3N - 即使我换了你上面提到的任何情况都不起作用。
-
对不起,我忽略了代码。您检查过 Javascript 成功函数中的数据变量吗?该变量是否作为 PDF 文件的 base64 表示形式返回?或者它至少看起来像一个 base64 字符串值?
标签: javascript ajax pdf blob