После попытки множества разных подходов ничего не работало для меня.Сгенерировано сервером PDF angularjs с длинным сообщением
Наиболее похожий вопрос этот один How to read pdf stream in angularjs
У меня есть AngularJS приложение, которое отправляет запрос на мой PHP-файл для создания файла PDF. Мой контроллер имеет следующую функцию, которую я называю от кнопки через нг-клик:
$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);
});
}
Основная причина заключалась в том, что я должен отправить еще некоторые данные в файл PHP. Переменная printdata содержит вложенный объект JSON с более чем 12 КБ. Поэтому я не мог использовать обычный GET или передавать эти данные по обычной ссылке в качестве части URL-адреса.
Запрос работает, потому что я могу напрямую вызвать print_processor.php (что дает мне PDF), и я использую тот же подход для создания отправки электронной почты. Как и в упомянутой выше вопрос, мой ответ также содержит сам PDF:
%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
...
Но теперь я просто хочу, чтобы дать файл PDF в браузере exaclty как я бы открыть PHP-файл непосредственно ... Хотя контроллер открывает новое окно с URL-адресом «blob: 7e2d358f-00a1-4e33-9e7e-96cfe7c02688», страница пуста, и я думаю, что URL-адрес слишком короткий для всего блоба ...
Некоторые другие подобные вопросы:
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
Когда я использую часто упоминается responseType «ArrayBuffer» (который я комментировал в коде выше) - результат PHP является «нулевым», а не содержимое файла PHP. Когда он не используется, я получаю файл PDF ... Может быть, это подсказка ?!
Мое угловое исполнение 1.2.26.
Другое другое решение, которое я пытался, вызывало PHP напрямую (без ajax/углового контроллера), используя форму с пост-методом и скрытое поле для printdata. Поскольку printdata является многоуровневым вложенным json-объектом, его невозможно поместить в скрытое поле ...
Надеюсь, у кого-то есть какая-то другая идея или найти ошибку !?
Привет, не могу подтвердить, что, потому что это слишком давно, и проект не существует больше. Я не могу объяснить себе, как это будет решать кеширование ?! То же самое для заголовка accept: сервер отправляет весь ответ, поэтому заголовок accept работает, и я не думаю, что это что-то изменит. Но, возможно, я попробую это когда-нибудь. благодаря! – Indivon