AngularJS Afficher le PDF (byte[]) reçu de Printemps @RestController
Mon mon exigence est afficher(nouvel onglet)/télécharger/embed un PDF dans mon angular js application sur le formulaire de soumission/post.
Je ne veux pas que le serveur renvoie un identificateur unique de l'PDF généré et que l'utilisation de $service de fenêtre pour ouvrir une nouvelle fenêtre avec l'url pointant vers un serveur-côté d'extrémité qui renvoie PDf basés sur l'identificateur unique. Parce que j'ai besoin pour générer le fichier pdf à la volée (pas de stockage dans le système de fichiers).
Question similaire à celui AngularJS: Affichage de la goutte (.pdf) dans angulaire app Mais il ne fonctionne pas pour moi.
Mon contrôleur
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);
});
}
} ]);
Mon Service
angular.module('EvaluationResultsModule').factory('EvaluationResultsService', function($resource) {
return $resource('./api/ca/evaluationResults/:dest', {}, {
getEvalutaionResultPDF : {
method : 'GET',
params : {
dest : "getPDF"
},
responseType : 'arraybuffer',
}
});
});
Reste La Méthode Du Contrôleur
@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();
}
Ma réponse connecté à la console
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
OriginalL'auteur Mukun | 2014-10-27
Vous devez vous connecter pour publier un commentaire.
- Je utiliser ce code et ça fonctionne pour moi:
RESTE Contrôleur:
JS/Angular Contrôleur;
Fragment HTML:
Merci pour votre solution, il a aussi travaillé pour moi. +1
Merci beaucoup ... Il a travaillé pour moi avec peu de changements... +1.
vous pouvez l'obtenir à partir de la réponse
var contentDisposition = response.headers("Content-Disposition");
var filename = (contentDisposition.split(';')[1].trim().split('=')[1]).replace(/"/g, '');
merci, j'ai trouvé aussi une autre façon. À l'aide de
angular-file-saver
que je peux faire maintenantFileSaver.saveAs(file, 'my_file_name.pdf');
OriginalL'auteur Iwo Kucharski
Beck-fin contrôleur
JS Service
JS contrôleur
OriginalL'auteur Riddhi Gohil
Dans le lien suivant, vous devez trouver la réponse :
AngularJS Afficher le PDF (byte[]) reçu de Printemps(@RestController) + jasper report
Dans ce lien vous trouverez comment afficher le pdf dans un iframe en utilisant angularjs.
Le pdf est reçu à partir d'une API rest en utilisant le printemps et jasper rapport.
Ok, merci pour vos conseils.
OriginalL'auteur Angeldev