2013-06-19 28 views
8

Tôi đang sử dụng thư viện Zend Framework và DOMPDF. Khi tôi kiểm tra nó với css nội tuyến, mọi thứ hoạt động hoàn hảo. Nhưng khi tôi cố gắng di chuyển mã css vào các quy tắc tệp bên ngoài không được áp dụng cho trang html.DOMPDF không hoạt động với tệp css bên ngoài

Đây là mã của tôi.

  1. Mã của hành động điều khiển, mà tạo pdf

require_once ("DOMPDF/dompdf_config.inc.php");

$this->_helper->layout->disableLayout(); 

    $html = $this->view->render('index/dom.phtml'); 

    $dompdf = new DOMPDF(); 
    $dompdf->load_html($html); 
    $dompdf->render(); 

    $pdfContent = $dompdf->output(); 

    file_put_contents('sample.pdf', $pdfContent); 

    die("test"); 

2.Code của tương ứng view (index/dom.phtml)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <link type="text/css" href="/themes/css/pdf.css" rel="stylesheet" media="screen"/> 

</head> 
<body> 
    <div>Tamara testing</div> 
    <table border="1"> 
     <tr> 
      <th>Column 1</th> 
      <th>Column 2</th> 
     </tr> 
     <tr> 
      <td>Value 1</td> 
      <td>Value 2</td> 
     </tr> 
    </table> 
</body> 

</html> 

3.And tập tin css của tôi:

div {color: red;} 

Làm thế nào để làm cho nó hoạt động?

UPDATE:

Để làm cho nó hoạt động tôi đã thay đổi những điều sau đây:

1.In controller action của thêm đường cơ sở cho các tập tin bên ngoài

$dompdf->set_base_path(APPLICATION_PATH."/../public/themes/css/"); 

2.In xem sự thay đổi href thuộc tính của thẻ liên kết. Làm cho nó liên quan đến con đường cơ bản trong bước 1.

<link type="text/css" href="pdf.css" rel="stylesheet" /> 
+0

Trong trường hợp ai đó tìm thấy điều này trên một công cụ tìm kiếm (giống như tôi đã làm), xin lưu ý có một tùy chọn khác gọi là 'DOMPDF :: set_protocol()', xem câu trả lời của tôi bên dưới để biết thêm thông tin. –

Trả lời

9

này trên thực tế không có gì để làm với Zend Framework, nhưng bạn cần phải cung cấp DOMPDF con đường đúng đắn để tải các tập tin "bên ngoài" từ.

$dompdf = new DOMPDF(); 
$dompdf->set_base_path(realpath(APPLICATION_PATH . '/path/to/css/')); 
$dompdf->load_html($html); 
$dompdf->render(); 

Xem thêm manual của DomPDF cho tính năng này.

5

@Jurian Sluiman đang đi đúng hướng, mặc dù câu trả lời của anh ấy không giúp tôi.

tôi phải dành chút thời gian để tìm ra các giải pháp mà làm việc cho tôi, được sử dụng DOMPDF::set_protocol():

$dompdf->set_protocol(WWW_ROOT); 
$dompdf->set_base_path('/'); 

WWW_ROOT đây là một trỏ CakePHP constant vào thư mục webroot của ứng dụng của tôi. Lưu ý rằng nó có dấu gạch chéo.

Phần tốt nhất là điều này có vẻ như việc sử dụng không đúng cách set_protocol(). Nhưng tôi ổn với điều đó miễn là nó làm cho CSS hoạt động.

Hy vọng điều này giúp tiết kiệm một ai đó vài giờ khác thời gian.

Các vấn đề liên quan