2012-07-16 80 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