gpt4 book ai didi

wpf - 以横向打印 WPF 视觉对象,打印机仍以纵向尺寸进行剪辑

转载 作者:行者123 更新时间:2023-12-03 07:40:21 25 4
gpt4 key购买 nike

我编写了一个小应用程序,它以编程方式创建视觉效果,并且我正在尝试将其以横向方式打印在页面上(它以纵向方式剪辑)。当我打印时,它确实以横向打印,但我的视觉效果仍然被剪裁,因为它仅限于纵向。

这是我的代码:

StackPanel page = new StackPanel();
// ... generate stuff to the page to create the visual

PrintDialog dialog = new PrintDialog(); // System.Windows.Controls.PrintDialog
bool? result = dialog.ShowDialog();
if(result.HasValue && result.Value)
{
dialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
Size pageSize = new Size { Width = dialog.PrintableAreaWidth,
Height = dialog.PrintableAreaHeight };
// pageSize comes out to {1056, 816}, which is the orientation I expect
page.Measure(pageSize);
// after this, page.DesiredSize is e.g. {944, 657}, wider than portrait (816).
page.UpdateLayout();
dialog.PrintVisual(page, "Job description");
}

执行此操作后,打印的内容排列正确,但似乎仍然被裁剪为 816 的宽度,切断了很大一部分内容。我通过将另一张纸放在打印的纸上进行了检查,它完全适合里面。

我在测量和安排控件时是否做错了什么?如何让我的打印机使用横向的全部空间?

最佳答案

Steve Py's answer对于描述核心问题是正确的(PrintVisual 不尊重所使用的 PrintTicket 设置)。然而,在我尝试使用 XpsDocumentWriter 和新的 PrintTicket 后,我​​遇到了同样的问题(如果我将新的 PrintTicket 的方向设置为横向,它仍然被剪裁)。

相反,我通过设置 LayoutTransform 将内容旋转 90 度并以纵向模式打印来解决该问题。我的最终代码:

StackPanel page = new StackPanel();
// ... generate stuff to the page to create the visual
// rotate page content 90 degrees to fit onto a landscape page
RotateTransform deg90 = new RotateTransform(90);
page.LayoutTransform = deg90;

PrintDialog dialog = new PrintDialog();
bool? result = dialog.ShowDialog();
if (result.HasValue && result.Value)
{
Size pageSize = new Size { Height = dialog.PrintableAreaHeight, Width = dialog.PrintableAreaWidth };
page.Measure(pageSize);
page.UpdateLayout();
dialog.PrintVisual(page, "Bingo Board");
}

关于wpf - 以横向打印 WPF 视觉对象,打印机仍以纵向尺寸进行剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com