大佬教程收集整理的这篇文章主要介绍了AngularJS显示从Spring @RestController接收的PDF(byte []),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我不希望服务器返回生成的PDF的唯一标识符,而是使用$window服务打开一个新窗口,其中url指向服务器端端点,该端点根据唯一标识符返回PDf.因为我需要动态生成pdf(不存储在文件系统中).
与此相似的问题AngularJS: Display blob (.pdf) in an angular app但它对我不起作用.
我的控制器
angular.module('EvaluationResultsModule').controller('CA_EvaluationResultsCtrl',[ '$scope','EvaluationResultsservice','$sce',function($scope,EvaluationResultsservice,$scE) { $scope.showPDF = function() { $scope.result = CA_EvaluationResultsservice.getEvalutaionResultPDF($scope.evaluationResults); $scope.result.$promise.then(function(data) { var file = new Blob([data],{ type : 'application/pdf' }); var fileURL = URl.createObjectURL(filE); $scope.pdfContent = $sce.trustAsresourceUrl(fileURL); }); } } ]);
我的服务
angular.module('EvaluationResultsModule').factory('EvaluationResultsservice',function($resourcE) { return $resource('./api/ca/evaluationResults/:dest',{},{ getEvalutaionResultPDF : { method : 'GET',params : { dest : "getPDF" },responseType : 'arraybuffer',} }); });
休息控制器方法
@requestMapping(value = "/getPDF",method = requestMethod.GET) public byte[] getEvalutaionResultPDF() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // Generate PDF using Jasper Map<String,Object> model = new HashMap<String,Object>(); List<User> usersList = null; //populated from service layer; JRBeanCollectionDatasource beanColDatasource = new JRBeanCollectionDatasource(usersList); JasperPrint jasperPrint = jasperPrint = JasperFillManager.fillReport(this.getClass().getClassLoader().getresourceAsStream("A4.jasper"),model,beanColDatasourcE); JasperExportManager.exportReportToPdfStream(jasperPrint,baos); return baos.toByteArray(); }
我的回复记录在控制台中
response: Object {data: ArrayBuffer,status: 200,headers: function,config: Object,statusText: "OK"}config: Objectdata: ArrayBufferbyteLength: (...)__proto__: ArrayBufferbyteLength: [Exception: TypeError: Method ArrayBuffer.prototype.byteLength called on incompatible receiver #<ArrayBuffer>]get byteLength: function byteLength() { [native code] }constructor: function ArrayBuffer() { [native code] }slice: function slice() { [native code] }__proto__: Objectheaders: function (Name) {resource: resourcestatus: 200statusText: "OK"__proto__: Object
REST控制器:
@requestMapping(value = "/api/reports/pdf",method = requestMethod.GET) @Timed public @ResponseBody byte[] getOpenedEventsInPdf(httpServletResponse responsE) { response.setHeader("Content-Disposition","inline; filename=file.pdf"); response.setContentType("application/pdf"); // get file in bytearray from my custom service in BACkend byte[] file = jasperReportsservice.getOpenedEventsReport(ReportFormat.PDF); return file; }
JS /角度控制器;
$scope.getPdf = function(){ $http.get('/api/reports/pdf',{responseType: 'arraybuffer'}) .success(function (data) { var file = new Blob([data],{type: 'application/pdf'}); var fileURL = URl.createObjectURL(filE); window.open(fileURL); }); }
HTML片段:
<a ng-click="getPdf()">Show PDF</a>
以上是大佬教程为你收集整理的AngularJS显示从Spring @RestController接收的PDF(byte [])全部内容,希望文章能够帮你解决AngularJS显示从Spring @RestController接收的PDF(byte [])所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。