如何在yii2上显示PDF文件

时间:2017-01-11 15:58:51

标签: pdf yii2 display

我有一个审计表和audit_report字段。字段类型是文本。我将pdf文件保存到文件夹中并将名称保存到数据库。我试图在视图页面上显示pdf。但只有图像标志的盒子才会出现。我可以很好地显示jpeg和png文件。如何在yii2框架的视图页面上显示PDF。

3 个答案:

答案 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);
}

Aliases - Key Concepts - The Definitive Guide to Yii 2.0

答案 2 :(得分:0)

尽管已经回答了问题,但是如果您拥有文件 content / stream 而不是文件路径,则需要解决一件事,例如您正在使用Dropbox API,并且您从API接收流,并且想要显示该文件而不是强制浏览器下载。

在这种情况下,您可以在尝试在浏览器中显示PDF文件时使用sendContentAsFile,还需要同时指定mimeType选项和"inline"=>true,因为默认{ {1}}的值设置为mimeType,该值用于下载文件并在浏览器中内联显示,您需要将其更改为application/octet-stream

application/pdf