PrintDialog / XPS Document Writer中忽略的纸张尺寸

时间:2011-09-12 16:09:36

标签: c# wpf printing xps printdialog

我正在尝试使用WPF的PrintDialog类(PresentationFramework.dll中的命名空间System.Windows.Controls,v4.0.30319)进行打印。这是我使用的代码:

private void PrintMe()
{
    var dlg = new PrintDialog();

    if (dlg.ShowDialog() == true)
    {
        dlg.PrintVisual(new System.Windows.Shapes.Rectangle
        {
            Width = 100,
            Height = 100,
            Fill = System.Windows.Media.Brushes.Red
        }, "test");
    }
}

问题是无论我为“Microsoft XPS Document Writer”选择的纸张尺寸,生成的XPS始终具有“ Letter ”纸张类型的宽度和高度:

这是我可以在XPS包中找到的XAML代码:

<FixedPage ... Width="816" Height="1056">

1 个答案:

答案 0 :(得分:2)

在打印对话框中更改纸张尺寸仅影响PrintTicket,而不影响FixedPage内容。 PrintVisual方法生成Letter大小的页面,因此为了使页面大小不同,您需要使用PrintDocument方法,如下所示:

private void PrintMe()
{
    var dlg = new PrintDialog();
    FixedPage fp = new FixedPage();
    fp.Height = 100;
    fp.Width = 100;
    fp.Children.Add(new System.Windows.Shapes.Rectangle
        {
            Width = 100,
            Height = 100,
            Fill = System.Windows.Media.Brushes.Red
        });
    PageContent pc = new PageContent();
    pc.Child = fp;
    FixedDocument fd = new FixedDocument();
    fd.Pages.Add(pc);
    DocumentReference dr = new DocumentReference();
    dr.SetDocument(fd);
    FixedDocumentSequence fds = new FixedDocumentSequence();
    fds.References.Add(dr);            

    if (dlg.ShowDialog() == true)
    {
        dlg.PrintDocument(fds.DocumentPaginator, "test");
    }
}