找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-6-1 14:45:00
21#

回复 19# luoyefeng 的帖子

17楼的Demo使用VS2010 + Spread for WinForms 6.0做的,你使用VS2010打开该Demo就可以运行
回复 使用道具 举报
luoyefeng
注册会员   /  发表于:2012-6-1 15:54:00
22#
版主,我发现可以解释为什么设置失效的原因了:很可能是ScaleRule设置没有保存上的原因。理由是每次打印前把ScaleRule重新设置一下,设置就能正常,否则设置就会失效。
可以这样验证:把设置好格式的文件保存,然后重新打开,预览时,会发现设置失效,然后在预览前加上:
var prules = new SmartPrintRulesCollection();
            prules.Add(new FarPoint.Win.Spread.BestFitColumnRule(FarPoint.Win.Spread.ResetOption.None));
            prules.Add(new FarPoint.Win.Spread.ScaleRule(FarPoint.Win.Spread.ResetOption.None, 1f, 0.1f, 0.01f));
printInfo.SmartPrintRules = prules;
设置又能正常生效,进一步检查,发现刚打开的文件的ScaleRule属性并不是原来设置的值,怀疑是保存是没有正确保存所致。

需要说明的是,我是在版本提供的demo上验证的,直接设置然后立即预览,一切正常;一旦重新打开就会发现设置失效。
回复 使用道具 举报
luoyefeng
注册会员   /  发表于:2012-6-1 15:56:00
23#
上面的
prules.Add(new FarPoint.Win.Spread.BestFitColumnRule(FarPoint.Win.Spread.ResetOption.None));
其实不需要,只需要重设ScaleRule规则即可
回复 使用道具 举报
luoyefeng
注册会员   /  发表于:2012-6-1 16:00:00
24#
另外我再问一个问题:LandscapeRule规则是起什么作用的?
按我的理解应该是根据打印区域自动设置最佳打印方向,比如,行数很少,列数很多,就设置为横向;列数很少,行数很多,就设置为纵向。但从实际效果来看,没发现它的作用。请版本说明一下正确用法
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-6-1 16:19:00
25#
基本和你的理解一致,单实际情况会有很多条件共通决定

Spread控件提供了一个可自动选择最优方式打印表单的方法。 使用您可选择的规则,它可以判断,例如,横向或纵向打印时这个规则是否是最好的。

您可以选择打开或关闭的规则,通过自定义规则对象的属性对打印进行优化:

LandscapeRule  决定使用横向还是纵向打印表单。  
ScaleRule  选择最适合的缩放打印表单,初始值为100%(初始因子 = 1),并且按所设置的间隔减小,直到最小值(最终因子)。默认的设置为初始因子 = 1,最终因子 = 0.6,间隔 = 0.1。  
BestFitColumnRule  确定如何最好的填充页面上表单中的列  

默认情况下,使用以下逻辑进行表单打印的优化:

如果不对您在PrintInfo对象中定义的属性做任何修改,就能打印信息,那么表单使用纵向模式打印。
如果表单比纵向的页面宽,那么表单使用横向模式打印。
如果横向模式时信息无法容纳,但如果表单的尺寸缩减为原尺寸的60%时就可以在横向模式下显示,则缩放表单以满足页面的要求。
如果不能通过缩放信息来满足要求,那么表单会尝试减小列宽来容纳每一列的最宽字符串。
如果所有将表单打印到一个页面上的尝试都失败,那么在不缩放的情况下,以当前打印机的方向继续正常打印。
您可以自定义这些逻辑在规则对象中的使用。如果您自定义了规则对象,那么默认的规则对象将会被忽略,并且打印时只使用自定义规则。 您可以使用SmartPrintRulesCollection对象设置一个规则的集合,并使用UseSmartPrintRules对象设置是否使用这些规则。
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 立即注册
返回顶部