Il y a quelques problèmes avec le CodeProject référencé, mais il fonctionne presque, et je l'ai eu du succès avec les modifications suivantes:
Dans GetPage, il suffit de supprimer les quatre lignes qui font référence à la console.
Dans la classe Définition ajouter
public static Size Subtract(Size s1, Size s2)
{
return new Size(s1.Width - s2.Width, s1.Height - s2.Height);
}
et changer contentSize arriver à
return Subtract(PageSize, new Size(
Margins.Left + Margins.Right,
Margins.Top + Margins.Bottom + HeaderHeight + FooterHeight));
Ensuite, dans votre propre code, quelque chose comme ça pour l'appeler sur un bouton clic: - Je n « t comme son nom de la classe :)
PrintDialog printDialog = new PrintDialog();
printDialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
if (true == printDialog.ShowDialog())
{
MyPaginator.Definition d = new MyPaginator.Definition
{
Header = (c, b, n) => c.DrawRectangle(Brushes.Black, null, b),
Margins = new Thickness(48), // 1/2 inch all around
PageSize = new Size(flowDocument.PageWidth, flowDocument.PageHeight),
};
DocumentPaginator s = new MyPaginator(flowDocument, d);
printDialog.PrintDocument(s, "Print Job Title");
}
Dans mon cas, je ne l'ai pas besoin d'un pied de page, mais ce délégué en-tête (ou som ething like it) est un must. Les marges et PageSize seront par défaut, mais je voulais des valeurs différentes.
Enfin, j'ai trouvé que j'avais besoin d'ajouter KeepTogether = true
à mes définitions de paragraphe pour mes TableCells.
Je perdais également mes paramètres TextAlignment entre View et Print: Une suggestion sur ce lien m'a corrigé: [FlowDocument Text Alignment] (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a8a7b9af-2487-4041-af4d-68752d249b2b /) - et réduit mon code. –
Malheureusement, cela ne fait rien du tout. J'ai deviné d'ajouter 'RepeatTableHeaders = true' à' Definition' mais rien ne se répète dans ma table. – ygoe