Как сохранить текст / данные от наложения фиксированного нижнего колонтитула при печати? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать кучу pdf отчетов с динамическими данными, используя spatie / browsershot, и мне нужно сохранить нижний колонтитул ( position: fixed ) на всех страницах.

Проблема в том, чтово многих случаях текст переполняет документ и попадает в нижний колонтитул.Допустим, что страница в 280 мм и нижний колонтитул 40 мм, мне нужен способ запретить пересечение содержимого страницы 240 мм.Я пробовал несколько способов, используя вычисленную высоту и вершину элемента DOM и добавляя поля, основанные на позиции элемента в документе.Но ни один из них не работал идеально.

   // for one page break i.e. added margin, on each page
   var pageBreakAdded = 0;

   Array.from(document.getElementsByClassName('do-not-overlap')).forEach(function(el){

    var dims = el.getBoundingClientRect();
    var top = dims.top;
    var height = dims.height;

    var elementEndsAt = top + height;

    // assuming page breaks at 1500px 
    if(top < 1500){
        if(elementEndsAt > 1440 && pageBreakAdded < 1440){
            pageBreakAdded = 1440;
            addMarginBottom(el, 1500 - top);
        }
    }else if(top < 3000){
        if(elementEndsAt > 2940 && pageBreakAdded < 2940){
            pageBreakAdded = 2940;
            addMarginBottom(el, 3000 - (top));
        }
    }else if(top < 4500){
        if(elementEndsAt > 4440 && pageBreakAdded < 4440){
            pageBreakAdded = 4440;
            addMarginBottom(el, 4500 - (top));
        }
    }else if(top < 6000){
        if(elementEndsAt > 5940 && pageBreakAdded < 5940){
            pageBreakAdded = 5940;
            addMarginBottom(el, 6000 - (top));
        }
    }
   });

Это код, который я использовал для расчета позиций и добавления полей.Что здесь не так?Любые другие подходы?Могу ли я вставить контент в поле @page?Что-нибудь?

PS Не могу изменить все CSS px на mm, что было бы слишком большим изменением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...