Размер бумаги игнорируется в PrintDialog / XPS Document Writer - PullRequest
2 голосов
/ 12 сентября 2011

Я пытаюсь печатать с классом PrintDialog в WPF (пространство имен System.Windows.Controls в PresentationFramework.dll, 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"тип бумаги:

Это код XAML, который я могу найти внутри пакета XPS:

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

1 Ответ

2 голосов
/ 15 сентября 2011

Изменение размера бумаги в диалоговом окне печати влияет только на 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");
    }
}
...