如何在YII框架中将HTML页面转换为PDF

时间:2016-06-23 04:34:54

标签: html pdf yii

this is my output我需要在YII框架中将我的HTML页面转换为PDF格式。 我试过了HTML2PDF,它给了我这个错误。

  

[错误]似乎未安装HTML2PDF依赖项...您必须使用composer install安装它们

然后我也安装了作曲家。但错误是一样的。

建议我解决这个问题或提出任何新想法。

这是我的观看代码..

<tr>
    <?php echo "<td>".$record->inv_article."</td>" ?>
    <?php echo "<td>".$record->inv_no."</td>" ?>
    <?php echo "<td >".$record->inv_weight."</td>" ?>
    <?php echo "<td >".$record->inv_amt."</td>" ?>
    <?php echo "<td >".$record->inv_freight."</td>" ?>
    <?php echo "<td >".$record->inv_bilticharges."</td>" ?>
    <?php echo "<td >".$record->inv_bilticharges."</td>" ?>


    <?php $i++; ?>

</tr>

这是我项目中的控制器

public function actionGeneratePDF($id){

    $mpdf1 = Yii::app()->ePdf->mpdf();

    $myhtml=$this->renderPartial('lorryprint', array(
        'model'=>$model,'invid'=>$id), true);


    $mpdf1->WriteHTML($myhtml);

    $file_name= $id.'.pdf';

    ob_end_clean();

    $mpdf1->Output($file_name,EYiiPdf::OUTPUT_TO_DOWNLOAD );
}

CHECK OUT HERE

1 个答案:

答案 0 :(得分:3)

