2

我正在尝试打印 WPF FlowDocument。版面需要采用每页4个文档的形式,布局如下:

 Doc1 | Doc2
-------------
 Doc3 | Doc4

(抱歉,我想不出更好的方式来说明布局)。

页面需要填充,所以如果 Doc1 & 2 为空白或只有一两个字符,它仍然需要打印与 Doc3 & 4 相同的大小。

我正在使用的代码如下(对不起,它很长,我试图在可行的情况下进行删节):

PrintDialog printDialog = new PrintDialog();
if ((bool)printDialog.ShowDialog().GetValueOrDefault())
{
    FlowDocument flowDocument = new FlowDocument();
    flowDocument.PageHeight = printDialog.PrintableAreaHeight;
    flowDocument.PageWidth = printDialog.PrintableAreaWidth;
    flowDocument.PagePadding = new Thickness(25);

    flowDocument.ColumnGap = 0;

    flowDocument.ColumnWidth = (flowDocument.PageWidth -
                                   flowDocument.ColumnGap -
                                   flowDocument.PagePadding.Left -
                                   flowDocument.PagePadding.Right);


    Table myTable = new Table();
    myTable.BorderThickness = new Thickness(3);

    AddCols(myTable);         // Add 2 cols

    TableRowGroup rg = new TableRowGroup();
    TableRow row = new TableRow();

    AddRows(myTable);         // Adds 2 rows

    TableCell cell = new TableCell(new Paragraph(new Run("Doc1")));                
    cell.BorderThickness = new Thickness(1);
    cell.BorderBrush = Brushes.Black;          
    // Repeat 4 times      

    row.Cells.Add(cell);

    myTable.RowGroups.Add(rg);

    doc.Blocks.Add(myTable);

    ....

我遇到的问题是,尽管确实可以打印,但它并没有像上面描述的那样尝试使其适合页面。我正在尝试的是否可能,如果是,如何?

编辑:

这里看,我相信我真正需要的是一种计算段落高度的方法,以便我可以设置 Padding 属性。不幸的是,此链接中提出的解决方案不起作用!

4

4 回答 4

2

尝试将整个块放在一个网格中,以使其具有统一的布局,然后将网格放在块中,然后将块放在单个表格单元格中。看看这是否适合你 -

Grid grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition());
        grid.RowDefinitions.Add(new RowDefinition());
        grid.ColumnDefinitions.Add(new ColumnDefinition());
        grid.ColumnDefinitions.Add(new ColumnDefinition());

        Label text1 = new Label();
        text1.Content = "Doc1";
        grid.Children.Add(text1);
        Grid.SetColumn(text1, 0);
        Grid.SetRow(text1, 0);

        Label text2 = new Label();
        text1.Content = "Doc2";
        grid.Children.Add(text2);
        Grid.SetColumn(text2, 1);
        Grid.SetRow(text2, 0);

        Label text3 = new Label();
        text1.Content = "Doc3";
        grid.Children.Add(text3);
        Grid.SetColumn(text3, 0);
        Grid.SetRow(text3, 1);

        Label text4 = new Label();
        text1.Content = "Doc4";
        grid.Children.Add(text4);
        Grid.SetColumn(text4, 1);
        Grid.SetRow(text4, 1);

        BlockUIContainer block = new BlockUIContainer(grid);

        Table table = new Table();
        TableRowGroup rg = new TableRowGroup();
        TableCell cell = new TableCell();
        cell.Blocks.Add(block);
        TableRow row = new TableRow();
        row.Cells.Add(cell);
        rg.Rows.Add(row);
        table.RowGroups.Add(rg);
        doc.Blocks.Add(table);
于 2012-07-20T18:57:18.603 回答
0

这是你要找的吗?

将 xaml 流文档转换为 xps

于 2012-07-16T21:36:17.593 回答
0

问题,您将单元格添加到 row.cell 并将行组添加到表中,但是您是否将行添加到行组?

于 2012-07-18T22:29:29.290 回答