我有一个审计表和audit_report字段。字段类型是文本。我将pdf文件保存到文件夹中并将名称保存到数据库。我试图在视图页面上显示pdf。但只有图像标志的盒子才会出现。我可以很好地显示jpeg和png文件。如何在yii2框架的视图页面上显示PDF。
答案 0 :(得分:6)
这样可行,
return Yii::$app->response->sendFile($completePath, $filename, ['inline'=>true]);
输入带有第三个参数的函数作为值'inline'=>true
的数组,以在浏览器窗口中打开文件。
请参阅此处的文档sendFile()
答案 1 :(得分:2)
您可以添加一个按钮,在新标签页中打开文件,但将其链接到控制器中的一个操作,该操作将返回文件而不是文件的直接路径:
在您看来:
<?= Html::a('PDF', [
'controller/pdf',
'id' => $model->id,
], [
'class' => 'btn btn-primary',
'target' => '_blank',
]); ?>
在您的控制器中:
public function actionPdf($id) {
$model = ModelClass::findOne($id);
// This will need to be the path relative to the root of your app.
$filePath = '/your/file/path';
// Might need to change '@app' for another alias
$completePath = Yii::getAlias('@app'.$filePath.'/'.$model->fileName);
return Yii::$app->response->sendFile($completePath, $model->fileName);
}
答案 2 :(得分:0)
尽管已经回答了问题,但是如果您拥有文件 content / stream 而不是文件路径,则需要解决一件事,例如您正在使用Dropbox API,并且您从API接收流,并且想要显示该文件而不是强制浏览器下载。
在这种情况下,您可以在尝试在浏览器中显示PDF文件时使用sendContentAsFile
,还需要同时指定mimeType
选项和"inline"=>true
,因为默认{ {1}}的值设置为mimeType
,该值用于下载文件并在浏览器中内联显示,您需要将其更改为application/octet-stream
。
application/pdf