Ответ 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);