回复 1楼刘君的帖子
你说的是Spread打印预览?
通过spread的PrintInfo.ShowPrintDialog展示预览的工具栏是不能修改的。
但是可以通过另外一种方式实现你的需求。
spread有自定义的打印方式,就是使用OwnerPrintDraw方法打印,这样子就可以使用微软的PrintPreviewDialog。代码参考如下:
- private System.Drawing.Printing.PrintDocument pd;
- private void Form1_Load(object sender, EventArgs e)
- {
- this.pd = new System.Drawing.Printing.PrintDocument();
- this.pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.pd_PrintPage);
- PrintDialog printdlg = new PrintDialog();
- PrintPreviewDialog printPrvDlg = new PrintPreviewDialog();
-
- // preview the assigned document or you can create a different previewButton for it
- printPrvDlg.Document = pd;
- printPrvDlg.ShowDialog(); // this shows the preview and then show the Printer Dlg below
-
- }
- private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev)
- {
- Rectangle rect = new Rectangle(ev.PageBounds.X, ev.PageBounds.Y, ev.PageBounds.Width / 2, ev.PageBounds.Height / 2);
- int cnt = fpSpread1.GetOwnerPrintPageCount(ev.Graphics, rect, 0);
- fpSpread1.OwnerPrintDraw(ev.Graphics, rect, 0, cnt);
- ev.Graphics.DrawString("End of Print Job", new Font("MS Sans Serif", 10), new SolidBrush(Color.Black), new Rectangle(ev.PageBounds.X,
- ev.PageBounds.Y + ev.PageBounds.Height / 2, ev.PageBounds.Width / 2, ev.PageBounds.Height / 2));
- ev.HasMorePages = false;
- }
复制代码
这个时候你可以通过继承微软标准的PrintPreviewDialog,并且自定义一个预览界面,在上面添加按钮或是更改按钮,这就属于你业务逻辑上的需求了,你可以自己写代码实现。网上也会有很多的相关资源。
我能提供的大概思路就是:
- public class MyPrintPreviewDialog : PrintPreviewDialog {
- public MyPrintPreviewDialog() : base()
- {
- Type T = typeof(PrintPreviewDialog);
- FieldInfo fi = T.GetField("toolStrip1", BindingFlags.Instance |
- BindingFlags.NonPublic);
- //这就是你需要的工具栏。
- ToolStrip toolStrip1 = (ToolStrip)fi.GetValue(this);
- }
- }
复制代码 |