web-dev-qa-db-ja.com

JavaScript:バイト配列から新しいタブでPDFを開く

HTTPリソースでAngularJSを使用して外部APIを呼び出していますが、応答はバイト配列です。このバイト配列を新しいウィンドウでPDFに変換する必要があります。クロスブラウザーで動作する、または純粋なjavascriptである非常に優れたソリューションはここにはありません。これを行う?

ここに私のコードがあります:

Javascript

Document.preview({id: $scope.order.id}, function(data){

    // Open PDF Here
    var file = new Blob([data], {type: 'application/pdf'});
    var fileURL = URL.createObjectURL(file);
    window.open(fileURL);

});
12
Jeremy Wagner

それでも誰かがそれを探しているなら、ここに私がやっていること(そして働いている)があります:

var pdfAsDataUri = "data:application/pdf;base64,"+byteArray;
window.open(pdfAsDataUri);

ここで、byteArrayは受け取るデータです。それはおそらくニースのソリューションではありません(バイト配列はURLに表示されます)が、動作します...

11
Gonnarule

サービス呼び出しでresponseTypeを渡す必要があります

$http.post('/Service-URL', dataTO, {responseType: 'arraybuffer'});

データ呼び出しが成功すると、新しいウィンドウでpdfが開きます:

    InfoFactory.getDocument()
        .success(function(data) {
            var file = new Blob([data], { type: 'application/pdf' });
            var fileURL = URL.createObjectURL(file);
            window.open(fileURL, "EPrescription");
    })

この答えから: https://stackoverflow.com/a/21730535/3645957 by https://stackoverflow.com/users/2688545/michael

9
aniltilanthe