【问题标题】:TCPDF - Keep h1, h2, etc. tags with contentTCPDF - 将 h1、h2 等标签与内容一起保存
【发布时间】:2011-09-29 05:33:43
【问题描述】:

我正在使用 TCPDF 和大量 writeHTML() 调用生成 PDF。有时当我在 HTML 中有标题标签(h1、h2 等)时,标题位于页面底部,相应的内容被分解并推送到下一页。

有什么方法可以让 TCPDF 1) 让标题“保留”以下内容,或者 2) 如果某个百分比(例如 20%)或更少,则将标题(并且只有标题)推送到下一页页面空间可用?

我尝试过分解 HTML,但最终将未关闭的标签传递给 writeHTML() 并且它死了。

【问题讨论】:

    标签: php tcpdf


    【解决方案1】:

    有一个函数AcceptPageBreak() 在测试分页条件时被调用。可以为这个函数编写某种形式的覆盖,当涉及到标题时,它会在更高的底部边距处激活。

    虽然这需要知道何时涉及标头。在操作期间破解 openHTMLTagHandler() 函数来监控标头标签可能会允许这样做。

    或者,如果你可以分解 HTML,如果你使用 HTML 解析器应该不会太难,那么使用writeHTMLCell() 输出给定的部分会导致整个单元格被转移到下一页,如果在此期间发生了分页条件。

    【讨论】:

    • 覆盖AcceptPageBreak() 是可以的,但破解一个函数是不行的。 :(
    • 我找到了另一个半骇人听闻的解决方案,但我会在发布之前等待几天,以确保没有更好的解决方案。
    • @feedbackloop:TCPDF 类被设计为可扩展的,所以当我说“hacking”时,我只是指稍微混乱的覆盖。
    【解决方案2】:

    我实施了 Orbling 的解决方案,但无法完全发挥作用。鉴于此,目前我将发布我的工作,但更骇人听闻的解决方案,如果我有时间,请尝试返回 Orbling's。我会坚持几天接受任何一个答案。

    我的基本方法是替换所有 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2010-11-12
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多