Question

J'essaie d'imprimer avec la classe PrintDialog de WPF (namespace System.Windows.Controls dans PresentationFramework.dll, v4.0.30319).Voici le code que j'utilise:

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

Le problème est quel que soit le format de papier que je sélectionne pour "Microsoft XPS Document Writer", le XPS généré a toujours la largeur et la hauteur du type de papier " Lettre ":

Voici le code XAML que je peux trouver dans le package XPS:

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

Était-ce utile?

La solution

La modification du format de papier dans la boîte de dialogue d'impression n'affecte que le PrintTicket, pas le contenu FixedPage.La méthode PrintVisual produit des pages au format Lettre, donc pour avoir une taille de page différente, vous devez utiliser la méthode PrintDocument, comme ceci:

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");
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top