2012-07-16 90 views
2

我试图打印一个WPF FlowDocument。布局需要在每页4个文件的形式,布局如下:WPF流文档布局

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

(对不起,我不能拿出说明布局的更好的方法)。

页需要填补,因此,如果文档1 & 2是空或只是一个或两个字符,它仍然需要打印图像的大小相同文档3 & 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); 

    .... 

,我有是,虽然这样做印刷,它并不试图如上所述将其调整到页面的问题。我正在尝试做什么,如果有的话,怎么样?

编辑:

从寻找here我相信我所真正需要的是计算该段的高度,这样我就可以设置Padding属性的一种方式。不幸的是,这个链接中提出的解决方案不起作用!

回答

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

我最初自己也有过类似的想法,但我似乎无法获得它打印网格。 – 2012-07-20 20:21:17

+0

您是否尝试过使用这种方法进行打印?它应该工作。 – 2012-07-21 08:58:50

+0

是的 - 如上所述,我不能让网格控件打印任何东西。上面的代码只是简单的导致了一个空白页 – 2012-07-21 10:54:45

0

这是你在找什么?

Convert xaml flow document to xps

+0

我不认为这解决我的问题,除非我误解了文章。我需要做的是在桌面上均匀布置表格 - 页面本身打印良好 – 2012-07-17 15:26:31

1
+0

是的 - 我已经看到了这些。不幸的是,他们没有描述如何引入自定义分页程序来解决我的问题 – 2012-07-19 11:35:25

+0

您可以为“页面”的每个季度生成单独的XPS流文档,然后打印每页4页,或者获取DocumentPaginator来为您执行此操作如其中一个示例链接所示)。 – 2012-07-19 12:48:41

0

问题,您添加单元格到t他将row.cell和rowgroup添加到表中,但是您是否将该行添加到行组?

+0

是的 - 它打印质量很好,只是不在我想要的位置 – 2012-07-19 10:55:38