在Yii中查看PDF

问题描述 投票:0回答:3

我有PDF存储在一个文件夹中,现在我想通过我的表单页面上的链接查看它。我将如何使用Yii框架。

echo CHtml::link(
        'pdf',
        Yii::app()->createUrl('/uploads/Tutorial.pdf') ,
        array('class'=>'button','target'=>'_blank'));

我收到的错误如下所述,我也试过通过包含上传允许控制器。错误 错误404 无法解析请求“uploads / Tutorial.pdf”。 我正在使用mPDF生成PDF但我不知道如何使用Yii查看已生成的PDF。

pdf yii mpdf
3个回答
0
投票

你需要更多的东西来完成这项工作。你可能已经完成了一些而没有粘贴它但是这里...

我假设你已经设置了你的网站,通过跟随this tutorial使用.htaccess的干净网址。现在你可以添加:

在config / main.php,urlMananger部分中,您需要一个到控制器类和操作方法的路由。这告诉Yii当你转到URL /uploads/Tutorial.pdf时使用哪个控制器

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
    'rules'=>array(

         'uploads/<filename:[a-zA-Z]+\.pdf>' => 'upload/viewPdf', // actionViewPdf Method in UploadController class

         // ... all your other rules
    ),
), 

和一个控制器类,以及与上面的路由同名的方法(前面加上action):

 class UploadController extends Controller
 {
      // Put the usual Yii access control stuff here or whatever...

      public function actionViewPdf()
      {
          $filename = $_GET['filename'] . '.pdf';
          $filepath = '/path/to/your/pdfs/' . $filename;

          if(file_exists($filepath))
          {
              // Set up PDF headers
              header('Content-type: application/pdf');
              header('Content-Disposition: inline; filename="' . $filename . '"');
              header('Content-Transfer-Encoding: binary');
              header('Content-Length: ' . filesize($filepath));
              header('Accept-Ranges: bytes');

              // Render the file
              readfile($filepath);
          }
          else
          {
             // PDF doesn't exist so throw an error or something
          }
      }
 }

然后你应该可以使用

echo CHtml::link(
    'pdf',
    Yii::app()->createUrl('/uploads/viewPdf', array('filename' => 'Tutorial')) ,
    array('class'=>'button','target'=>'_blank'));

希望这很有帮助。


0
投票

嗯......你确定服务器上的uploads文件夹是否可用,并且它位于链接友好的位置? Yii没有通过它的index.php文件传递所有内容,如果文件已经存在,那么它就像它一样使用它。这就是为什么你可以访问图像或css文件夹中的文件,而无需控制器。

如果您使用的是普通的Yii结构,则应该在受保护文件夹旁边放置“uploads”文件夹。

如果您的uploads文件夹不在Web可访问的位置,请使用JamesG告诉您的内容。我唯一的改变是模式,它只匹配字母,你的名字也可能有其他字符。


0
投票

不要在链接中添加“.pdf”:

Yii::app()->createUrl('/uploads/Tutorial')

在PHP中你可以像这样打印你的pdf(必须在actionTutorial中):

$mPDF = Yii::app()->ePdf->mpdf();
$mPDF->WriteHTML($this->render('tutorial', array(), true));
$mPDF->Output();

本教程是一个简单的html页面,应该呈现在你的pdf中。

Here你可以找到doku到mpdf Yii扩展名

© www.soinside.com 2019 - 2024. All rights reserved.