2016-02-27 113 views
1

我有一個關於多頁固定頁面的問題。我有一個編程創建的網格,網格超過一個A4頁面。現在我想用打印邊距在幾個固定頁面中打印網格。但是,在我的路上,我反覆創建了網格,並在固定頁面排列功能中抵消了LeftTop點。我遇到了一個問題,我無法在固定頁面中設置打印邊距,因爲我將打印邊距設置爲固定頁面,然後第一頁將具有打印邊距,接下來的頁面將爲空白。WPF多頁打印FixedDocument(Visual C#2010)

如何固定文檔的打印多頁的大格想打印?

PrintDialog pd = new System.Windows.Controls.PrintDialog(); 
if (pd.ShowDialog() == false) 
{ 
    return; 
} 

var pageSize = new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight); 
var document = new FixedDocument(); 
document.DocumentPaginator.PageSize = pageSize; 

for (int nPage = 0; nPage < MaxPage; nPage++) 
{ 
    Grid tempGrid = LoadControlMotherInit(); 

    tempGrid.Width = GridWidth; 
    tempGrid.Height = GridActualHeight; 

    Point leftTop = new Point(); 

    leftTop.X = 10; 
    leftTop.Y = -nPage * pageSize.Height; 

    // Create FixedPage 
    var fixedPage = new FixedPage(); 
    fixedPage.Width = pageSize.Width; 
    fixedPage.Height = pageSize.Height; 

    fixedPage.Margin = new Thickness(0, 0, 0, 96); 

    fixedPage.Children.Add((UIElement)tempGrid); 
    fixedPage.Measure(pageSize); 
    fixedPage.Arrange(new Rect(leftTop, pageSize)); 

    fixedPage.UpdateLayout(); 

    // Add page to document 
    var pageContent = new PageContent(); 
    ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage); 
    document.Pages.Add(pageContent); 
} 

pd.PrintDocument(document.DocumentPaginator, "My Document"); 
+0

聽起來對我來說是個不好的主意......嘗試移動網格,而不是網頁。沒有任何魔力,只需設置邊距即可。 – Athari

+0

但網格超出A4紙張。我將邊距設置爲要打印的網格,效果將在第一頁和最後一頁上起作用。 –

+0

不一致,如何設置打印邊距? –

回答

0

從看着你的榜樣, PrintDialog.PrintDocument方法接受DocumentPaginator,這可能來自源的衆多。

這樣說,你可以繼承DocumentPaginator並控制從PageSize,PageCount到實際返回的DocumentPage的所有內容。

想象一下您的DocumentPage作爲UIElement上的滑動窗口;但不是滑動DocumentPage,而是使用其RenderTransform滑動UIElement。