在Yii中查看PDF

sycxhyv7  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(167)

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

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

我收到下面提到的错误,我也尝试过在控制器的允许中包含上传。错误
404错误提示
无法解析请求“favicon.ico”。**
我正在使用mPDF生成PDF,但我不知道如何使用Yii查看已经生成的PDF。

2exbekwf

2exbekwf1#

你还需要几样东西才能让这个工作正常进行。你可能已经做了一些,没有粘贴,但是这里...
我假设您已经通过this tutorial将您的站点设置为使用干净的URL和.htaccess。
在config/main.php的urlMananger部分,你需要一个到控制器类和action方法的路由,它告诉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'));

希望能帮上忙。

7nbnzgx9

7nbnzgx92#

那么....你确定uploads文件夹在服务器上是可用的,并且是在一个链接友好的位置吗?Yii并不通过它的index.php文件传递所有的东西,如果一个文件已经存在,那么它只是像它一样使用它。这就是为什么你可以访问你的图片或css文件夹中的文件,而不需要一个控制器。
如果您使用的是普通的Yii结构,那么您应该在受保护的文件夹旁边有一个“uploads”文件夹。
如果你的上传文件夹不在一个网络可访问的位置,使用jamesg告诉你的。我唯一要做的改变是模式,它只匹配字母,你可能也有其他字符的名称。

zed5wv10

zed5wv103#

请勿在链接中添加.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扩展名

相关问题