Rest API 生成 PDF byte[] JSON 内容类型,使用 angularJS 在 Web 中查看

Posted

技术标签:

【中文标题】Rest API 生成 PDF byte[] JSON 内容类型,使用 angularJS 在 Web 中查看【英文标题】:Rest API generated PDF byte[] JSON content-type to be viewed in Web using angularJS 【发布时间】:2016-12-31 15:23:27 【问题描述】:

我正在返回一个字节 [] 的 PDF 内容作为来自 REST API 的 JSON 响应,并尝试在 Angular JS 中呈现数据。

这是我的 JS 代码 sn-p :

if(data.appStatusCode===0)                            
    var jsonObj = JSON.parse(data.payload);
    var reportData = jsonObj.data;                              
    var file = new Blob([reportData], type: 'application/pdf');
    var fileURL = URL.createObjectURL(file);
    window.open(fileURL);
 

以及返回 byte[] 作为有效负载的控制器

@RequestMapping(value = "/janitramwebreport/janitramid",
            method = RequestMethod.GET, 
            produces = Constants.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseVO> getReportWebPdf(HttpEntity<?> httpEntity) 

    *//returns byte[] as the payload*

当我尝试在新窗口中生成 PDF 时,我收到 PDF 文件错误消息。

【问题讨论】:

我更改了 API 以生成 application/pdf 并在 Angular 端接受为 ArrayBuffer 并且它有效! 【参考方案1】:

你看过了吗:

AngularJS: Display blob (.pdf) in an angular app

AngularJS Display PDF (byte[]) received from Spring @RestController

我想这个问题已经回答了。

【讨论】:

我已经尝试了所有这些方法,但这些方法都不适合我。我将 PDF 的字节 [] 添加到 BO 对象,并在更改为 JSON 后将对象发送到 Web。如您所见,我的 API 的响应是“application/json”【参考方案2】:

在下面的链接中,你应该可以找到答案:

AngularJS Display PDF (byte[]) received from Spring(@RestController) + jasper report

在此链接中,您可以了解如何使用 angularjs 在 iframe 中显示 pdf。 pdf 是使用 spring 和 jasper 报告从 API REST 接收的。

【讨论】:

以上是关于Rest API 生成 PDF byte[] JSON 内容类型,使用 angularJS 在 Web 中查看的主要内容,如果未能解决你的问题,请参考以下文章

如何记录生成文件 (pdf) 以在 Swagger 上下载的 API?

JS 框架能够基于(django)rest api 选项生成表单

是否可以使用 Resteasy 发布 byte[] 来调用 rest api?

Nodejs:如何从 REST API 下载 pdf 文件?

使用PHP REST API合并多个PDF

Spring REST - 正在下载损坏/空白文件