2009-10-22 35 views
33

Tôi đang sử dụng TCPDF để tạo tệp PDF trong một trong các dự án của tôi. Tôi chỉ cần tạo một tệp HTML và đưa nó cho TCPDF để xử lý việc tạo PDF. Nhưng bây giờ tôi có một số HTML, nơi nhiều chứng chỉ được thêm vào sau khi khác và tôi muốn có một break trang trong nó. Ngắt trang phải được quyết định bằng HTML tức là tôi muốn biết nếu có bất kỳ số nhận dạng nào trong HTML mà TCPDF hiểu và sau đó cho biết thêm một ngắt trang vào tệp PDF được tạo.Ngắt trang thủ công trong TCPDF

Tôi làm cách nào để thực hiện việc này?

Trả lời

60

Tôi đang sử dụng <br pagebreak="true"/>.

Tìm phương pháp writeHTML và mã

if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) { 
    // check for pagebreak 
    if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) { 
     // add a page (or trig AcceptPageBreak() for multicolumn mode) 
     $this->checkPageBreak($this->PageBreakTrigger + 1); 
    } 
    if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) 
      OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { 
     // add a page (or trig AcceptPageBreak() for multicolumn mode) 
     $this->checkPageBreak($this->PageBreakTrigger + 1); 
    } 
} 
+6

Rực rỡ - công việc tuyệt vời - nắm bắt tuyệt vời trong mã! – JasonMichael

+0

nó là một cuộc sống tiết kiệm Amdy, nó thực sự giúp tôi tiết kiệm rất nhiều thời gian – atif

+0

Làm việc cho tôi quá! Cảm ơn –

15

Bạn có thể sử dụng AddPage TCPDF của() phương pháp kết hợp với explode() và một dấu phân cách phù hợp:

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

// TCPDF initialization code (...) 

$delimiter = '<h1>'; 
$html  = file_get_contents('./test.html'); 
$chunks = explode($delimiter, $html); 
$cnt  = count($chunks); 

for ($i = 0; $i < $cnt; $i++) { 
    $pdf->writeHTML($delimiter . $chunks[$i], true, 0, true, 0); 

    if ($i < $cnt - 1) { 
     $pdf->AddPage(); 
    } 
} 

// Reset pointer to the last page 
$pdf->lastPage(); 

// Close and output PDF document 
$pdf->Output('test.pdf', 'I'); 
+0

Nó hoạt động giống như một marc quyến rũ .......... tuyệt vời :-) – Fero

0

Bạn cũng có thể làm theo phương pháp này để đạt được nhu cầu của bạn:

$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE"; 

// output the HTML content 
$pdf->writeHTML($htmlcontent1, true, 0, true, 0); 

// reset pointer to the last page 
$pdf->lastPage(); 

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// Print a table 

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

$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE"; 

// output the HTML content 
$pdf->writeHTML($htmlcontent1, true, 0, true, 0); 
// reset pointer to the last page 
$pdf->lastPage(); 

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

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

Hy vọng điều đó sẽ giúp ai đó :)

Cảm ơn

7

TCPDF sự ủng hộ của pagebreak 'thuộc tính cho các thẻ HTML và CSS properties 'pagebreak-trước' và 'pagebreak sau'. Ví dụ: bạn có thể sử dụng <br pagebreak="true" />.

Kiểm tra trang web chính thức http://www.tcpdf.org và diễn đàn để biết thêm thông tin.

5

Với phiên bản 5.9.142 từ 2011-12-23 chúng ta có thể sử dụng các thuộc tính page-break-before, page-break-inside css, như thế này:

<div style="page-break-inside:avoid;"> 
some non breakable text 
</div> 
7

Tôi đã cố gắng sử dụng

<br pagebreak="true" /> 

hoặc

<tcpdf method="AddPage" /> 

mỗi người trong số họ không dẫn đến việc bắt đầu trang mới ở đầu trang nhưng thêm không gian trống toàn bộ trang A4 ở giữa văn bản HTML. Vì vậy, nếu văn bản kết thúc ở giữa trang và sau đó ngắt trang đã được chèn, văn bản mới được viết từ giữa trang tiếp theo. Mà tôi không muốn.

gì làm được điều này (tìm thấy nó ở đây TCPDF forcing a new page):

$pdf->writeHTML($content, true, 0, true, 0); 

$pdf->AddPage(); 
$pdf->setPage($pdf->getPage()); 

này bây giờ bắt đầu với viết văn bản trên đầu trang.

1

Theo http://www.tcpdf.org/examples/example_049.phps bạn có thể sử dụng một cái gì đó như thế này

$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>'; 

Bạn cần phải xác minh rằng tham số K_TCPDF_CALLS_IN_HTML trong tập tin cấu hình TCPDF là đúng.

-1

Sử dụng cho một trang web trong nội dung html.

+0

Thêm một số giải thích với câu trả lời cho cách câu trả lời này giúp OP trong việc khắc phục sự cố hiện tại –

0

Giving yếu tố của bạn page-break-after, page-break-before hoặc page-break-inside bất động sản thông qua CSS sẽ áp dụng các thuộc tính pagebreak hoặc pagebreakafter để thẻ html trong thời gian chạy TCPDF.

// page-break-inside 
if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) { 
    $dom[$key]['attribute']['nobr'] = 'true'; 
} 
// page-break-before 
if (isset($dom[$key]['style']['page-break-before'])) { 
    if ($dom[$key]['style']['page-break-before'] == 'always') { 
     $dom[$key]['attribute']['pagebreak'] = 'true'; 
    } elseif ($dom[$key]['style']['page-break-before'] == 'left') { 
     $dom[$key]['attribute']['pagebreak'] = 'left'; 
    } elseif ($dom[$key]['style']['page-break-before'] == 'right') { 
     $dom[$key]['attribute']['pagebreak'] = 'right'; 
    } 
} 
// page-break-after 
if (isset($dom[$key]['style']['page-break-after'])) { 
    if ($dom[$key]['style']['page-break-after'] == 'always') { 
     $dom[$key]['attribute']['pagebreakafter'] = 'true'; 
    } elseif ($dom[$key]['style']['page-break-after'] == 'left') { 
     $dom[$key]['attribute']['pagebreakafter'] = 'left'; 
    } elseif ($dom[$key]['style']['page-break-after'] == 'right') { 
     $dom[$key]['attribute']['pagebreakafter'] = 'right'; 
    } 
} 
Các vấn đề liên quan