Format de papier ignoré dans PrintDialog / XPS Document Writer
-
29-10-2019 - |
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">
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");
}
}