3

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

这是我的代码:

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 的宽度,切断了大量内容。我已经通过将另一张纸放在打印的纸上来检查这一点,它完全适合里面。

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

4

3 回答 3

5

Steve Py 的回答对于描述核心问题是正确的(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");
}
于 2012-10-08T07:13:49.143 回答
2

横向视觉打印存在一个已知问题。这应该提供有关如何解决它的详细信息。

http://social.msdn.microsoft.com/Forums/en/wpf/thread/56fb78b1-efc2-4ff7-aa2c-73c198a790b4

于 2012-10-08T03:44:11.313 回答
0

尝试

PrintDialog printDlg = new PrintDialog();
PrintTicket pt = printDlg.PrintTicket;
pt.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA5Rotated);
于 2016-03-22T03:32:51.907 回答