2014-02-28 39 views
0

可以任何人指導我。我不知道如何繼續前進。事情是我有描述,圖像作爲字段的table1用戶A登錄儘快,用戶A創建此記錄與decitpion和圖像字段我想要生成一個PDF文件的圖像和解除以及提供登錄下載PDF文件時用戶B的下載鏈接。可以從數據庫中生成pdf文件yii

我需要知道被從DB數據生成可以將PDF文件正在使用警予

我的問題如下

這可能嗎? 如果沒有什麼更好的建議?如果可能的話, 是他們的任何擴展名。 任何人都可以提供一些指導。

請讓我知道我這樣做的第一次,但不知道如何對

回答

1

很可能是隨身攜帶。我不使用擴展名我使用名爲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

相關問題