silverlight4.0 打印功能总结
与打印相关类与属性的介绍:
PrintDocument - 用于提供打印功能的类
* PrintDocument.PrintedPageCount - 已经被打印的页数
* PrintDocument.Print(string documentName) - 弹出打印对话框。需要指定的参数为“在打印队列中需要显示的文档名称”
* PrintDocument.BeginPrint - 调用 Print() 方法并且按了打印对话框中的打印按钮之后所触发的事件,在 PrintPage 事件之前发生
* PrintDocument.EndPrint - 打印结束(包括打印被取消)后所触发的事件
* PrintDocument.PrintPage - 每打印一页之前所触发的事件
PrintPageEventArgs - PrintPage 事件的事件参数
* PrintPageEventArgs.PageVisual - 需要被打印的 UIElement
* PrintPageEventArgs.PrintableArea - 可打印的区域大小(Size 类型,其包括 Width 属性和 Height 属性和 IsEmpty 属性)
* PrintPageEventArgs.PageMargins - 获取当前打印页的页边距(Thickness 类型,其包括 Left 属性和 Top 属性和 Right 属性和 Bottom 属性)
* PrintPageEventArgs.HasMorePages - 设置是否还有更多页需要打印(如果设置为 true,则会继续出触发 PrintPage 事件)
点击按钮,调用print()方法:
private PrintDocument pd;
private Canvas printCanvas;
public void Print()
{
pd = new PrintDocument();
pd.BeginPrint += new EventHandler<BeginPrintEventArgs>(pd_BeginPrint);
pd.PrintPage += new EventHandler<PrintPageEventArgs>(pd_PrintPage);
pd.Print("test");
}
void pd_BeginPrint(object sender, BeginPrintEventArgs e)
{
if (this.printCanvas == null)
{
//在这里初始化canvas
}
}
void pd_PrintPage(object sender, PrintPageEventArgs e)
{
//double ratex = e.PrintableArea.Width / this.ActualHeight;
double ratey = e.PrintableArea.Width / (this.busPanel.ActualHeight + this.spliter2.ActualHeight + this.senkuBdr.ActualHeight);
//在x,y二维空间内缩放UIElement
ScaleTransform st = new ScaleTransform();
//st.ScaleX = ratex;
st.ScaleY = ratey;
//在x,y二维空间内旋转UIElement 旋转点为(0,0),也可以自己设计旋转的点
RotateTransform rt = new RotateTransform();
rt.Angle = 90;
//在x,y二维空间内移动UIElement
TranslateTransform tt = new TranslateTransform();
//tt.X = printCanvas.ActualHeight * rate;
tt.X = e.PrintableArea.Width;
TransformGroup tc = new TransformGroup();
tc.Children.Add(st);
tc.Children.Add(rt);
tc.Children.Add(tt);
this.printCanvas.RenderTransform = tc;
//e.PageVisual = this.RotateTo90(e.PrintableArea);
//MessageBox.Show(this.printShow.ActualWidth.ToString() + "," +this.printShow.ActualHeight.ToString());
//设置要打印的UIElement
e.PageVisual = this.printCanvas;
}
缩放中遇到的问题:Width,Height,ActualWidth, ActualHeight