2009-06-05 6 views

Répondre

0

Vous devez essentiellement paginer le document vous-même, de la même manière que vous le feriez dans un paragraphe. Vérification pour voir si la prochaine ligne va s'adapter, saut de page si non, début de chaque page avec l'en-tête de la table, et continuer à ajouter des lignes de table jusqu'à ce que la page est pleine.

Malheureusement, aucun des paginateurs ne le fait.

1

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.

+0

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. –

+0

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

0

Essayez ceci: WPF Reports
Il prend en charge l'en-tête/pied de page et possède une fonctionnalité intéressante. Bonne chance