如何在AngularJS中处理来自Web API的PDF文件?

前端之家收集整理的这篇文章主要介绍了如何在AngularJS中处理来自Web API的PDF文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个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中无法正常工作.什么都没发生.见JSFiddle.

有没有其他方法可以在我的iPad上显示PDF而无需将文件嵌入我的网站?

您可能很清楚,ios设备不允许您将文件下载并存储到内存/磁盘,就像在台式机/笔记本电脑上一样.

下载的项目必须由应用程序打开

由于您已经在网站上工作,浏览器似乎是一个自然的候选人.

我猜测你不希望将pdf文件嵌入你的网站,另一种方法是在新的浏览器选项卡中打开pdf.

如果您可以接受这样的解决方案,请查看此SO帖子:

window.open() in an iPad

提供的解决方案确实有效,但只有在配置Safari时才能阻止弹出窗口.

我担心这可能是你唯一可行的选择. Having the iPad store the pdf into apps like iBooks will not work,根据这篇文章.它不能用javaScript自动化.

据我所知,在这种情况下没有完美的解决方案,只是一个最可接受的解决方案:如果检测到ios,则在浏览器的新选项卡中打开pdf.

如果您对此妥协感兴趣,并遇到使用window.open()实现它的问题,我将很乐意提供帮助.

猜你在找的Angularjs相关文章