没有保证金打印

时间:2012-03-12 20:49:45

标签: wpf printing

我正在尝试打印4英寸高,宽3英寸的WPF控件。

我在控件(ScaleTransform)上使用Canvas来相应地缩放它;但是,当我打印到打印机时,图像的一部分被切断(上边缘和左边缘)。

根据this thread

  

出现此问题的原因是打印机在纸张边缘周围提供了未打印的边距,但PrintDialog.PrintVisual方法打算打印到纸张边缘。因此,位于纸张边缘周围未打印边缘的区域将被剪裁。

线程未提及如何检索边距或如何强制打印机忽略这些边距。如何获取这些值,以便我可以使用WPF进行打印而不进行裁剪?

1 个答案:

答案 0 :(得分:5)

您需要将PrintDocumentImageableArea的信息与Measure上的ArrangeUIElement成员合并:

// I could not find another way to change the margins other than the dialog
var result = printDialog.ShowDialog();
if (result.HasValue && result.Value)
{
    var queue = printDialog.PrintQueue;

    // Contains extents and offsets
    var area = queue.GetPrintCapabilities(printDialog.PrintTicket)
                    .PageImageableArea;

    // scale = area.ExtentWidth and area.ExtentHeight and your UIElement's bounds
    // margin = area.OriginWidth and area.OriginHeight
    // 1. Use the scale in your ScaleTransform
    // 2. Use the margin and extent information to Measure and Arrange
    // 3. Print the visual
}