【问题标题】:How to print a Visual with pagination in WPF?如何在 WPF 中打印带有分页的视觉对象?
【发布时间】:2010-09-16 13:12:28
【问题描述】:

我有一个 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;
    }

有了这段代码,我得到了第一页,第二页和第一页一模一样,其余的页面都是空白的。

【问题讨论】:

    标签: wpf printing pagination


    【解决方案1】:

    DocumentPaginator 非常棘手。以下是帮助我正确估计页面大小并确保没有空白页出现的几个步骤:

    IsPageCountValidPageCount 这两个属性覆盖为:

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

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

    使用私有函数 ComputePageCount 进行页面大小计算(根据指定的单个 pageSize 将页面分解为确切的页面数)。

    这里设置所有页数计算能力的关键

    IsPageCountValid = 真

    这将始终确保分页器使用您覆盖的方法来计算页数。

    可以通过设置 DocumentPaginator.PageSize 属性来指定单个页面大小。

    考虑每个页面中的所有页眉/页脚。大多数空白/较少页面是错误的 PageCount 计算的结果。

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多