代码之家  ›  专栏  ›  技术社区  ›  Andrew Bullock

wpf documentpaginator和documentpage意外裁剪

  •  4
  • Andrew Bullock  · 技术社区  · 14 年前

    我正在尝试在多页上打印WPF画布。

    我非常乐意将其缩放到适合页面宽度,然后剪切和翻译每页的画布;所有这些都是非常简单的数学。

    我不明白的是如何获得可打印区域的尺寸,以及如何告诉打印机打印到哪里。无论我尝试什么,我使用的值都是纸张的大小,因此当打印机无法直接打印到纸张边缘时,就会出现裁剪。

    var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket);
    

    功能具有以下属性:

    capabilities.PageImageableArea.ExtentWidth
    // "Gets the width of the imageable area"
    

    什么是“可成像”区域?那是纸上我可以放内容的地方吗?我想是因为:

    capabilities.PageImageableArea.OriginWidth
    // Gets the distance from the left edge of the page to the imageable area.
    

    但是,下页边距和右页边距呢?我在哪里可以找到这些信息?

    应该怎样 PageSize DocumentPaginator 准备好了吗?我应该把这个从 capabilities.PageImageableArea ?或者做 dialog.Print() 函数设置这个,我只需要在 GetPage() ?

    最后,当我返回 DocumentPage ,我要传递给三个几何参数什么? pageSize , bleedBox contentBox ?

    谢谢)

    2 回复  |  直到 14 年前
        1
  •  4
  •   Andrew Bullock    14 年前

    好的,似乎打印总是从 (0, 0) (左上角)纸张。

    获取纸张大小:

    printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight
    

    上下页边距:

    var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
    printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight
    

    我假设底部和右侧的边缘与顶部和左侧相同,尽管这可能不安全。

    你必须像往常一样缩放和裁剪画布,然后应用 TranslateTransform 将内容移到可打印区域的页边距大小。

        2
  •  1
  •   Blounty    14 年前

    你看过使用流程文档而不是只打印画布吗?有一个创建和打印的好例子 Here .

    希望这会否定很多数学的必要性。