打印WPF画布和网格到单个A4页面
问题描述:
我有一个画布,我在运行时添加了各种UIElements,我需要能够将其打印到单个A4页面,并在底部的网格中添加一些其他文本。打印WPF画布和网格到单个A4页面
我可以使用此代码打印画布。
Dim printdlg = New PrintDialog
If printdlg.ShowDialog() Then printdlg.PrintVisual(GraphCanvas, "My Result")
我只需要在下面打印一个网格并理想地将其全部缩放到1页。
我见过FlowDocuments,但无法弄清楚如何添加我的画布。
任何帮助表示赞赏。
罗布
答
你有几个问题包在一个这里。要开始,我会专注于似乎是主要问题 - 如何将Canvas
添加到FlowDocument
。
using System.Windows.Controls;
using System.Windows.Documents;
. . .
public FlowDocument ToFlowDocument(Canvas canvas)
{
var flowdoc = new FlowDocument();
var newCanvas = new Canvas();
// UI elements can only have one instance per UI.
// Move from canvas to flowdoc here.
for (int i = 0; i < canvas.Children.Count; i++)
{
var child = canvas.Children[i];
canvas.Children.Remove(child);
newCanvas.Children.Add(child);
}
var container = new BlockUIContainer(newCanvas);
flowdoc.Blocks.Add(container);
return flowdoc;
}
最棘手的部分实际上只是记住,UI只能有每个UIElement的一个实例。