我几个月前遇到同样的问题,我想在Yii Framework中将html页面转换为pdf。我花了3天时间才弄清楚如何正确使用它。因此,有两种方法可以通过下面的PHP类从html生成PDF:

  1. HTML2PDF
  2. mPDF
  3. 我已使用过两者,但我希望您使用mPDF。它比HTML2PDF好得多。以下是如何在Yii Framework中使用mPDF的方法。

    首先你需要

    YiiPDF - 小Yii扩展,包含一些PHP库(目前为mPDF和HTML2PDF)以将HTML转换为PDF。

    mPDF - 是一个PHP类,用于从HTML生成PDF文件,支持Unicode / UTF-8和CJK。

    我使用过mPDF Version 5.7因为你不需要作曲家来安装它。

    只需从上面的链接下载Yii PDFmPDF并提取它们,然后将文件夹重命名为yii-pdfmpdf,并将它们放入{{1 }}。

    然后打开protected\extensions并添加以下代码。

    protected/config/main.php

    请注意:在上面的代码中'components'=>array( 'ePdf' => array( 'class' => 'ext.yii-pdf.EYiiPdf', 'params' => array( 'mpdf' => array( 'librarySourcePath' => 'application.extensions.mpdf.*', 'constants' => array( '_MPDF_TEMP_PATH' => Yii::getPathOfAlias('application.runtime'), ), 'class'=>'mpdf', // the literal class filename to be loaded from the vendors folder /*'defaultParams' => array( // More info: http://mpdf1.com/manual/index.php?tid=184 'mode' => '', // This parameter specifies the mode of the new document. 'format' => 'A4', // format A4, A5, ... 'default_font_size' => 0, // Sets the default document font size in points (pt) 'default_font' => '', // Sets the default font-family for the new document. 'mgl' => 15, // margin_left. Sets the page margins for the new document. 'mgr' => 15, // margin_right 'mgt' => 16, // margin_top 'mgb' => 16, // margin_bottom 'mgh' => 9, // margin_header 'mgf' => 9, // margin_footer 'orientation' => 'P', // landscape or portrait orientation )*/ ) ), ), 表示您在'class' => 'ext.yii-pdf.EYiiPdf',中有一个名为EYiiPdf的文件,同样地,protected/extensions/yii-pdf/ <中存在mPDF扩展名'librarySourcePath' => 'application.extensions.mpdf.*', / p>

    然后您可以在控制器中创建一个功能。

    protected/extensions/mpdf

    所以在我public function actionGeneratePDF($id){ $model = AsfiUsers::model()->findByPk($id); $mpdf1 = Yii::app()->ePdf->mpdf(); $myhtml=$this->renderPartial('ProfileView', array( 'personal_info'=>$model), true); $mpdf1->WriteHTML($myhtml); $file_name= $id.'.pdf'; ob_end_clean(); $mpdf1->Output($file_name,EYiiPdf::OUTPUT_TO_DOWNLOAD ); } 的视图中,我在其顶部添加了一个按钮。

    ProfileView

    单击该按钮后,将下载该html页面的PDF。我的个人资料视图也有表格,所以这就是为什么我使用<?php echo CHtml::link('PDF Version',array('AsfiUser/GeneratePDF','id'=>$this->id), array('class'=>'btn btn-info btn-sm')); ?> 而不是mPDF。在html2pdf中,它没有提供很多选项来调整表格边距等。但是在mpdf中它会自动调整并且将是一个完美的PDF。

    FOR HTML2PDF

    如果您想使用Html2PDF,则所有步骤都相同。只需下载HTML2PDF,新版本就会出现Old version of html2pdf等问题。就像你现在拥有它们一样。

    所有步骤都相同,只需将其添加到yii-pdf组件数组中mPDF类下面的dependencies are not installed

    protected/config/main.php

    然后您的控制器功能将相同,只需用mPDF替换名称。

                'HTML2PDF' => array(
                    'librarySourcePath' => 'application.extensions.html2pdf.*',
                    'classFile'         => 'html2pdf.class.php', // For adding to Yii::$classMap
                    /*'defaultParams'     => array( // More info: http://wiki.spipu.net/doku.php?id=html2pdf:en:v4:accueil
                        'orientation' => 'P', // landscape or portrait orientation
                        'format'      => 'A4', // format A4, A5, ...
                        'language'    => 'en', // language: fr, en, it ...
                        'unicode'     => true, // TRUE means clustering the input text IS unicode (default = true)
                        'encoding'    => 'UTF-8', // charset encoding; Default is UTF-8
                        'marges'      => array(5, 5, 5, 8), // margins by default, in order (left, top, right, bottom)
                    )*/
                )
    

    并在视图中创建相同的按钮。我希望它对你有用。我使用了同样的工作并且工作得很好。

    <强>已更新

    此代码有效,只是尝试检查您没有犯任何错误,然后在html视图文件的顶部添加以下代码。

    public function actionGeneratePDF($id){
    
        $model = AsfiUsers::model()->findByPk($id);
    
        $html2pdf= Yii::app()->ePdf->HTML2PDF();
    
        $myhtml=$this->renderPartial('ProfileView', array(
            'personal_info'=>$model), true);
    
        $html2pdf->WriteHTML($myhtml);
    
        $file_name= $id.'.pdf';
    
        ob_end_clean();
    
        $html2pdf->Output($file_name,EYiiPdf::OUTPUT_TO_DOWNLOAD );
    }
    

    它会在你想要制作PDF的页面上添加按钮,当你点击按钮时,它会下载文件,而根据页面大小需要几秒钟到一分钟。

    更新2

    将此行添加到您的控制器

    <?php ob_start(); //started buffering ?> <?php echo CHtml::link('PDF Version',array('AsfiUser/GeneratePDF','id'=>$this->id), array('class'=>'btn btn-info btn-sm')); ?>

    所以你的控制器将是这样的

    $myhtml=preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $myhtml);

    如果上述控制器部分不起作用,则修复你的代码。

    您的这一行说public function actionGeneratePDF($id){ $mpdf1 = Yii::app()->ePdf->mpdf(); $myhtml=$this->renderPartial('lorryprint', array( 'model'=>$model,'invid'=>$id), true); $myhtml=preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $myhtml); $mpdf1->WriteHTML($myhtml); $file_name= $id.'.pdf'; ob_end_clean(); $mpdf1->Output($file_name,EYiiPdf::OUTPUT_TO_DOWNLOAD ); }

    $model

    并且在你看来你正在使用$myhtml=$this->renderPartial('lorryprint', array( 'model'=>$model,'invid'=>$id), true); 而不是$ model,你是否在你的循环中正确地完成了它。你的View文件是否显示结果?

    如果显示正确,那么您的查看文件$record应该是这样的。在php标记之外添加lorryprint

    <td>