open new mssaveoropenblob from data application javascript angularjs pdf

javascript - new - Blob PDF: la ventana emergente no muestra contenido



window.download javascript (3)

He estado trabajando en este problema durante los últimos días. Sin suerte al tratar de mostrar la transmisión en la etiqueta <embed src> , intenté mostrarla en una nueva ventana.

La nueva ventana solo muestra controles de PDF )

¿Alguna idea de por qué no se muestra el contenido del pdf?

CÓDIGO:

$http.post(''/fetchBlobURL'',{myParams}).success(function (data) { var file = new Blob([data], {type: ''application/pdf''}); var fileURL = URL.createObjectURL(file); window.open(fileURL); });


Si configura { responseType: ''blob'' } , no necesita crear Blob por su cuenta. Simplemente puede crear url basado en contenido de respuesta:

$http({ url: "...", method: "POST", responseType: "blob" }).then(function(response) { var fileURL = URL.createObjectURL(response.data); window.open(fileURL); });


Yo uso AngularJS v1.3.4

HTML:

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

Controlador JS:

''use strict''; angular.module(''xxxxxxxxApp'') .controller(''MathController'', function ($scope, MathServicePDF) { $scope.downloadPdf = function () { var fileName = "test.pdf"; var a = document.createElement("a"); document.body.appendChild(a); MathServicePDF.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(); }); }; });

Servicios de JS:

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

Servicios web de Java REST - 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; }


arraybuffer configurar responseType a arraybuffer si desea crear un blob partir de sus datos de respuesta:

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

más información: Sending_and_Receiving_Binary_Data