2014-06-10 3 views
1

방금 ​​dompdf-0.6.1을 다운로드했으며 내 CakePHP 2.0.5 응용 프로그램에서 사용하고 싶습니다.Dompdf를 사용하여 CakePHP 2 페이지 .pdf보기

routes.php에 Router::parseExtensions('json', 'pdf');을 포함 시켰고 app ->보기 -> 레이아웃에서 default.ctp를 만들었습니다.

<?php 

require_once(APP . 'Vendor' . DS . 'dompdf' . DS . 'dompdf_config.inc.php'); 
spl_autoload_register('DOMPDF_autoload'); 
$dompdf = new DOMPDF(); 
$dompdf->set_paper = 'A4'; 
$dompdf->load_html(utf8_decode($content_for_layout), Configure::read('App.encoding')); 
$dompdf->render(); 
echo $dompdf->output(); 

사용자가 소득 계산서를 .pdf 파일로 볼 수있게하고 싶습니다. 인쇄 할 수 있습니다. 손익 계산서에는 생성을 위해 startDate 및 endDate의 매개 변수가 사용됩니다.

아래 파일은 income_statement.ctp입니다. 사용자가 브라우저 페이지에서 링크를 눌러서 .pdf로 본문을 볼 수있게하려면 어떻게해야합니까?

.......some code...... 

<div style="text-align: center"> 

     <h1><?php echo $this->Session->read("Business.name"); ?><br>Income Statement</h1> 
     <h3> 
      For period starting <?php echo $startDate; ?> to <?php echo $endDate; ?> 
     </h3> 
     <table align="center" width="400px;"> 
      <tr> 
       <th style="text-align: left;" colspan="2">Revenue</td> 
      </tr> 
      ........code......... 
       <td style="text-align: left;"> 
        <?php 
        $space = "&nbsp;"; 
        for ($i = 0; $i < 12; $i++) 
         echo $space; 
        ?> 
        <b>Total Operating Expenses</b> 
       </td> 
       <td style="text-align: right;"><b><?php echo number_format($totalExpenses + $saleDiscount, 2); ?></b></td> 
      </tr> 
      <tr> 
       <th style="text-align: right"><?php echo $totalDescription; ?></th> 
       <th style="text-align: right"><?php echo number_format($net, 2); ?></th> 
      </tr> 
     </table>  

    ....Link for view as pdf..... 
    </div> 

답변

1

당신은 실제 파일과 PDF 파일을 저장 한 다음에 (site.com/pdf/filename.pdf 링크) 링크 할 수 있습니다 : 당신은 그냥 에코 할 수

public function action() { 
    $view = new View(null, false); 
    $view->set(compact('variable1', 'variable2')); 
    $view->viewPath = 'Folder'; 
    $output = $view->render('income_statement', 'layout'); 

    spl_autoload_register('DOMPDF_autoload'); 
    $dompdf = new DOMPDF(); 
    $dompdf->set_paper = 'A4'; 
    $dompdf->load_html(utf8_decode($output), Configure::read('App.encoding')); 
    $dompdf->render(); 
    file_put_contents(APP . 'webroot' . DS . 'pdf' . DS .'filename.pdf'); 
} 

를 또는 무엇을 $ dompdf가 렌더링에서 반환되고 페이지의 헤더 만 변경됩니다 (site.com/controller/action.pdf 링크).

public function action() { 
    $this->layout = $this->autoRender = false; 
    $this->response->header(array('Content-type' => 'application/pdf')); 

    //Code for generating pdf data similar to above 

    echo $dompdf->render(); 
} 
+0

답장을 보내 주셔서 감사합니다. 질문 : 컨트롤러에 기능을 추가합니다 ... pdf는 html보기와 동일한 형식을 갖습니까 (이전에는 dompdf를 사용하지 않았습니까)? 배열 설명 ('Content-type'=> 'application/pdf'). –

+0

"Explain array ("Content-type "=>"application/pdf ");"에 대한 헤더 설정과 관련한 CakePHP 요리 책을 읽으십시오. http://book.cakephp.org/2.0/en/controllers/request-response.html#setting-headers 아직 알고 있지 않다면 HTTP 응답에는 브라우저가 표시해야하는 많은 정보를 정의하는 헤더가 포함되어 있습니다. 콘텐트 유형을 pdf로 변경하면 브라우저는 pdf를 표시/다운로드하려고 시도합니다. – Kai

+0

"pdf도 html보기와 동일한 형식을 유지합니까?" 예. 동일한 레이아웃,보기 파일 등을 사용하도록 말한 한 DomPDF를 사용할 때. 내 코드는 실제로 CakePHP의 자동 렌더링 기능을 우회하고 뷰에서 수동으로 렌더링을 호출하므로 출력에서 ​​변수를 캡처 할 수 있습니다. 당신은 항상 DomPDf를 그렇게 할 필요는 없지만, 당신이하려고하는 것에 따라, 때로는 할 수 있거나, 또는 적어도 더 쉽게 만들 수 있습니다. – Kai

관련 문제