我有一个需要打印多个Page对象的C# WPF应用程序(.NET 4.6)。
每个页面在XAML编辑器中设置为恰好1页A4大小,内容由页面上的许多标签,边框和图像组件构成。
我在我的Page类中添加了一个方法,它在运行时向页面添加一些动态数据,然后使用PrintVisual()
打印它。
实际上:它是一个用动态内容填充Page对象的循环,然后调用PrintVisual()
来打印它。对于每次迭代,都会在页面中放置一些新内容。 (参见示例代码。)
// Print method of the Page object.
public void PrintIt(int totalpages)
{
PrintDialog pDialog = new PrintDialog();
// If not cancelled then print
if (pDialog.ShowDialog() == false) return; // User cancelled. Don't bother
for(int pagenum=1; i<=totalpages; i++)
{
// Omitted several dozen statements that fill/update the content of various
// label components based on the pagenumber.
this.UpdateLayout(); // Required to re-render new page properly before printing.
pDialog.PrintVisual(this, "My PrintJob");
}
}
这很有效,期望每个PrintVisual()
创建一个单独的打印作业,这使得无法双面打印(当打印到PDF时,每个页面最终都会以新文件结尾)。
我需要将所有页面(PrintVisual()调用)绑定在一个打印作业中。我非常确定我需要使用PrintDocument()
,但我似乎无法弄清楚如何构建所需的FlowDocument并用我的实际打印填充它。
我对WPF编程很陌生,所以我可能会遗漏一些明显的东西,但据我所知,没有任何简单的方法可以做到这一点。 /> 任何人都可以给我一个正确的方向吗?