3

我正在尝试将视图呈现给变量。然后,此变量将用于生成 pdf。然后应该使用媒体视图下载该 pdf。

这是我的控制器代码:



        $dir = ROOT . '/app/tmp/evaluationpdf/';
        $path = $dir . $evaluationid . '.pdf';

        $evaluation = $this->SelfEvaluation->find('first', array(
            'conditions' => array('SelfEvaluation.id' => $evaluationid),
            'contain' => array('Submission' => array('Application'), 'Applicant', 'Member')));

        $this->set(compact('evaluation'));
        $this->output = '';
        $this->layout = false;
        $html = $this->render('/elements/self_evaluation_pdf');

        $this->_generate_pdf($html, $path);

        $this->view = 'Media';

        $params = array(
                'id' => $evaluationid . '.pdf',
                'name' => $evaluationid,
                'download' => true,
                'extension' => 'pdf',
                'path' => $dir,
        );

        $this->set($params);

该文件按原样创建,但第一个 '$this->render' 输出也会发送到浏览器。

该文件永远不会下载。

关于如何解决这个问题的任何想法?

4

3 回答 3

1

简单的解决方法是在您的第一次 render() 调用之后将 $this->output 设置为 '' 。

更正确的方法是使用 requestAction() 而不是 render()。

于 2013-01-12T09:35:40.057 回答
0

在 CakePHP 2.x 中,为了使用视图生成条形码标签格式,我做了以下操作:

      $response = $this->render('/Labels/' . $printer['Printer']['model'] . '/manifest', 'ajax');
      $body = $response->body();
      $response->body('');

这给了我作为 $body 的视图数据。然后我可以重定向,或者如果请求是 ajax,只需将 autoRender 设置为 false 并返回 ''。

这有点混淆了 MVC 水域,但它很简单。

于 2013-01-10T15:59:23.763 回答
0

您只需在 self_evaluation_pdf.ctp 中编写以下代码

  header("Content-Disposition: attachment; filename='downloaded.pdf'");
  header('Content-type: application/pdf');

此视图中的动态内容将在客户端下载为 PDF 文件。

于 2013-01-12T07:07:47.027 回答