可以从数据库中生成pdf文件yii
问题描述:
可以任何人指导我。我不知道如何继续前进。事情是我有描述,图像作为字段的table1用户A登录尽快,用户A创建此记录与decitpion和图像字段我想要生成一个PDF文件的图像和解除以及提供登录下载PDF文件时用户B的下载链接。可以从数据库中生成pdf文件yii
我需要知道被从DB数据生成可以将PDF文件正在使用警予
我的问题如下
这可能吗? 如果没有什么更好的建议?如果可能的话, 是他们的任何扩展名。 任何人都可以提供一些指导。
请让我知道我这样做的第一次,但不知道如何对
答
很可能是随身携带。我不使用扩展名我使用名为HTML2PDF的库 http://www.html2pdf.fr/en 我把它放在我的扩展文件夹中。 我创建具有此代码
<?php
class Pdf extends CAction {
public function run() {
$controller = $this->getController();
\Yii::import('core.extensions.Html2Pdf.HTML2PDF');
//use the existing filters
$model_name = $controller->modelName();
$model = new $model_name('search');
$dataProvider = $model->active()->search();
//remove the pagination
$dataProvider->setPagination(false);
//get the html to transform
$content = $controller->renderPartial('pdf',array(
'dataProvider'=>$dataProvider,
'title'=>$controller->modelName() . ' - '.date('F j, Y, G:i'),
), true);
try
{
if(isset($_GET['test'])) {
echo $content;
} else {
//create the PDF
$html2pdf = new HTML2PDF('P', 'A4', 'en');
$html2pdf->setDefaultFont('Arial');
$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
$html2pdf->Output($controller->modelName() . '_'.date('Y-m-d').'.pdf');
}
}
catch(HTML2PDF_exception $e) {
echo $e;
exit;
}
}
}
那我可以连接到任何控制器这样
/**
* @return array actions to be mapped to this controller
*/
public function actions(){
return array(
'csv'=>array(
'class'=>'core.components.actions.Csv',
'field_list'=>array('t.id', 't.name', 't.status'),
),
'pdf'=>array(
'class'=>'core.components.actions.Pdf',
),
);
}
一个PDF作用。有一个叫做pdf的视图,它具有我想要导出为PDF的内容。我实际上是创建简单的HTML(所以没有什么复杂的,大多数样式都是内联的)。一个例子是
<page backtop="22mm" backbottom="8mm" backleft="0" backright="0">
<page_header>
<h1> <?php echo $title?></h1>
<table backleft="10mm" style="width: 700px;" align="center">
<tr>
<td style="width: 10%; border-bottom: 1px solid black;">ID</td>
<td style="width: 75%; border-bottom: 1px solid black;">Name</td>
<td style="width: 15%; border-bottom: 1px solid black;">Status</td>
</tr>
</table>
</page_header>
<page_footer>
<table style="width: 700px; border-top: 1px solid black;" align="center">
<tr>
<td style="text-align: left; width: 50%"></td>
<td style="text-align: right; width: 50%">page [[page_cu]]/[[page_nb]]</td>
</tr>
</table>
</page_footer>
<table style="width: 700px;" align="center">
<?php
foreach($dataProvider->getData() as $record) {
?> <tr>
<td style="width: 10%;"><?php echo $record->id?></td>
<td style="width: 75%;"><?php echo $record->name?></td>
<td style="width: 15%;"><?php echo ucfirst($record->status)?></td>
</tr>
<?php
}
?> </table>
</page>
谢谢:)的快速反应我有一个问题,即米哈伊,我如何提供一个下载链接,下载该PDF格式,这里保存的PDF哪里,我需要的是时生成记录作为pdf的记录ie,描述和img存储在文件夹中,并在folderi.e。中提供pdf文件的参考,为每个记录提供唯一的文件名,或者更好的建议我 – hir
此行'$ html2pdf->输出($ controller-> modelName()。'_'。date('Ym-d')。'。pdf');'允许你在那里和那里下载文件。把它改成 '$ html2pdf-> Output('directory/file_xxxx.pdf','F');'把它保存在服务器上。要创建一个唯一的名字,你可以在PHP中创建一个哈希字符串,并将其用作它的名字。将它保存在一个友好的下载位置,并在需要时将其提供给用户。 –
你的代码是值得的,那么我期待的其他扩展。我已将pdf类放入模型文件夹中,并将函数actions()放置在我的控制器(A)和放置在控制器(A)的视图(A)中的pdf视图中的一个中。我知道我错了。我在这里得到一个错误,因为core.components.actions.Pdf指向现有的目录。我想我把代码放在错误的地方,你可以请指导我 – hir