2014-11-18 15 views
5

Dopo aver provato un sacco di approcci diversi, non ha funzionato per me.Angularjs PDF generato dal server con contenuto post lungo

La domanda più simile è questo uno How to read pdf stream in angularjs

Ho un app AngularJS che invia una richiesta al mio PHP-file per generare un file PDF. mio controller ha la seguente funzione che io chiamo da un pulsante tramite ng clic:

$scope.print = function() { 
    $http({ 
     method : "post", 
     url : '/pdf/print_processor.php', 
     data : printdata, 
     //responseType : 'arraybuffer', 
     headers : { 
      'Content-type' : 'application/json' 
     } 
    }).success(function(response, status, headers) {       
    var file = new Blob([response], {type: 'application/pdf'}); 
     var fileURL = URL.createObjectURL(file); 
     window.open(fileURL); 
    }); 
} 

Il motivo principale è che devo spedire alcuni più dati per il file PHP. La variabile printdata contiene un oggetto JSON nidificato con più di 12 KB. Quindi non ho potuto utilizzare un normale GET o passare questi dati tramite un link normale come parte dell'URL.

La richiesta funziona, perché posso chiamare direttamente print_processor.php (che mi fornisce il PDF) e utilizzo lo stesso approccio per la creazione di e-mail di invio. Come per la questione di cui sopra, la mia risposta contiene anche il PDF stesso:

%PDF-1.5 
3 0 obj 
<</Type /Page 
/Parent 1 0 R 
/Resources 2 0 R 
/Group <</Type /Group /S /Transparency /CS /DeviceRGB>> 
/Contents 4 0 R>> 
endobj 
4 0 obj 
<</Filter /FlateDecode /Length 85>> 
stream 
... 

Ma ora voglio solo dare il file PDF al exaclty browser come vorrei aprire direttamente il PHP file ... Anche se il controller apre una nuova finestra con l'URL "blob: 7e2d358f-00a1-4e33-9e7e-96cfe7c02688", la pagina è vuota e, penso, l'URL è troppo corto per l'intero blob ...

Alcuni altri simili domande sono:

How to display a server side generated PDF stream in javascript sent via HttpMessageResponse Content

AngularJS: download pdf file from the server

How to read pdf stream in angularjs

AngularJS $http-post - convert binary to excel file and download

Quando uso il "ArrayBuffer" spesso menzionati responseType (che ho commentato nel codice sopra) - il risultato del PSP è "nullo" e non sono contenuto del file PHP. Quando non viene utilizzato, ottengo il file PDF ... Potrebbe essere che è un suggerimento ?!

La mia versione angolare è 1.2.26.

Un'altra soluzione totale che ho provato era chiamare il PHP direttamente (senza un controller jax/angolare) utilizzando un modulo con metodo post e un campo nascosto per i dati di stampa. Dato che i dati di stampa sono un oggetto json annidato a più livelli, non è davvero possibile inserirlo nel campo nascosto ...

Spero che qualcuno abbia qualche altra idea o trovi un errore !?

risposta

1

Add params responseType, intestazione e cache in $ http come questo:

$scope.print = function() { 
    $http({ 
     method : "post", 
     url : '/pdf/print_processor.php', 
     data : printdata, 
     responseType : 'arraybuffer', 
     headers: { 
          accept: 'application/pdf' 
     }, 
     cache: true, 
    }).success(function(response, status, headers) {       
    var file = new Blob([response], {type: 'application/pdf'}); 
     var fileURL = URL.createObjectURL(file); 
     window.open(fileURL); 
    }); 
} 
+0

Ciao, non possono confermare che, perché è troppo tempo fa e il progetto non è più esistente. Non riesco a spiegarmi come risolvere il caching ?! Lo stesso vale per l'header di accettazione: il server invia l'intera risposta, quindi l'intestazione di accettazione funziona e non credo che cambierà nulla. Ma forse ci proverò un giorno. Grazie! – Indivon

Problemi correlati