Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php TCPDF-保留h1、h2等带有内容的标签_Php_Tcpdf - Fatal编程技术网

Php TCPDF-保留h1、h2等带有内容的标签

Php TCPDF-保留h1、h2等带有内容的标签,php,tcpdf,Php,Tcpdf,我正在使用TCPDF和大量writeHTML()调用生成PDF。有时,当我在HTML中有标题标记(h1、h2等)时,标题位于页面底部,相应的内容被分解并推送到下一页 有没有办法让TCPDF 1)让标题“保留”以下内容,或者2)如果有百分之二十(比如20%)或更少的页面空间可用,让标题(并且只有标题)推送到下一页 我曾尝试分解HTML,但最终将未关闭的标记传递给writeHTML(),它就死了。有一个函数在测试分页符条件时调用。可能会为此函数编写某种形式的重写,当涉及到标题时,该函数会以较高的底部

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

有没有办法让TCPDF 1)让标题“保留”以下内容,或者2)如果有百分之二十(比如20%)或更少的页面空间可用,让标题(并且只有标题)推送到下一页

我曾尝试分解HTML,但最终将未关闭的标记传递给writeHTML(),它就死了。

有一个函数在测试分页符条件时调用。可能会为此函数编写某种形式的重写,当涉及到标题时,该函数会以较高的底部边距激活

尽管这需要知道何时涉及头。在操作过程中,通过黑客攻击监视标题标记的功能可能会允许这样做

或者,如果您可以分解HTML(如果您使用HTML解析器,这应该不会太难),那么使用输出给定的节将导致整个单元格移动到下一页(如果在此期间出现分页符条件)。

在测试分页符条件时,会调用一个函数。可能会为此函数编写某种形式的重写,当涉及到标题时,该函数会以较高的底部边距激活

尽管这需要知道何时涉及头。在操作过程中,通过黑客攻击监视标题标记的功能可能会允许这样做


或者,如果您可以分解HTML(如果使用HTML解析器,这应该不会太难),那么使用输出给定的节将导致整个单元格移动到下一页(如果在此期间发生分页符情况)。

我实现了Orbling的解决方案,但无法完全使其工作。考虑到这一点,目前我将发布我的工作,但更为粗糙的解决方案,如果我有时间的话,尝试返回Orbling's。我会在几天内坚持接受任何一个答案

我的基本方法是替换所有h1-h6标记(使用正则表达式),并用
预先编写它们,这是我通过扩展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);
classmypdf扩展了TCPDF{
公共功能可能是{
如果($this->y>0.75*$this->getPageHeight()){
$this->AddPage();
}
}
}
$pdf=新的MyPDF(pdf页面方向、pdf单元、pdf页面格式,真、'UTF-8',假);

$HTMLcontent=preg_replace('/(我实现了Orbling的解决方案,但无法完全让它工作。鉴于此,目前我将发布我的工作,但更黑客的解决方案,如果我有时间,尝试返回Orbling的解决方案。我将在几天内坚持接受任何一个答案

我的基本方法是替换所有h1-h6标记(使用正则表达式),并用
预先编写它们,这是我通过扩展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);
classmypdf扩展了TCPDF{
公共功能可能是{
如果($this->y>0.75*$this->getPageHeight()){
$this->AddPage();
}
}
}
$pdf=新的MyPDF(pdf页面方向、pdf单元、pdf页面格式,真、'UTF-8',假);

$HTMLcontent=preg_replace('/(重写
AcceptPageBreak()
是可以的,但对函数进行黑客攻击是不行的。:(我找到了另一个半黑客式的解决方案,但我会在发布它之前给几天时间,以确保没有更好的解决方案。@feedbackloop:TCPDF类是为扩展而设计的,所以当我说“黑客”时,我只是指一个稍微混乱的覆盖。覆盖
AcceptPageBreak()
是可以的,但对函数进行黑客攻击是不行的。:(我找到了另一个半黑客式的解决方案,但我会在发布它之前给几天时间,以确保没有更好的解决方案。@feedbackloop:TCPDF类是为了扩展而设计的,所以当我说“黑客”,我只是指稍微混乱一点的覆盖。