Предотвращение перекрытия нижнего колонтитула тела в mPDF

Я создаю PDF файлы, используя mPDF-библиотеку, а мой верхний и нижний колонтитулы меняются по размеру в зависимости от нескольких параметров.

Статическим решением было бы установить край нижнего колонтитула, который разрешит перекрытие - но поскольку нижний колонтитул может отличаться по размеру, это не решение, которое я чувствую, довольствуюсь. Есть ли способ получить размеры нижнего колонтитула и соответственно применить маржу?

Ответ 1

Проблема заключается в документации mpdf. Я думаю, что margin_footer и margin_header - это разница между телом документа и этими. Вместо этого margin_footer и margin_header - это поля документа, так как можно было бы подумать, что margin_top и margin_bottom будут.

Таким образом, изменение нижнего и верхнего полей будет определять, где начинается тело документа. И изменение поля заголовка/нижнего колонтитула будет определять границы печати. ​​

Надеюсь, что это поможет!

Обновленный ответ

Документация mPDF немного разряжена для вызова конструктора, я думаю. Аргумент margin_top/bottom фактически является полем содержимого и не применяется для аргументов margin_header/footer. (Если я правильно помню). Margin_top/bottom - абсолютный край от вершины документа и должен содержать высоту верхнего/нижнего колонтитула.

Вот правильный способ обработки полей:

/**
 * Create a new PDF document
 *
 * @param string $mode
 * @param string $format
 * @param int $font_size
 * @param string $font
 * @param int $margin_left
 * @param int $margin_right
 * @param int $margin_top (Margin between content and header, not to be mixed with margin_header - which is document margin)
 * @param int $margin_bottom (Margin between content and footer, not to be mixed with margin_footer - which is document margin)
 * @param int $margin_header
 * @param int $margin_footer
 * @param string $orientation (P, L)
 */
new mPDF($mode, $format, $font_size, $font, $margin_left, $margin_right, $margin_top, $margin_bottom, $margin_header, $margin_footer, $orientation);

Ответ 2

$mpdf->setAutoBottomMargin = 'stretch';

Работал для меня. Все, что я должен был сделать, это убедиться, что я включил опцию перед нижним колонтитулом.

Ответ 3

Это не сработало для меня, но мне удалось найти, как решить эту проблему. Все, что мне нужно было сделать, это установить нижний колонтитул перед любым содержанием. Это связано с тем, что вычисление высоты нижнего колонтитула выполняется перед любой обработкой содержимого. Но если вы добавите нижний колонтитул позже с помощью SetHTMLFooter, mPDF не пересчитает высоту нижнего колонтитула, поэтому он будет равен 0. Таким образом, не будет разрыва страницы, и содержимое будет перекрывать тело. Итак, окончательное решение было:

  1. Создайте объект mPDF с помощью 'setAutoBottomMargin' => 'stretch'
  2. Добавьте заголовок
  3. Добавьте нижний колонтитул
  4. Добавить контент

Надеюсь, это поможет.