我有这个Web API post方法来生成PDF:
[HttpPost] [Route("api/pdf")] public HttpResponseMessage Post(CustomType type) { StreamContent pdfContent = PdfGenerator.GeneratePdf(); HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = pdfContent; response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); response.Content.Headers.ContentDisposition.FileName = "PDFName.pdf" return response; }
在AngularJS中我想得到这样的PDF文件:
$http.post("api/pdf",object).then(function (results) { var data = results.data; //TODO: got PDF,how to handle? },function (results) { console.log(results); });
但是我应该如何处理AngularJS中的PDF数据?在iPad上,我希望PDF能够打开,但如果文件被下载或只是在桌面上打开并不重要.
EDIT1:
使用SaveAS JS library我可以在桌面上制作出可行的解决方案:
$http.post("api/pdf",object).then(function (results) { var data = results.data; var file = new Blob([data],{ type: 'application/pdf' }); saveAs(file,"test.pdf"); },function (results) { console.log(results); });
您可能很清楚,ios设备不允许您将文件下载并存储到内存/磁盘,就像在台式机/笔记本电脑上一样.
下载的项目必须由应用程序打开
由于您已经在网站上工作,浏览器似乎是一个自然的候选人.
我猜测你不希望将pdf文件嵌入你的网站,另一种方法是在新的浏览器选项卡中打开pdf.
如果您可以接受这样的解决方案,请查看此SO帖子:
提供的解决方案确实有效,但只有在配置Safari时才能阻止弹出窗口.
我担心这可能是你唯一可行的选择. Having the iPad store the pdf into apps like iBooks will not work,根据这篇文章.它不能用javaScript自动化.
据我所知,在这种情况下没有完美的解决方案,只是一个最可接受的解决方案:如果检测到ios,则在浏览器的新选项卡中打开pdf.
如果您对此妥协感兴趣,并遇到使用window.open()实现它的问题,我将很乐意提供帮助.