以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 完美解决piao据打印链式连续进纸问题,请大家指正! (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=45297)
|
-- 作者:unverse
-- 发布时间:2014/1/21 13:23:00
-- 完美解决piao据打印链式连续进纸问题,请大家指正!
用狐表快二年了,以前做过支票打印,用的是针式 打印机,票据都是从前面进纸的,进纸都是手动送入,而非链式进纸,最近在做一个非税票据的管理系统,使用的打印票据是链式进纸,需要从打印机的后面连续打印,打印位置必须精准否则要浪费票据(票据都有编号,不能浪费),这可愁坏了我,想必有些狐友也能感受到用狐表专业报表输出的时候有些问题:使用自定义纸张的时候预览时正常的,但直接打印输出的默认是以A4纸的高度输出的,这样每打印一张票据都会往后托好几张,根本没有办法使用。
试问狐爸:专业报表定义的高度为啥在输出的时候打印机为啥不认呢,吐纸为啥按A4纸张的高度吐纸呢?有办法解决不?
本想通过专业报表代码取系统自定义纸张的大小来打印,但翻遍了专业报表的说明书 ,没有发现这样的功能 ,记得以前用窗口打印的时候可以从下拉中选择打印纸张的类型,但在专业报表中可能是实现不了(这个需要官方确认一下,是否能实现),所以我就另外想办法解决-通过系统打印机的设置来测试打印,也就是本贴的解决方法。
第一步:安装正确的打印驱动(测试用的是EPSON 635K针式打印机)
此主题相关图片如下:1.jpg
第二步:定义自定义纸张大小
此主题相关图片如下:22.jpg
此主题相关图片如下:33.jpg
第三步:设置输出格式
此主题相关图片如下:31.jpg
打印机属性:选择刚才的打印纸张:
此主题相关图片如下:32.jpg
通过以上几步系统设置参数就完成了,然后能过FT就可以直接打印了,打印效果如下:
此主题相关图片如下:44.jpg
希望对有此需求的狐友提供一些帮助!
顺便秀一下我的作品!
此主题相关图片如下:qq截图20140121133908.jpg
[此贴子已经被作者于2014-1-21 13:39:38编辑过]
|
-- 作者:lsy
-- 发布时间:2014/1/21 13:29:00
--
早就想问这个问题:
专业报表中,可以获取已经安装的打印机名称及默认打印机名称
如何获取系统各种纸张及自定义纸张的大小。
如何设置进纸方式。
如何选择进纸盒。
|
-- 作者:狐狸爸爸
-- 发布时间:2014/1/21 13:40:00
--
呵呵,这个问题可是困惑了很多人,终于解惑,谢楼主,精华!
|
-- 作者:unverse
-- 发布时间:2014/1/21 13:41:00
--
呃,还没有发完图,咋 就成精华了呢。
|
-- 作者:狐狸爸爸
-- 发布时间:2014/1/21 13:43:00
--
因为禁止的问题是打印控件的问题,用代码的方式确实没有办法解决,除非我自己另外重写,但是工作量太大了。
|
-- 作者:unverse
-- 发布时间:2014/1/21 13:45:00
--
以下是引用狐狸爸爸在2014-1-21 13:43:00的发言: 因为禁止的问题是打印控件的问题,用代码的方式确实没有办法解决,除非我自己另外重写,但是工作量太大了。
以前我用其他软件 的时候 就是通过这种方法自定义纸张的然后到软件的设置里去选择该纸张就可以,但通过专业报表没有发现引用自定义纸张的方法,
|
-- 作者:狐狸爸爸
-- 发布时间:2014/1/21 13:50:00
--
是的,专业报表的控件没有提供这个属性。
另外问一下,这么设置之后,是否就是直接像下面这样打印,代码中不需要设置纸张了?
Dim doc As New PrintDoc \'定义一个报表 Dim rt As New prt.RenderTable() \'定义一个表格对象 doc.Body.Children.Add(rt) \'将表格对象加入到报表中 \'下面的代码向表格中填入值 For r As
integer = 0
to
5
For c As
integer = 0
to
5 dim rx As New prt.RenderText \'定义一个文本对象 rx.Text = r & "," & c \'为文本对象设置内容 rt.Cells(r, c).RenderObject = rx \'将文本对象放置在单元格中 Next Next doc.Preview() \'预览报表
|
-- 作者:unverse
-- 发布时间:2014/1/21 13:55:00
--
我的代码中有设置纸张大小的参数,代码如下:
Dim dr As Row = Tables("fssr1").Current \'获取业务 主表 Dim dcs As List(of DataRow) = dr.DataRow.GetChildRows("fssr2") \'子表 If dr.DataRow.RowState <> DataRowState.Unchanged Then MessageBox.Show("请保存单据后再执行打印操作!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return End If If dr IsNot Nothing Dim Doc As new PrintDoc doc.AutoRotate = False Dim pr As DataRow = DataTables("lsconf").Find("f_vkey = \'PRinter\'") \'打印机 If pr.IsNull("f_val") MessageBox.Show("未设置默认打印机,请在系统参数中设置默认打印机!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return Else Doc.PrinterName = pr("f_val") \'设置默认打印机 End If Dim dyzz As DataRow= DataTables("print_conf").find("F_num like \'01%\' and F_name=\'zzdx\'") \'打印纸张 Dim ztpy As DataRow= DataTables("print_conf").find("F_num like \'01%\' and F_name=\'ztpyz\'") \' 整体偏移 Dim mxhg As DataRow = DataTables("print_conf").find("F_num like \'01%\' and F_name=\'SYGD\'") \'明细行高度 Dim pyz As Integer = val(ztpy("F_X")) Dim pys As Integer = val(ztpy("F_Y")) Doc.PageSetting.Width = val(dyzz("f_X")) Doc.PageSetting.Height = val(dyzz("f_Y")) Doc.PageSetting.LeftMargin=1 Doc.PageSetting.BottomMargin =1 Doc.PageSetting.TopMargin=1 Doc.PageSetting.LeftMargin =1
。。。。。。
如果在代码中不指定纸张大小怕是不行吧,我测试一下,稍后回复
[此贴子已经被作者于2014-1-21 13:55:44编辑过]
|
-- 作者:unverse
-- 发布时间:2014/1/21 14:00:00
--
以下是引用狐狸爸爸在2014-1-21 13:50:00的发言:
是的,专业报表的控件没有提供这个属性。
另外问一下,这么设置之后,是否就是直接像下面这样打印,代码中不需要设置纸张了?
Dim doc As New PrintDoc \'定义一个报表 Dim rt As New prt.RenderTable() \'定义一个表格对象 doc.Body.Children.Add(rt) \'将表格对象加入到报表中 \'下面的代码向表格中填入值 For r As
integer = 0
to
5
For c As
integer = 0
to
5 dim rx As New prt.RenderText \'定义一个文本对象 rx.Text = r & "," & c \'为文本对象设置内容 rt.Cells(r, c).RenderObject = rx \'将文本对象放置在单元格中 Next Next doc.Preview() \'预览报表
经测试如果不设置长和宽效果完全一样,可见只要你的纸张够大,打印范围不超过纸张大小和打印机的打印范围,应该是可以实现的,打印出来的位置也完全正确,用专业报表输出就不用指定纸张大小了可以直接通过系统纸张大小来控制输出!
|
-- 作者:狐狸爸爸
-- 发布时间:2014/1/21 14:12:00
--
呵呵,收到,多谢
|