2014-11-18 19 views
5

Pek çok farklı yaklaşım denedikten sonra, hiçbir şey benim için işe yaramadı.Sunucu, uzun yazı içeriğine sahip PDF angularjs oluşturdu

en benzer soru ben bir PDF dosyası oluşturmak için benim PHP Dosya istek gönderen bir angularjs uygulaması var bu bir How to read pdf stream in angularjs

olduğunu. Benim denetleyicisi ben üzerinden bir düğmeden diyoruz aşağıdaki işlevi vardır ng tıklama:

$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); 
    }); 
} 

ana nedeni PHP dosyasına bazı daha fazla veri gemi zorunda idi. Printdata değişkeni, 12 KB'den fazla iç içe geçmiş bir JSON nesnesini içerir. Bu yüzden normal bir GET kullanamadım veya bu verileri normal bir bağlantı üzerinden URL'nin bir parçası olarak iletemedim.

İstek, print_processor.php dosyasını doğrudan (bu PDF'yi veren) olarak çağırabildiğim için çalışıyor ve istek gönderen e-posta oluşturmak için de aynı yöntemi kullanıyorum. ... Her ne kadar

%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 
... 

Ama şimdi sadece ben doğrudan PHP dosyasını açtığınız gibi tarayıcı exaclty PDF dosyasını vermek istiyorum: gibi yukarıda belirtilen söz konusu, benim cevap da pdf kendisini içerir denetleyici "blob: 7e2d358f-00a1-4e33-9e7e-96cfe7c02688" URL'si ile yeni bir pencere açar, sayfa boş ve bence, URL tüm blob için çok kısa ...

Bazı benzerler sorular şunlardır:

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

(Ben yukarıdaki kodunda açıklanır) sıklıkla bahsedilen responseType "arraybuffer" kullandığınızda - PHP sonucu "sıfır" olup PHP dosyasının içeriği. Kullanılmadığında PDF dosyasını alırım ... Bu bir ipucu olabilir mi ?!

Açısal sürüm 1.2.26'dır.

Denediğim toplam bir diğer çözüm, (post ajax/açısal denetleyicisiz) PHP'yi post-method ve printdata için gizli alan içeren bir form kullanarak doğrudan çağırıyordu. Printdata çok seviyeli yuvalanmış bir json nesnesi olduğu için, onu gizli alana yerleştirmek gerçekten mümkün değildir ...

Umarım başka bir fikri vardır ya da bir hata bulursunuz !? Böyle

cevap

1

Ekleme params responseType, $ http başlık ve cache: çok uzun zaman önceydi ve proje artık mevcut olmadığı için

$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

Merhaba, teyit edemez. Kendimi önbelleğe almanın bunu nasıl çözeceğini açıklayamıyorum ?! Kabul başlığı için de aynı: sunucu tüm cevabı gönderir, bu yüzden kabul başlığı çalışır ve hiçbir şeyin değişmeyeceğini düşünmüyorum. Ama belki bir gün deneyeceğim. Teşekkürler! – Indivon

İlgili konular