2011-07-05 60 views
2

我使用TCPDF和大量的writeHTML()調用生成PDF。有時,當我在HTML中使用標題標籤(h1,h2等)時,標題位於頁面的底部,相應的內容被分解並推送到下一頁。TCPDF - 保留帶有內容的h1,h2等標籤

有什麼辦法讓TCPDF有1)讓頭文件「保留」下面的內容,或者2)如果有一些百分比(比如20%)或更少,頭標(只有頭文件)被推送到下一頁的頁面空間是否可用?

我試圖分手的HTML,但最終傳遞未封閉的標籤寫入HTML()和它死了。

回答

0

我實現了Orbling的解決方案,但無法完成它的工作。鑑於此,目前我會發布我的工作,但更棘手的解決方案,並嘗試返回到Orbling的,如果我找到時間。我會堅持接受幾天的答案。

我的基本方法是替換所有h1-h6標籤(使用正則表達式),並將它們預先加上<tcpdf method="MaybeSkipPage" />,我通過擴展TCPDF類來實現它們。

在代碼:

class MyPDF extends TCPDF { 
    public function MaybeSkipPage() { 
    if ($this->y > 0.75*$this->getPageHeight()) { 
     $this->AddPage(); 
    } 
    } 
} 

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

$HTMLcontent = preg_replace('/(<[h|H][1-6])/', '<tcpdf method="MaybeSkipPage" />$1', $HTMLcontent); 
0

有一個函數AcceptPageBreak()每當分頁符條件被測試時被調用。有可能爲這個函數編寫某種形式的覆蓋,當涉及頭部時,可以在較高的底部邊緣激活。

雖然這將需要知道何時涉及標題。在操作過程中對openHTMLTagHandler()函數進行入侵監視頭標籤可能會允許這樣做。

或者,如果您可以拆分HTML,如果您使用HTML解析器,這應該不會太難,然後使用writeHTMLCell()來輸出給定的部分將導致整個單元格被移動到下一頁if在此期間出現分頁條件。

+0

重寫'AcceptPageBreak()'是好的,但黑客的功能是沒有的。 :( – feedbackloop

+0

我發現了另一個半黑客的解決方案,但我會在發佈之前給幾天,以確保沒有任何更好的解決方案。 – feedbackloop

+0

@feedbackloop:TCPDF類被設計爲擴展,所以當我說「黑客」,我的意思是稍微凌亂一些。 – Orbling