WPF多页打印FixedDocument(Visual C#2010)
问题描述:
我有一个关于多页固定页面的问题。我有一个编程创建的网格,网格超过一个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");
答
从看着你的榜样, PrintDialog.PrintDocument方法接受DocumentPaginator,这可能来自源的众多。
这样说,你可以继承DocumentPaginator并控制从PageSize,PageCount到实际返回的DocumentPage的所有内容。
想象一下您的DocumentPage作为UIElement上的滑动窗口;但不是滑动DocumentPage,而是使用其RenderTransform滑动UIElement。
听起来对我来说是个不好的主意......尝试移动网格,而不是网页。没有任何魔力,只需设置边距即可。 – Athari
但网格超出A4纸张。我将边距设置为要打印的网格,效果将在第一页和最后一页上起作用。 –
不一致,如何设置打印边距? –