TCPDF - сохраняйте теги h1, h2 и т. Д. С содержимым - PullRequest
2 голосов
/ 06 июля 2011

Я генерирую PDF, используя TCPDF и множество вызовов writeHTML ().Иногда, когда у меня есть теги заголовка (h1, h2 и т. Д.) В HTML, заголовки располагаются внизу страницы, и соответствующий контент разбивается и перемещается на следующую страницу.

Есть ли какие-либоспособ использовать TCPDF: 1) Есть ли заголовок «держать в курсе» следующего содержимого, или 2) Переместить заголовки (и только заголовки) на следующую страницу, если доступно несколько процентов (скажем, 20%) или меньше пространства страницы?

Я пытался разбить HTML, но в итоге передал незаписанные теги writeHTML (), и он умер.

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

Я реализовал решение 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 голосов
/ 06 июля 2011

Существует функция AcceptPageBreak(), которая вызывается всякий раз, когда проверяется условие разрыва страницы. Может быть возможно написать некоторую форму переопределения для этой функции, которая активируется с более высоким нижним полем, когда задействованы заголовки, чем нет.

Хотя для этого потребуется знать, когда был задействован заголовок. Хакерская функция openHTMLTagHandler() для отслеживания тегов заголовков во время операции может позволить это.

В качестве альтернативы, если вы можете разбить HTML, что не должно быть слишком сложно, если вы используете парсер HTML, тогда использование writeHTMLCell() для вывода данного раздела приведет к тому, что вся ячейка будет переходит на следующую страницу, если во время нее возникло условие разрыва страницы.

...