javascript — отображение pdf с сервера отчетов Jasper

Моя проблема

Я получаю отчет, сгенерированный с помощью Jasper Reports Server, с намерением показать его пользователю на новой вкладке. Я могу создать новую вкладку просто отлично, но PDF-файл полностью пуст.

Мой код

У меня есть файлы, один файл php, который делает запрос к jasperserver, и другой, который запрашивает этот файл и создает новую вкладку, используя javascript.
Javascript:

sap.ui.getCore().attachInit(function () {
var onPress = function(evt){
jQuery.ajax({
type: "GET",
url: "JasperReportAPICall.php",
xhrFields: {responseType: "text/pdf"},
data: {
functionname: "authenticate",
argument: "http://localhost:8080/jasperserver/rest_v2/reports/reports/interactive/Directives_Report.pdf?id=1&method=rules"},
success: function(response){
var blob = new Blob([response], {type: "application/pdf"});
var pdfUrl = window.URL.createObjectURL(blob);
var newTab = window.open(pdfUrl);
newTab.addEventListener('load', function(pdfUrl){
window.URL.revokeObjectURL(pdfUrl);
}, false);
console.log("Report succesfully received");

}
});
};
new sap.m.Button({
text: "GNR",
press: onPress
}).placeAt("content");
});

PHP:

function authenticate($url){
global $username, $pwd;

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_GET, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "$username:$pwd");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);
if (result===false){
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$error = curl_error($curl);
echo "HTTPCODE: $httpcode";
echo "ERROR: $error";
}

curl_close($curl);
return $result;
}

if (isset($_GET['functionname']) && isset($_GET['argument'])){
if ($_GET['functionname'] === "authenticate"){

$result = authenticate($_GET['argument']);
echo $result;
}
}

Что я пробовал

  • Установка типа ответа xhr как blob. window.URL.createObjectURL отклонил его
  • Установите xhr responseType как ‘arraybuffer’ и создайте новый Blob, используя указанный arraybuffer. При открытии новой вкладки программа просмотра PDF жалуется, что не может открыть файл
  • Тот же шаг, что и предыдущий, но вместо этого с объектом File. тот же результат.

Как выглядят данные

Это то, что я получаю с сервера.

Поскольку он слишком большой, чтобы положить его сюда, я положил его в Pastebin.

0

Решение

Я нашел исправление. Проблема была на стороне PHP. Как это было, я получил данные, но не сделал установить соответствующие заголовки, таким образом, при использовании xhr responseType ‘blob’, у него не было типа mime, что вызывало сбой при использовании его для создания объекта url.
Прежде чем вернуть pdf к вызову ajax, я установил заголовки следующим образом.

function authenticate($url){
...
curl_close($curl);
header('Cache-Control: public');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="new.pdf"');
header('Content-Length: '.strlen($result));
return $result;
}

При этом PDF-файл подается без ошибок.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]