Как распечатать визуал с нумерацией страниц в WPF? - PullRequest
3 голосов
/ 16 сентября 2010

У меня есть ScrollViewer и очень «длинный» контент.Я написал класс, который наследуется от DocumentPaginator, но я не понимаю, как мне создать «рамку» для каждой части этого Visual?Я имею в виду, как я "смотрю" на следующую страницу элемента управления?Я попробовал это, но безуспешно:

    public override DocumentPage GetPage(int pageNumber)
    {
        double left = pageNumber * pageSize.Width;
        Point pt = new Point(left, 0);

        visual.RenderTransform = Transform.Identity;
        visual.RenderTransform = new TranslateTransform(-left, 0);

        visual.Measure(pageSize);
        visual.Arrange(new Rect(visual.DesiredSize));

        DocumentPage page = new DocumentPage(visual);
        return page;
    }

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

1 Ответ

1 голос
/ 25 февраля 2011

DocumentPaginator довольно сложно. Вот несколько шагов, которые помогли мне правильно оценить размеры страниц и обеспечить отсутствие пустых страниц:

Переопределите два свойства IsPageCountValid и PageCount как:

    public override bool IsPageCountValid
    {
        get { return true; }
    }

и

public override int PageCount
{
    get
    {
        if (pageCount == 0)
        {
            this.ComputePageCount();
        }
        return pageCount;
    }
}

Используйте приватную функцию ComputePageCount для расчета размера страницы (разбивая вашу страницу на точное количество страниц в соответствии с указанным размером страницы).

Ключ ко всем вычислительным возможностям подсчета страниц, установленный здесь

IsPageCountValid = правда

, который всегда будет гарантировать, что Paginator использует ваши переопределенные методы для расчета количества страниц.

Один размер страницы можно указать, установив свойство DocumentPaginator.PageSize.

Учитывать все колонтитулы на каждой странице. В основном пустые / меньшие страницы являются результатом неправильных расчетов PageCount.

...