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.
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. –
Leider tut das gar nichts. Ich vermutete, 'RepeatTableHeaders = true' zur' Definition' hinzuzufügen, aber nichts wird in meiner Tabelle wiederholt. – ygoe