我使用TCPDF和大量的writeHTML()調用生成PDF。有時,當我在HTML中使用標題標籤(h1,h2等)時,標題位於頁面的底部,相應的內容被分解並推送到下一頁。TCPDF - 保留帶有內容的h1,h2等標籤
有什麼辦法讓TCPDF有1)讓頭文件「保留」下面的內容,或者2)如果有一些百分比(比如20%)或更少,頭標(只有頭文件)被推送到下一頁的頁面空間是否可用?
我試圖分手的HTML,但最終傳遞未封閉的標籤寫入HTML()和它死了。
我使用TCPDF和大量的writeHTML()調用生成PDF。有時,當我在HTML中使用標題標籤(h1,h2等)時,標題位於頁面的底部,相應的內容被分解並推送到下一頁。TCPDF - 保留帶有內容的h1,h2等標籤
有什麼辦法讓TCPDF有1)讓頭文件「保留」下面的內容,或者2)如果有一些百分比(比如20%)或更少,頭標(只有頭文件)被推送到下一頁的頁面空間是否可用?
我試圖分手的HTML,但最終傳遞未封閉的標籤寫入HTML()和它死了。
我實現了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);
有一個函數AcceptPageBreak()
每當分頁符條件被測試時被調用。有可能爲這個函數編寫某種形式的覆蓋,當涉及頭部時,可以在較高的底部邊緣激活。
雖然這將需要知道何時涉及標題。在操作過程中對openHTMLTagHandler()
函數進行入侵監視頭標籤可能會允許這樣做。
或者,如果您可以拆分HTML,如果您使用HTML解析器,這應該不會太難,然後使用writeHTMLCell()
來輸出給定的部分將導致整個單元格被移動到下一頁if在此期間出現分頁條件。
重寫'AcceptPageBreak()'是好的,但黑客的功能是沒有的。 :( – feedbackloop
我發現了另一個半黑客的解決方案,但我會在發佈之前給幾天,以確保沒有任何更好的解決方案。 – feedbackloop
@feedbackloop:TCPDF類被設計爲擴展,所以當我說「黑客」,我的意思是稍微凌亂一些。 – Orbling