【发布时间】:2016-06-18 16:29:33
【问题描述】:
好的,我已经阅读了有关从 Web 服务下载 PDF 的所有 Stack Overflow 问题。到目前为止,他们都没有帮助过我。我把它作为最后的努力来尝试得到一些答案。基本上,我正在向 API 发出 GET 请求,并且需要取回动态生成的 PDF。我们已经尝试通过接收byte[] 来执行此操作,现在我们正在返回包含内容的流。以下是我们在 Web 服务控制器中的内容:
var result = await resp.Content.ReadAsAsync<byte[]>();
var response = request.CreateResponse(HttpStatusCode.OK);
var dataStream = new MemoryStream(result);
response.Content = new StreamContent(dataStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "idcard.pdf";
var fileStream = new FileStream(@"c:\temp\temp.pdf", FileMode.Create);
fileStream.Write(result, 0, result.Length);
fileStream.Close();
return response;
FileStream 部分是我们正在进行的一项测试,以查看将数据保存到临时文件是否有效以及是否可以保存 PDF。那部分确实有效。转到 c:\temp 并打开 idcard.pdf 文件效果很好。这样做的问题之一是它静默进行,用户不会知道它的存在。我们可以告诉他们,但我们真的更希望 PDF 在默认情况下在浏览器中打开和/或通过浏览器保存,以便他们知道发生了什么事。
我的 Angular 代码如下所示:
.factory('memberIdCard', ['$http', function($http) {
var get = function() {
return $http({
method: 'GET',
url: '/Member/IdCard',
headers: {
accept: 'application/octet-stream'
},
responseType: 'arraybuffer',
transformResponse: function(data) {
var pdf;
console.log('data: ', data);
if (data) {
pdf = new Blob([data], {
type: 'application/pdf'
});
console.log('pdf: ', pdf);
}
return pdf;
}
})
}
return {
get: get
}
}]);
我已经用$http 和$resource 尝试过这部分,但都不起作用。现在,在我的控制器中:
$scope.printIdCard = function() {
memberIdCard.get().then(function(data) {
var pdf = data.data;
FileSaver.saveAs(pdf, 'idcard.pdf');
var pdfUrl = window.URL.createObjectURL(pdf);
$scope.pdfView = $sce.trustAsResourceUrl(pdfUrl);
window.open($scope.pdfView);
});
请注意,FileSaver 来自 angular-file-saver。
之后,新窗口打开,但出现错误提示:无法加载 PDF 文档,如果您尝试在 Adobe Acrobat 中打开它,则会出现错误提示:Adobe Acrobat Reader DC 无法打开' idcard.pdf',因为它不是受支持的文件类型或文件已损坏(例如,它是作为电子邮件附件发送的并且未正确解码)。
任何帮助将不胜感激。我觉得我已经完成了许多其他 SO 问题中建议的所有内容,但也许我错过了一些我无法看到的东西。
谢谢!
【问题讨论】:
标签: javascript c# .net angularjs pdf