加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Yii框架中的TCpdf不止一次加载动作

发布时间:2020-12-13 22:53:15 所属栏目:PHP教程 来源:网络整理
导读:我在Yii框架中使用Tcpdf,(只是)当我在我的视图中创建新的Tcpdf以导出文件时,这导致我的动作加载了两三次(我在行动中通过计数器检查了它),最后它工作,并给我我的PDF文件. 我不希望这个动作多次加载,因为在行动中我正在通过某些规则更改某些属性,并且此规则将
我在Yii框架中使用Tcpdf,(只是)当我在我的视图中创建新的Tcpdf以导出文件时,这导致我的动作加载了两三次(我在行动中通过计数器检查了它),最后它工作,并给我我的PDF文件.

我不希望这个动作多次加载,因为在行动中我正在通过某些规则更改某些属性,并且此规则将在第一次加载控制器后更改.

这个问题是在主机和我的本地(xammp)这个工作正常(我的服务器是Linux)

我的行动:

public function actionPrint_diploma($id)
{
    // check number of load this action :
    if(isset(Yii::app()->session['counter'])&&Yii::app()->session['counter']>=0)
        Yii::app()->session['counter']=Yii::app()->session['counter']+1;
    else    
        Yii::app()->session['counter']=0;

    // ...

    $this->render('coach_certificate');

}

我的观点(coach_certificate.php):

// Include the main TCPDF library (search for installation path).
$dir=Yii::getPathOfAlias('webroot').'/my_library/tcpdf/examples/tcpdf_include.php';

require_once($dir);

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetTitle('printing certificate');
$pdf->SetSubject('printing certificate');
$pdf->SetKeywords('PDF');

// remove default header/footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);


// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO,PDF_HEADER_LOGO_WIDTH,PDF_HEADER_TITLE.' 061',PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN,'',PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA,PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT,PDF_MARGIN_TOP,PDF_MARGIN_RIGHT);
//$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(FALSE,PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);


// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/far.php')) {
    require_once(dirname(__FILE__).'/lang/far.php');
    $pdf->setLanguageArray($l);
}

//$pdf->addTTFfont('/fonts/BZar.ttf',32);
// ---------------------------------------------------------
// set font                                                          
$lg = Array();
$lg['a_meta_charset'] = 'UTF-8';
$lg['a_meta_dir'] = 'rtl';
$lg['a_meta_language'] = 'fa';
$lg['w_page'] = 'page';

// set some language-dependent strings (optional)
$pdf->setLanguageArray($lg);

// ---------------------------------------------------------


$pdf->AddPage();                                                                                                                 

$pdf->SetFont('freeserif',10);   

$pdf->SetAbsXY(305,50);
$html = Yii::app()->session['counter'];
$pdf->writeHTML($html,false,'C');    

$pdf->lastPage();                                                                        

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output("test.pdf",'D');                                         // 
Yii::app()->end();

解决方法

您必须使用两个操作来解决此问题.

步骤1 :

在第一个操作中设置您的更改等…然后不要使用渲染而不是它,使用重定向到第二个操作.

第2步 :

在第二个操作中,只渲染您的视图文件.
最后如果它有多次加载动作,它会加载第二个动作并且不会多次调用你的更改函数.
我希望它的工作正确

好好享受

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读