虚线具有不同的破折号,具体取决于打印机的分辨率。为什么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 。结果将是相同的。
答案 0 :(得分:0)
WPF固有地响应DPI更改,几乎每个控件(除非另有说明)都是矢量图形 - 我希望您的打印机足够智能来解释这些矢量图形,而不是打印屏幕上的内容转储
根据我对WPF的经验,至少有两个选择:
选项1 - 创建位图并打印它 您可以将WPF控件捕获为位图对象,使用RenderTargetBitmap完全不知道DPI,然后正常打印它们。值得注意的是,生成的位图将根据显示分辨率/系统的缩放而在&你想要作为位图捕获的任何内容必须在屏幕上可见(而不是在滚动框中的屏幕外等)。
选项2 - 让您的应用DPI不知情 您可能不想使用此选项,因为它会阻止在高分辨率显示器上进行缩放(可能有一种方法可以暂时实现打印,但是您的打印机可能会忽略此选项,因为它更多一个UI的东西,我目前无法测试它,但总共有several ways to prevent your app from acknowledging DPI。
我不完全确定这些选项能够正常运行,因为我目前无法对它们进行测试。如果可以的话,我会将此作为评论发布。祝你好运!