Domanda

Sto cercando di stampare con WPF PrintDialog Classe (namespace system.windows.controls in presentationframework.dll, v4.0.30319). Questo è il codice che uso:

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");
    }
}

Il problema è non importa quale dimensione della carta selezione per "Microsoft XPS Document Writer", l'XPS generato, sempre, ha la larghezza e l'altezza di "Lettera" tipo di carta:

Questo è il codice XAML che posso trovare all'interno del pacchetto XPS:

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

È stato utile?

Soluzione

La modifica della dimensione della carta nella finestra di dialogo di stampa influisce solo sul contenuto di PrintTicket, non il contenuto della pagina fissa. Il metodo PrintVisual produce pagine di dimensioni della lettera, quindi per avere una dimensione della pagina diversa è necessario utilizzare il metodo PrintDocument, come: così:

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");
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top