我在laravel控制器中编写了一些示例代码来生成pdf。它得到200响应代码,但pdf没有生成。
以下是我的代码。
function exportPDF() {
// instantiate and use the dompdf class
$dompdf = new PDF();
$dompdf->loadHtml('<h1>hello world</h1>');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
return $dompdf->stream();
}
但是当我直接在web.php文件中包含路由中的代码时,这是有效的。
Route::get('/generate-pdf', function () {
$pdf = App::make('dompdf.wrapper');
$pdf->loadHTML('<h1>Test</h1>');
return $pdf->stream();
});
EDITED
web.php
Route::post('/report-audit-export-pdf', 'ReportAuditController@exportPDF');
的.js
window.exportPDF = function() {
var hidden_category = $('#hidden_category').val();
$.ajax({
type: "POST",
url: '/report-audit-export-pdf',
data: {
},
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("jqXHR : " + jqXHR + " and textStatus : " + textStatus + " and errorThrown : " + errorThrown);
},
success: function(content) {
// alert("Success");
}
});
}
我可以知道问题是什么吗?
答案 0 :(得分:1)
您无法通过Ajax生成PDF,因为Ajax请求期望响应,Laravel默认将其作为JSON发回。所以你可以做的是制作一个显示PDF的普通GET路线,例如:
<a href="/display-pdf">Display PDF</a>
由于你的ajax没有POST任何数据(你的数据对象为空),你可以绕过你的ajax请求并只使用一个锚
$.ajax({
type: "POST",
url: '/data-url',
data: {},
success: function(content) {
window.location.href = '/display-pdf';
}
});
如果由于某种原因,你仍然想使用Ajax,你可以使用像这样的ajax请求的成功响应
strreplace('DJIA', '<span class="color:red">DJIA</span>', $someText);