2014-09-30 3 views
2

TCPDF 라이브러리를 사용하여 PDF를 생성하려고합니다. 지금까지 PHP 코드를 사용하여 PDF 파일을 생성 할 수있었습니다. 외부 CSS를 렌더링하지 않고 CSS가 없으면 결과를 쓸모 없게 만들지 만 문서를 읽을 수는 없습니다.TCPDF가 외부 CSS를 렌더링하지 않습니다

public function generate_pdf() { 

     $this->load->model('rosters', 'roster'); 

     $data = array(); 

     $data['start_date'] = isset($_POST['fortnightStartDate']) ? 
      date("Y-m-d", strtotime(getFortnightStartDate($_POST['fortnightStartDate']))) : 
      getFortnightStartDate(); 
     $cid = $_POST['cid']; 
     $wno = $_POST['wno']; 


     $data['no']=$wno; 

     $startDate = strtotime($data['start_date']); 

     $data['schedule'] = $this->roster->getShifts($cid, $data); 

     $data['startDate'] = $startDate; 


     $listing = $this->load->view('roster/roster_pdf', $data, true); 


     /** 
* Creates an example PDF TEST document using TCPDF 
* @package com.tecnick.tcpdf 
* @abstract TCPDF - Example: XHTML + CSS 
* @author Nicola Asuni 
* @since 2010-05-25 
*/ 

// Include the main TCPDF library (search for installation path). 
require_once(APPPATH.'libraries/tcpdf/tcpdf.php'); 

// create new PDF document 
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

// set document information 
$pdf->SetCreator(PDF_CREATOR); 
$pdf->SetAuthor('Nicola Asuni'); 
$pdf->SetTitle('TCPDF Example 061'); 
$pdf->SetSubject('TCPDF Tutorial'); 
$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); 

// set default header data 
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING); 

// set header and footer fonts 
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 

// set default monospaced font 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 

// set margins 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 

// set auto page breaks 
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 

// set image scale factor 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 

// set some language-dependent strings (optional) 
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { 
    require_once(dirname(__FILE__).'/lang/eng.php'); 
    $pdf->setLanguageArray($l); 
} 

// --------------------------------------------------------- 

// set font 
$pdf->SetFont('helvetica', '', 10); 

// add a page 
$pdf->AddPage(); 


$pdf->writeHTML($listing, true, false, true, false, ''); 

//Close and output PDF document 
$pdf->Output('TEST.pdf', 'F'); 

    } 

나는 PDF에 포함 할 필요가있는 데이터를 보유하고있는 $listing 변수를 전달하고있다 : 다음

컨트롤러에 내 코드입니다. 데이터가 잘 인쇄되지만 CSS가 없습니다. 외부 CSS를 포함 시키려고하면 오류가 발생합니다. 다른 방법이 내가 할 수 있나요

A PHP Error was encountered 

Severity: Warning 

Message: array_merge(): Argument #2 is not an array 

Filename: tcpdf/tcpdf.php 

Line Number: 16375 

:

코드는 내가 변수 $listing 아래의 코드 줄을 포함하려고하지만 오류 다음 생성 외부 CSS

$listing. = '<style>'.file_get_contents(base_url("styles/style.css")).'</style>'; 

을 포함하는 외부 CSS를로드 ?? 도움이 될 것입니다.

답변

4

여기를 계속 검토 한 결과, TCPDF 라이브러리에는 CSS 제한을 포함하여 몇 가지 제한 사항이 있으며 많은 CSS 속성을 지원하지 않는다는 것을 알게되었습니다. 그런 다음 dompdf 라이브러리를 살펴보면 유용하다고 생각했습니다. 놀랍게도 거의 비슷한 코드로 모든 문제를 해결했으며 TCPDF보다 사용하기가 쉽습니다. 난 내 문제를 해결하기 위해 쓴 코드 내 조각이되어 다음 (코드는 $listing 변수가 다음 단순히 라이브러리 코드를 변경할 때까지 비슷합니다.)

$listing .= '<style>'.file_get_contents(base_url("styles/style.css")).'</style>'; 


     require_once(APPPATH.'libraries/dompdf/dompdf_config.inc.php'); 

     $dompdf = new DOMPDF(); 
     $dompdf->load_html($listing); 
     $dompdf->set_paper('a4', 'landscape'); 
     $dompdf->render(); 

     file_put_contents('my_pdf_test.pdf', $dompdf->output()); 
     //$dompdf->stream("dompdf_out.pdf", array("Attachment" => true)); 
     exit(0); 
+0

DOMPDF 당신을 위해 느린가요? –

+1

DOMPDF는 불행히도 매우 느립니다. 작은 문서의 경우 훌륭하지만, 몇 페이지 이상 렌더링하려는 경우 매우 느려지거나 완전히 실패합니다 (특히 페이지 스패닝 HTML 테이블을 사용하는 경우). – JoeP

관련 문제