找回密码
 立即注册

QQ登录

只需一步,快速开始

gdrle

初级会员

6

主题

30

帖子

380

积分

初级会员

积分
380

活字格认证圣诞拼拼乐

gdrle
初级会员   /  发表于:2014-9-28 10:48  /   查看:4277  /  回复:4
Farpoint Spread的Sheet打印,通过调用SpreadPrintBackground事件,处理PrintBackgroundEventArgs参数的Graphics来添加水印,在对同一个Spread Sheet调用多次时,之前的水印设置一直存在,请问各位版主,如何在本次调用的时候把上次的水印清除,或者有其他方法来实现水印的打印,以下是部分代码共参考:  
  1.     Private Sub SpreadPrintBackground(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.PrintBackgroundEventArgs)
  2.         Dim maskStr As String = String.Empty
  3.         If (txtPrintMask.Text = "") Then
  4.             maskStr = "系统打印"
  5.         Else
  6.             maskStr = txtPrintMask.Text.Replace("/ds", Now.ToShortDateString()).Replace("/tl", Now.ToLongTimeString()).Replace("/st", "PRINT").Replace("/un", UserName)
  7.         End If
  8.         gMask = e.Graphics
  9.         gMask.TranslateTransform(100, 0)
  10.         gMask.RotateTransform(IIf(rbLandscape.Checked, 35, 55), Drawing2D.MatrixOrder.Prepend)
  11.         gMask.DrawString(maskStr, New Font("Arial", 72, FontStyle.Bold), New SolidBrush(Color.FromArgb(64, Color.Black)), 0, 0)
  12.     End Sub
复制代码

打印方法:
  1.     Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
  2.         loadPrintSet()
  3.         printSet.Preview = True
  4.         Spread.ActiveSheet.PrintInfo = printSet
  5.         Spread.PrintSheet(0)
  6.     End Sub
复制代码

打印出来的效果:

20140928104553.jpg (88.87 KB, 下载次数: 151)

4 个回复

倒序浏览
gdrle
初级会员   /  发表于:2014-9-28 11:23:00
沙发
自己顶,换了个外围方法来解决,把打印模块设置为shared,只生成一个实例,关闭的时候用hide()而不是close()这样就不会反复的创建(旋转)Graphics了,关键代码如下:
  1. Public Class PrintSS
  2.     Private Shared frmPageSet As FrmSSPageSetup
  3.     Public Shared Sub Print(ByVal spread As FpSpread, ByVal uName As String)
  4.         If frmPageSet Is Nothing Then
  5.             frmPageSet = New FrmSSPageSetup(uName, spread, True, True)
  6.         Else
  7.             frmPageSet.UserName = uName
  8.             frmPageSet.Spread = spread
  9.         End If
  10.         frmPageSet.ShowDialog()
  11.     End Sub
  12. End Class
复制代码
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2014-9-28 12:18:00
板凳
gdrle 你好,

谢谢分析你的实现方法,同时,你可以将你使用Spread的经验通过博客的形式分享更多用使用者,让大家共同学习交流,而且我们还有论坛金币赠送$ $ $ $ $,通过金币可以兑换礼品哦,如何获得和兑换GCDN金币
回复 使用道具 举报
gdrle
初级会员   /  发表于:2014-9-28 14:14:00
地板
谢谢版主,大概找到问题根本原因了,问题在于打印设置加载的时候动态的绑定了这个事件,现在改成在绑定之前先卸载就可以了,方法见代码:
  1.     Private Sub FrmSSPageSetup_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
  2.         RemoveHandler Spread.PrintBackground, AddressOf SpreadPrintBackground ''''加载前先卸载,避免多次调用
  3.         AddHandler Spread.PrintBackground, AddressOf SpreadPrintBackground ''''绑定后台打印事件,加载打印水印
  4.     End Sub
复制代码
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2014-9-28 16:45:00
5#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部