可以从数据库中生成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>&nbsp;&nbsp;&nbsp;&nbsp;<?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> 
+0

谢谢:)的快速反应我有一个问题,即米哈伊,我如何提供一个下载链接,下载该PDF格式,这里保存的PDF哪里,我需要的是时生成记录作为pdf的记录ie,描述和img存储在文件夹中,并在folderi.e。中提供pdf文件的参考,为每个记录提供唯一的文件名,或者更好的建议我 – hir

+0

此行'$ html2pdf->输出($ controller-> modelName()。'_'。date('Ym-d')。'。pdf');'允许你在那里和那里下载文件。把它改成 '$ html2pdf-> Output('directory/file_xxxx.pdf','F');'把它保存在服务器上。要创建一个唯一的名字,你可以在PHP中创建一个哈希字符串,并将其用作它的名字。将它保存在一个友好的下载位置,并在需要时将其提供给用户。 –

+0

你的代码是值得的,那么我期待的其他扩展。我已将pdf类放入模型文件夹中,并将函数actions()放置在我的控制器(A)和放置在控制器(A)的视图(A)中的pdf视图中的一个中。我知道我错了。我在这里得到一个错误,因为core.components.actions.Pdf指向现有的目录。我想我把代码放在错误的地方,你可以请指导我 – hir