在WPF中打印虚线是错误的吗?

时间:2017-03-13 11:58:06

标签: c# wpf printing lines

虚线具有不同的破折号,具体取决于打印机的分辨率。为什么dpi不是独立的?我该如何解决?

var line = new Line();
line.Stroke = Brushes.Black;
line.StrokeThickness = 1;
line.X1 = line.Y1 = 100;
line.X2 = line.Y2 = 200;
line.StrokeDashArray = new DoubleCollection(new[] { 8.0 });

var dialog = new PrintDialog();

if (dialog.ShowDialog() == true)
{
    Size pageSize = new Size(
        dialog.PrintableAreaWidth,  dialog.PrintableAreaHeight);

    line.Measure(pageSize);
    line.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height));

    dialog.PrintVisual(line, "description");
}

我使用了 PrintVisual ,但您可以使用虚线创建FixedDocument并使用 PrintDocument 。结果将是相同的。

1 个答案:

答案 0 :(得分:0)

WPF固有地响应DPI更改,几乎每个控件(除非另有说明)都是矢量图形 - 我希望您的打印机足够智能来解释这些矢量图形,而不是打印屏幕上的内容转储

根据我对WPF的经验,至少有两个选择:

选项1 - 创建位图并打印它 您可以将WPF控件捕获为位图对象,使用RenderTargetBitmap完全不知道DPI,然后正常打印它们。值得注意的是,生成的位图将根据显示分辨率/系统的缩放而在&你想要作为位图捕获的任何内容必须在屏幕上可见(而不是在滚动框中的屏幕外等)。

选项2 - 让您的应用DPI不知情 您可能不想使用此选项,因为它会阻止在高分辨率显示器上进行缩放(可能有一种方法可以暂时实现打印,但是您的打印机可能会忽略此选项,因为它更多一个UI的东西,我目前无法测试它,但总共有several ways to prevent your app from acknowledging DPI

我不完全确定这些选项能够正常运行,因为我目前无法对它们进行测试。如果可以的话,我会将此作为评论发布。祝你好运!