2009-06-05 14 views

答えて

0

基本的に、テキストの段落を折り返すのと同じ方法で、文書を改ページする必要があります。次の行が収まるかどうかを確認し、そうでなければ改ページし、各ページを表ヘッダーで開始し、ページがいっぱいになるまで表の行を追加し続ける。

残念ながら、ページネイターの誰もこれを行いません。

1

は、参照CodeProjectの持ついくつかの問題がありますが、それはほとんど動作し、私は次の変更の成功があった:GETPAGEで

、単にコンソールを参照する4行を削除します。

定義クラスでは

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

を追加し、ボタンのクリックでそれを呼び出すために、独自のコードでは、ContentSizeはその後

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

に行くようなものに変更します - 私はdidnの彼のクラス名のように:)

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

私の場合、私はフッターは必要ありませんでしたが、そのヘッダーデリゲートそれのようなもの)は必須です。 MarginsとPageSizeはデフォルトになりますが、私は異なった値を求めました。

最後に、TableCellの段落定義にKeepTogether = trueを追加する必要があることが判明しました。

+0

また、私はViewとPrintの間でTextAlignmentの設定を失っていました。このリンクの提案は私を修正しました:[FlowDocument Text Alignment](http://social.msdn.microsoft.com/Forums/en-US)/wpf/thread/a8a7b9af-2487-4041-af4d-68752d249b2b /) - 私のコードを減らしました。 –

+0

残念ながら、これは何もしません。 'RepeatTableHeaders = true'を' Definition'に追加すると思いましたが、私のテーブルで何も繰り返されません。 – ygoe

0

これを試してみてください:WPF Reports
これはヘッダー/フッターをサポートしています。 幸運

関連する問題