从Spring-Boot应用程序在Sencha ExtJs中打印远程pdf不起作用

时间:2017-02-17 08:30:14

标签: spring pdf extjs

我有一个ExtJS应用程序,它使用REST服务显示来自Spring启动应用程序的PDF。到目前为止,这工作正常,但当我更新了弹簧启动版本1.3 - > 1.4,代码不能很好地工作,并向我显示一个空白的PDF作为响应。

这是我的代码:

ExtJS - Sencha

Ext.Ajax.request({
    url: MyApp.Application.Globals.baseUrl + url,
    params: params,
    method: 'POST',
    async: false,
    headers:{
        'Authorization': Utils.getAuthorization()
    },
    scope : this,
    // ON SUCCESS
    success: function(response) {
        window.open('data:application/pdf,' + escape(response.responseText));
    },
    // ON FAILURE
    failure: function(err) {
        console.log(err);
    }
});

服务器代码(Spring-Boot)

String report = reportService.executeReport(....);

response.setContentType("application/pdf");

try {
    response.getWriter().write(report);
} catch (IOException e) {
    ELogger.error(this, CoreConstants.LOGGER_CATEGORY, "error creating pdf", e);
}

POM

<spring-boot.version>1.4.4.RELEASE</spring-boot.version> with 1.3.3 it works fine

如果有人能帮助我,我将不胜感激。

问候!

1 个答案:

答案 0 :(得分:0)

我找到了使用ResponseEntity作为响应的解决方法:

@RequestMapping(value = "/example", produces = "application/pdf")
public ResponseEntity<InputStreamResource> exampleMethod(){

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.parseMediaType("application/pdf"));
    headers.add("Access-Control-Allow-Origin", "*");
    headers.add("Access-Control-Allow-Methods", "GET, POST, PUT");
    headers.add("Access-Control-Allow-Headers", "Content-Type");
    headers.add("Content-Disposition", "filename=sysparamspdf");
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
    headers.add("Pragma", "no-cache");
    headers.add("Expires", "0");

    headers.setContentLength(report.getBytes(StandardCharsets.UTF_8).length);
    ResponseEntity<InputStreamResource> response = new ResponseEntity<InputStreamResource>(
            new InputStreamResource(stream), headers, HttpStatus.OK);
    return response;

}