如何解决从本地主机导出pdf/下载文件时无法访问页面
我想将数据表导出为 PDF。
我使用的是 Yii2 框架,PHP 7.3 版并使用 Mpdf 插件。
我认为代码是正确的,因为当我点击按钮导出为PDF时没有显示任何错误信息,页面加载时间很长,最后只是显示“无法到达页面”。
当我尝试从本地目录下载文件时也会出现此问题。
代码如下:
控制器:
public function actionExportPdf()
{
$searchModel = new BelanjaSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$html = $this->renderPartial('_pdf',['dataProvider' => $dataProvider]);
$mpdf = new \mpdf('c','A4','',0);
$mpdf->SetDisplayMode('fullpage');
$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;
}
pdf.php
<!DOCTYPE html>
<html>
<head>
<title>Print</title>
<style>
.page {
padding: 2cm;
}
table {
border-spacing: 0;
border-collapse: collapse;
width: 100%;
}
table td,table th {
border: 1px solid #ccc;
}
table th {
background-color: red;
}
</style>
</head>
<body>
<div class="page">
<h1>Belanja</h1>
<table border="0">
<tr>
<th>No</th>
<th>Jenis Belanja</th>
<th>Subjenis Belanja</th>
<th>Barang</th>
<th>Jumlah</th>
<th>Satuan</th>
<th>Harga</th>
<th>Jumlah Harga</th>
</tr>
<?php
$no = 1;
foreach ($dataProvider->getModels() as $bar) {
?>
<tr>
<th><?= $no++ ?></th>
<th><?= $bar->jenis_belanja ?></th>
<th><?= $bar->subjenis_belanja ?></th>
<th><?= $bar->barang_belanja ?></th>
<th><?= $bar->jumlah_barang ?></th>
<th><?= $bar->satuan_barang ?></th>
<th><?= $bar->harga_satuan ?></th>
<th><?= $bar->jumlah_harga ?></th>
</tr>
<?php } ?>
</table>
</div>
</body>
</html>
我已经检查过服务器连接,一切正常,没有问题。
解决方法
你没有返回任何东西,只是退出,所以浏览器会等待响应,直到达到 timeout
的值,然后让你知道它无法到达服务器,这是结论它到达了,因为它从未得到回应。
由于您直接使用 mpdf,您应该能够使用 Output
方法将 PDF 数据作为响应直接返回给浏览器。
public function actionExportPdf()
{
$searchModel = new BelanjaSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$html = $this->renderPartial('_pdf',['dataProvider' => $dataProvider]);
$mpdf = new \mpdf('c','A4','',0);
$mpdf->SetDisplayMode('fullpage');
$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list
$mpdf->WriteHTML($html);
// Change the next two lines
return $mpdf->Output();
}
请注意,我还没有尝试过,我使用 Kartik Yii2 MPDF wrapper 而不是直接使用 MPDF,但是一旦返回数据,您所拥有的应该可以工作。
如果这不起作用,您可以更新您的项目以使用包装器,然后像小部件一样构建 PDF,有一个示例 here,在您的情况下,它会是这样的:
use kartik\mpdf\Pdf;
...
public function actionExportPdf()
{
$searchModel = new BelanjaSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$html = $this->renderPartial('_pdf',['dataProvider' => $dataProvider]);
$pdf = new Pdf([
// set to use core fonts only
'mode' => Pdf::MODE_CORE,// Or Pdf::MODE_UTF8
//Name for the file
'filename' => Yii::t('app','document.pdf'),// A4 paper format
'format' => Pdf::FORMAT_A4,// portrait orientation
'orientation' => Pdf::ORIENT_PORTRAIT,// stream to browser inline
'destination' => Pdf::DEST_BROWSER,// your html content input
'content' => $html,// format content from your own css file if needed or use the
// enhanced bootstrap css built by Krajee for mPDF formatting
'cssFile' => '@cssPath/pdf-document.css',// any css to be embedded if required
'cssInline' => '',// set mPDF properties on the fly
'options' => [
'title' => Yii::t('app','autoScriptToLang' => true,'autoLangToFont' => true
],// call mPDF methods on the fly
'methods' => [
'SetHeader'=>[$document->getNamei18n()],'SetFooter'=>['{PAGENO}'],],]);
return $pdf->render();
}
Kartik 有一个 page with a lot of examples here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。