业务单据的打印问题

iloveppmm 2007-12-17 11:57:44
客户需要打印的单据是发货单,入库单一类的单据。是winform的项目。单据页面采用的datagridview控件(明细)和textbox控件(单据头),数据源是datatable。
现在需求是:
1 可根据纸张的大小变化而调整。并可实现套打、连打。分页。
比如,客户如果采用的是350*120mm的纸型,或者450*150的纸型,都可以以基本相同的比例来实现打印。将来如果客户换成定制的以印刷好单据表格的纸型,可以实现套打。连打。
一般一张单据打五行,不够的打成空行。如何超过五行,多的自动打到第二页。当然,最好有类似word的第几页共几页的页脚。
2 单据明细,有个别记录的个别字段,比如某个货物的名称字段比较长,可以实现缩小该字段字体,并折行打印。这种情况,该行的高度一般不变,估计主要是套打时高度也不可能改变了吧。

-------------------------------------------------------------------
目前,我知道的有三种方法
1 采用GDI+ 的Graphics对象的drawstring方法和drawline方法,来实现将所有文字和表格画到打印机上。希望能设计一个类,实现获取纸型的大小及页边距。然后计算出各个字段使用的字体大小(按比例),位置。然后画出来。
但是,将不同字体的不同字号对应打印出来实际占用的矩形区域如何换算遇到了困难。我用的messurestring方法。但是,感觉不太精确。尤其是字母与汉字混用的情况。简单讲就是比较难以实现单元格居中那种效果。有时候会出现字与表格线有少量重叠的现象。
还有一点,我发现net类库中提供的几个类,papersetupdialog类,我选择的打印机和页边距设置似乎没有保存的按钮。这样也许会造成每天开机重新设置一遍,比较麻烦。
2 interop.excel.dll 引用这个com组件,利用excel的相关功能实现打印。我下载了一个简单的源码,发现其是用这个实现打印的。自己也看了看里面的类与接口,发现非常多。现在苦于找不到更多的学习资料。看一般的实现方式似乎不是很难,感觉最常用的就是其中的三四个类,中间是一个循环,将某字段的值写到对应的单元格中。而且,似乎,模板是早就做好的。也就是这个单据要打印成什么样,先做好一个对应的excel模板。
所以,不清楚是不是采取这个com组件来实现的话,必须得提前将模板做好,是不是意味着这其实是硬编码。单据上的字段的大小位置等都不可再变化?而我希望能够实现可选择的。也就是,哪些字段要打印,在什么位置打印,表格中要哪列。所以,要求能实现比较灵活的。而不是局限于一个固定的模板。
目前苦于找不到更多的关于 interop.excel.dll这方面的资料。
3 水晶报表。完全没研究过,以前只是以为打报表,画柱状图之类的。后来听说也可以打单据。
主要是还听说这个属于第三方控件,并且价格不低。所以,针对上面的需求,想知道可行与否就可以了。毕竟这是最后一个选择。
=============================================================
现在自己卡在目前的这个阶段了,知道如果继续的话需要花大量时间深入了解每一种。但是,又没有时间一个一个去深入了解可行不可行。请专家指点迷津。
...全文
403 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
123456xjy 2008-05-31
  • 打赏
  • 举报
回复
自己使用C#中的print方法来打印就行了啊。以前一个小项目也是要实现套打的,就是采用这种方法来实现的,觉得还是挺不错,只是现在一时还找不到源代码了。
yumanqing 2008-04-18
  • 打赏
  • 举报
回复
最简单的还是买控件吧
yangsunyou 2008-03-21
  • 打赏
  • 举报
回复
打印真的好烦呀搞不掂呀
wdzr_826 2007-12-19
  • 打赏
  • 举报
回复
建议Excel的方式,这是广泛应用且普遍接受的
xiaojing7 2007-12-19
  • 打赏
  • 举报
回复
up
iloveppmm 2007-12-19
  • 打赏
  • 举报
回复
还是有点模糊。
起码这几种需求,套打,分页,连打。自动折行缩小字体以保证不丢内容。可以随着实际纸张大小,按比例调整大小。也就是具有一定灵活性。
不管自己画还是excel的com组件都可以实现吧。
要是还要更加灵活一点,比如一页打几行根据设置来打。表格每列的宽度根据设置来实现。
其实最怕的是因为不知道,选错了一种方式,可能这种方式本身达不到目的,但在某个方式上面浪费了过多的时间。
bitsbird 2007-12-18
  • 打赏
  • 举报
回复
GDI+做分页显然很累,水晶报表的套打和分页也比较难做完美,剩下来的就是Excel了,
通过调用Excel的Com组件对模版进行填充打印是完全可以做到的,比较健壮的开源的有论坛上的
长江支流的开源GoldPrinter,还是能够满足需要的
孟子E章 2007-12-18
  • 打赏
  • 举报
回复
做报表、打印无外乎就这些方法:第三方控件、Excel、自己画,由于报表的个性差异,没有太简单的方法,只要满足自己的需要,方便用户使用即可。
interop.excel.dll资料msdn上有,找Office Development部分,或者VSTO。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