Просмотр PDF в Yii

У меня есть PDF-файл, хранящийся в папке, теперь я хочу просмотреть его по ссылке на моей странице формы. Как я это сделаю с помощью Yii framework.

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

Ошибка, которую я получаю, упоминается ниже, я также пытался включить загрузку в разрешении контроллера. Ошибка
Ошибка 404
Невозможно разрешить запрос «uploads/Tutorial.pdf».


Я использую mPDF для сгенерировать PDF, но я не знаю, как просмотреть уже сгенерированный PDF с помощью Yii.


person Femme Fatale    schedule 02.03.2014    source источник
comment
Ошибка 404 просто означает, что вы ссылаетесь на недействительный URL-адрес. проверьте URL-адрес ссылки на отображаемой странице.   -  person Rafay Zia Mir    schedule 02.03.2014


Ответы (3)


Вам нужно еще несколько вещей, чтобы сделать эту работу. Возможно, вы уже сделали что-то из этого и не вставили, но вот...

Я предполагаю, что вы настроили свой сайт для использования чистых URL-адресов с .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'));

Надеюсь, это полезно.

person JamesG    schedule 02.03.2014
comment
localhost/application/index.php/viewPdf/filename/Tutorial - это ссылка... и она отображает ту же ошибку. Я включил actionViewPDF в свой контроллер и также добавил его в правило «разрешить». - person Femme Fatale; 03.03.2014

Ну... вы уверены, что папка для загрузки доступна на сервере и находится в удобном для ссылок месте? Yii не передает все через свой файл index.php, если файл уже существует, он просто использует его как есть. Вот почему вы можете получить доступ к файлам в ваших изображениях или папке css, не имея для этого контроллера.

Если вы используете обычную структуру Yii, у вас должна быть папка «uploads» рядом с защищенной папкой.

Если ваша папка с загрузками не находится в доступном в Интернете месте, используйте то, что вам сказал JamesG. Единственное изменение, которое я хотел бы внести, - это шаблон, он соответствует только буквам, у вас могут быть и другие символы в имени.

person Mihai P.    schedule 02.03.2014
comment
Я попробовал метод доступа JamesJ, но все еще сталкиваюсь с той же ошибкой. - person Femme Fatale; 03.03.2014
comment
Значит, ваша папка с загрузками недоступна в Интернете? - person Mihai P.; 03.03.2014
comment
Начните с ответа на вопрос, доступна ли ваша папка в Интернете или нет. - person Mihai P.; 04.03.2014

Не добавляйте ".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-файл.

Здесь вы можете найти документацию по расширению Yii mpdf

person Dinistro    schedule 03.03.2014