我正在尝试打印4英寸高,宽3英寸的WPF控件。
我在控件(ScaleTransform
)上使用Canvas
来相应地缩放它;但是,当我打印到打印机时,图像的一部分被切断(上边缘和左边缘)。
根据this thread:
出现此问题的原因是打印机在纸张边缘周围提供了未打印的边距,但
PrintDialog.PrintVisual
方法打算打印到纸张边缘。因此,位于纸张边缘周围未打印边缘的区域将被剪裁。
线程未提及如何检索边距或如何强制打印机忽略这些边距。如何获取这些值,以便我可以使用WPF进行打印而不进行裁剪?
答案 0 :(得分:5)
您需要将PrintDocumentImageableArea
的信息与Measure
上的Arrange
和UIElement
成员合并:
// 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
}