2014-11-18 1 views
5

После попытки множества разных подходов ничего не работало для меня.Сгенерировано сервером 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-объектом, его невозможно поместить в скрытое поле ...

Надеюсь, у кого-то есть какая-то другая идея или найти ошибку !?

ответ

1

Добавить PARAMS responseType, заголовок и кэш в $ HTTP, как это:

$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

Привет, не могу подтвердить, что, потому что это слишком давно, и проект не существует больше. Я не могу объяснить себе, как это будет решать кеширование ?! То же самое для заголовка accept: сервер отправляет весь ответ, поэтому заголовок accept работает, и я не думаю, что это что-то изменит. Но, возможно, я попробую это когда-нибудь. благодаря! – Indivon

Смежные вопросы