2009-06-05 11 views

Antwort

0

Sie müssen im Grunde das Dokument selbst paginieren, auf die gleiche Weise, wie Sie einen Textabsatz umbrechen würden. Überprüfen, ob die nächste Zeile passt, Seitenumbruch, falls nicht, Starten jeder Seite mit der Tabellenüberschrift und Anfügen von Tabellenzeilen, bis die Seite voll ist.

Leider tut dies keiner der Paginatoren.

1

Es gibt einige Probleme mit dem referenzierten Codeproject, aber es funktioniert fast, und ich habe Erfolg mit den folgenden Änderungen hat:

In GetPage, löschen Sie einfach die vier Linien, die die Konsole verweisen.

In der Definition der Klasse

public static Size Subtract(Size s1, Size s2) 
{ 
    return new Size(s1.Width - s2.Width, s1.Height - s2.Height); 
} 

hinzufügen und Content zu

return Subtract(PageSize, new Size(
     Margins.Left + Margins.Right, 
     Margins.Top + Margins.Bottom + HeaderHeight + FooterHeight)); 

Dann erhalten ändern, in Ihrem eigenen Code, so etwas wie diese es auf einer Schaltfläche klicken nennen: - Ich didn ‚t wie sein Klassenname :)

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

In meinem Fall habe ich nicht einen Footer brauchen, sondern dass die Header-Delegierten (oder som so ist es ein Muss. Die Margins und PageSize werden standardmäßig verwendet, aber ich wollte andere Werte.

Schließlich fand ich, dass ich KeepTogether = true zu meinen Absatzdefinitionen für meine TableCells hinzufügen musste.

+0

Ich verlor auch meine TextAlignment-Einstellungen zwischen Ansicht und Drucken: Ein Vorschlag auf diesem Link repariert mich: [FlowDocument Text Alignment] (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a8a7b9af-2487-4041-af4d-68752d249b2b /) - und meinen Code reduziert. –

+0

Leider tut das gar nichts. Ich vermutete, 'RepeatTableHeaders = true' zur' Definition' hinzuzufügen, aber nichts wird in meiner Tabelle wiederholt. – ygoe

0

Versuchen Sie dies: WPF Reports
Es unterstützt Header/Footer und hat einige nette Funktion. Viel Glück

Verwandte Themen