2016-02-27 259 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。