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 );
}
答案 0 :(得分:3)
我几个月前遇到同样的问题,我想在Yii Framework中将html页面转换为pdf。我花了3天时间才弄清楚如何正确使用它。因此,有两种方法可以通过下面的PHP类从html生成PDF:
HTML2PDF
mPDF
我已使用过两者,但我希望您使用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 PDF
和mPDF
并提取它们,然后将文件夹重命名为yii-pdf
和mpdf
,并将它们放入{{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>