当前位置: 首页 > 知识库问答 >
问题:

如何在AngularJS应用程序中显示blob(.pdf)

潘坚白
2023-03-14

我一直试图显示pdf文件,我从一个$http.post响应中得到一个blob。pdf必须使用在应用程序中显示

我遇到了几个堆栈帖子,但不知何故,我的例子似乎不起作用。

JS:

根据这位医生的说法,我继续努力...

$http.post('/postUrlHere',{myParams}).success(function (response) {
 var file = new Blob([response], {type: 'application/pdf'});
 var fileURL = URL.createObjectURL(file);
 $scope.content = fileURL;
});

现在据我所知,fileURL创建了一个临时URL,博客可以将其用作参考。

HTML:

<embed src="{{content}}" width="200" height="200"></embed>

我不知道如何处理这个问题,理想的情况是(1)将其分配给一个作用域,(2)“准备/重建”blob到一个pdf(3)使用

我已经研究了一天多了,但不知何故,我似乎不明白这是如何在角度。。。让我们假设pdf查看器库没有选项。


共有3个答案

孟振
2023-03-14

michael的建议对我很有吸引力:)如果你替换$http。用$http发布。得到,记住,那是。get方法接受2个参数而不是3个。。。这就是浪费我时间的地方…;)

控制器:

$http.get('/getdoc/' + $stateParams.id,     
{responseType:'arraybuffer'})
  .success(function (response) {
     var file = new Blob([(response)], {type: 'application/pdf'});
     var fileURL = URL.createObjectURL(file);
     $scope.content = $sce.trustAsResourceUrl(fileURL);
});

视图:

<object ng-show="content" data="{{content}}" type="application/pdf" style="width: 100%; height: 400px;"></object>
秦博达
2023-03-14

我使用AngularJSV1。3.4

HTML:

<button ng-click="downloadPdf()" class="btn btn-primary">download PDF</button>

JS控制器:

'use strict';
angular.module('xxxxxxxxApp')
    .controller('xxxxController', function ($scope, xxxxServicePDF) {
        $scope.downloadPdf = function () {
            var fileName = "test.pdf";
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            xxxxServicePDF.downloadPdf().then(function (result) {
                var file = new Blob([result.data], {type: 'application/pdf'});
                var fileURL = window.URL.createObjectURL(file);
                a.href = fileURL;
                a.download = fileName;
                a.click();
            });
        };
});

JS服务:

angular.module('xxxxxxxxApp')
    .factory('xxxxServicePDF', function ($http) {
        return {
            downloadPdf: function () {
            return $http.get('api/downloadPDF', { responseType: 'arraybuffer' }).then(function (response) {
                return response;
            });
        }
    };
});

Java REST Web服务-Spring MVC:

@RequestMapping(value = "/downloadPDF", method = RequestMethod.GET, produces = "application/pdf")
    public ResponseEntity<byte[]> getPDF() {
        FileInputStream fileStream;
        try {
            fileStream = new FileInputStream(new File("C:\\xxxxx\\xxxxxx\\test.pdf"));
            byte[] contents = IOUtils.toByteArray(fileStream);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.parseMediaType("application/pdf"));
            String filename = "test.pdf";
            headers.setContentDispositionFormData(filename, filename);
            ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(contents, headers, HttpStatus.OK);
            return response;
        } catch (FileNotFoundException e) {
           System.err.println(e);
        } catch (IOException e) {
            System.err.println(e);
        }
        return null;
    }
方轩昂
2023-03-14

首先,您需要将响应类型设置为arrayBuffer。如果要创建数据Blob,则需要这样做。见Sending_and_Receiving_Binary_Data。所以你的代码会像这样:

$http.post('/postUrlHere',{myParams}, {responseType:'arraybuffer'})
  .success(function (response) {
       var file = new Blob([response], {type: 'application/pdf'});
       var fileURL = URL.createObjectURL(file);
});

下一部分是,您需要使用$sce服务使角信任成为您的url。可以这样做:

$scope.content = $sce.trustAsResourceUrl(fileURL);

不要忘记注入$sce服务。

如果这一切都完成了,你现在可以嵌入你的pdf:

<embed ng-src="{{content}}" style="width:200px;height:200px;"></embed>
 类似资料:
  • 问题内容: 我一直在尝试显示我从响应中获取的pdf文件。pdf必须使用例如在应用程序内显示。 我遇到了几个堆栈帖子,但是以某种方式我的示例似乎不起作用。 JS: 根据这份文件,我继续尝试… 现在,据我所知,将创建一个临时URL,该博客可以用作参考。 HTML: 我不确定如何在Angular中处理此问题,理想情况是 (1) 将其分配给作用域, (2) 将blob“准备/重建”到pdf (3) 使用,

  • 问题内容: 我的Angular 1.5应用程序通过REST连接到Java / Tomcat / Spring后端服务器。 一种REST服务会生成PDF并将其发送给客户端。它在DEsktop浏览器(至少是FF,Chrome)上运行良好,但是 无论我使用的浏览器是什么(Chrome,Safari ), 我都无法在iOS(例如ipad)上看到PDF内容。 这是角度代码: Spring / Jax-RS代

  • 问题内容: 我想以特定尺寸在Android应用程序中显示图片。我该怎么做?请指导我?还有一件事,我想从SD卡中获得该图像。所以请帮帮我。 提前致谢。 问题答案: 首先,您需要创建一个imageview。 创建布局参数以在布局上添加imageview 然后获取您的图像路径 在ImageView上设置图像 获取您要添加的布局 将视图添加到布局

  • 我正在构建一个使用jBoss jBPM作为工作流引擎的Web应用程序。 在管理部分,我建立了上传的功能。bpmn工作流文件导入系统。此时,系统将对其进行处理,并向用户显示工作流的不同工作项、参数和顺序流。 我想在此屏幕上显示进程本身的图像。是否有方法使用的BPMNDiagram属性。要生成此映像的bpmn文件?

  • 问题内容: 我一直在从事一个更像框架的项目,并且可以安装几个应用程序/模块。像基本的应用商店或google.play商店一样看到它。这是一个Intranet应用程序,所有模块都可以添加到您的用户帐户中。 该框架已经在开发中,但是我现在正在围绕应用程序/模块的想法。(链接到开发中的概念证明,可以在这里找到) 一个应用程序应该是独立的,并且不能突然包含框架中的脚本,这可以通过在单独的模块中进行结构化来

  • 我想在我的android react本机应用程序的图像标签中通过URL显示一个简单的gif,但当我启动它时,不会显示任何图像。文档中提供的代码仅适用于iOS,不适用于android: 这里有一个类似的问题,但正如前面所说,这只适用于iOS:如何在React Native中显示动画gif 关于此提交,它应该可以工作:https://github.com/facebook/react-native/c