您可以使用可重复的表列标题在WPF中打印Flowdocument表

时间:2009-06-05 19:06:04

标签: wpf printing flowdocument

如何使用可重复的表列标题在WPF中打印Flowdocument表?

我已经看过这个[http://www.codeproject.com/KB/WPF/PimpedDocumentPaginator.aspx]并且它不起作用。

3 个答案:

答案 0 :(得分:1)

引用的CodeProject存在一些问题,但它几乎可以运行,并且我已成功完成以下更改:

在GetPage中,只需删除引用控制台的四行。

在“定义”类中添加

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

然后,在你自己的代码中,点击按钮就可以调用它: - 我不喜欢他的类名:)

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

在我的情况下,我不需要页脚,但是Header委托(或类似的东西)是必须的。边距和PageSize将默认,但我想要不同的值。

最后,我发现我需要将KeepTogether = true添加到我的TableCells的段落定义中。

答案 1 :(得分:0)

您基本上需要自己对文档进行分页,方式与您自动换行一段文本相同。检查下一行是否适合,如果没有,则分页,使用表头启动每个页面,并继续追加表行直到页面已满。

不幸的是,这些分页器都没有这样做。

答案 2 :(得分:0)

试试这个:WPF Reports
它支持页眉/页脚,并具有一些很好的功能。 祝你好运