Поскольку вы запрашиваете двоичный файл, вам нужно сообщить XHR и о taht, в противном случае он будет использовать кодировку по умолчанию «текст» (UTF-8), которая будет интерпретировать pdf как текст и испортит кодировку. Просто назначьте responseType
свойство MIME тип pdf
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; // tell XHR that the response will be a pdf file
// OR xhr.responseType = 'application/pdf'; if above doesn't work
И вы получите к нему доступ, используя свойство response
, а не responseText
.
Таким образом, вы будете использовать arr.push(xhr.response);
, и он вернет вам BLOB-объект.
Если это не сработает, сообщите мне, чтобы обновить другое решение.
Обновление:
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; // tell XHR that the response will be a pdf file
xhr.onload = function() {
var blob = this.response;
var a = window.document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = "tst.pdf";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
};