Foxtable(狐表)用户栏目专家坐堂 → [讨论]为什么我写的打印代码,需要大概30秒后才能打印


  共有2600人关注过本帖树形打印复制链接

主题:[讨论]为什么我写的打印代码,需要大概30秒后才能打印

帅哥哟,离线,有人找我吗?
jjjeyes
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2684 威望:0 精华:0 注册:2011/10/29 16:26:00
[讨论]为什么我写的打印代码,需要大概30秒后才能打印  发帖心情 Post By:2018/9/26 10:30:00 [只看该作者]

我用的打印机是热敏打印机,一般打印的时候很快。
但是执行下面一段代码的时候,根据内容的多少,需要等待约30-45秒后才能打印(一般打印40张标签条码)。不知道是什么原因,请大虾帮忙看看!
Dim doc As New PrintDoc '定义一个报表
doc.PageSetting.Width = 40 '纸张宽度为40毫米
doc.PageSetting.Height = 30 '纸张高度为30毫米
doc.AutoRotate = False '禁止自动旋转打印内容
Doc.PageSetting.LeftMargin = 1 '设置左边距
Doc.PageSetting.RightMargin = 1 '设置右边距
Doc.PageSetting.TopMargin = 1 '设置上边距
Doc.PageSetting.BottomMargin = 1 '设置下边距
'下面的代码向表格中填入值
For Each r As Row In Tables("学生信息查询表").Rows
    Dim rt As New prt.RenderTable() '定义一个表格对象
    doc.Body.Children.Add(rt) '将表格对象加入到报表中
    Doc.PrinterName = "Gprinter  GP-3120TL"
    rt.Cells(0,0).text = r("姓名")
    rt.Cells(1,0).text = r("班级名称")
    Dim ccc As New prt.RenderGraphics()
    Dim BarID1 As New BarCodeBuilder
    BarID1.Symbology = Barpro.Symbology.Code128
    BarID1.Code = r("学号")
    BarID1.BarHeight = 15
    BarID1.QuietZoneWidth = 2
    BarID1.DrawOnCanvas(ccc.Graphics,0,0,1)
    rt.cells(2,0).RenderObject = ccc
Next
doc.Print()

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 10:39:00 [只看该作者]

我测试下面代码,几秒后就生成预览了(表A40行),你看看生成预览的速度怎样。

 

Dim doc As New PrintDoc '定义一个报表
doc.PageSetting.Width = 40 '纸张宽度为40毫米
doc.PageSetting.Height = 30 '纸张高度为30毫米
doc.AutoRotate = False '禁止自动旋转打印内容
Doc.PageSetting.LeftMargin = 1 '设置左边距
Doc.PageSetting.RightMargin = 1 '设置右边距
Doc.PageSetting.TopMargin = 1 '设置上边距
Doc.PageSetting.BottomMargin = 1 '设置下边距
'下面的代码向表格中填入值
For Each r As Row In Tables("表A").Rows
    Dim rt As New prt.RenderTable() '定义一个表格对象
    doc.Body.Children.Add(rt) '将表格对象加入到报表中
    'Doc.PrinterName = "Gprinter  GP-3120TL"
    rt.Cells(0,0).text = "111" 'r("姓名")
    rt.Cells(1,0).text = "222" 'r("班级名称")
    Dim ccc As New prt.RenderGraphics()
    Dim BarID1 As New BarCodeBuilder
    BarID1.Symbology = Barpro.Symbology.Code128
    BarID1.Code = "999999999aaabbbccc" 'r("学号")
    BarID1.BarHeight = 15
    BarID1.QuietZoneWidth = 2
    BarID1.DrawOnCanvas(ccc.Graphics,0,0,1)
    rt.cells(2,0).RenderObject = ccc
Next
doc.Preview


 回到顶部
帅哥哟,离线,有人找我吗?
jjjeyes
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2684 威望:0 精华:0 注册:2011/10/29 16:26:00
  发帖心情 Post By:2018/9/26 12:49:00 [只看该作者]

我分析了以上代码,发现就是最后一行有差别,您用的是打印预览,我用的是直接打印,用直接打印可以按我的设计样式完好的打印出来,不过用打印预览的速度是稍微快一点。但存在以下的问题:
首先生成预览后的样式是:
图片点击可在新窗口打开查看此主题相关图片如下:先前.jpg
图片点击可在新窗口打开查看
这个样式是我需要的样式,宽40mm,高30mm的标签。
但是按打印按钮后,预览图马上变成了以下样式:
图片点击可在新窗口打开查看此主题相关图片如下:后来.jpg
图片点击可在新窗口打开查看
条码立刻就变成了纵向排布的了。打印后也全部错了位。
不知道是什么原因,求解!

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 14:31:00 [只看该作者]

1、你的意思是预览比直接打印快?快多少?

 

2、如果仅仅是print慢,应该是你电脑连接的打印机有问题导致的吧?你执行下面的代码print,需要多久?

 

http://www.foxtable.com/webhelp/scr/1167.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
jjjeyes
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2684 威望:0 精华:0 注册:2011/10/29 16:26:00
  发帖心情 Post By:2018/9/26 15:25:00 [只看该作者]

我用直接打印的时候发现:点击我做的打印按钮后,会停留在打印进程这一步,如图:

图片点击可在新窗口打开查看此主题相关图片如下:打印进程.jpg
图片点击可在新窗口打开查看

打印机窗口里打印页数和大小在不断增加(这需要一个过程),当页数达到实际页数后才开始打印!
当然页数越多,需要时间越长。打印一个40页(40行数据)的标签大概需要45秒。

图片点击可在新窗口打开查看此主题相关图片如下:inked打印_li.jpg
图片点击可在新窗口打开查看


我用预览打印的时候:
窗口很快就进入到预览页面,在预览页面按打印键,打印窗口的打印页数和大小也会增加,不过不像直接打印一个数一个数的慢慢增加,而是跳跃性的增加,一下从0就到了11,再跳到20多,再跳到30多,几秒钟就后就开始打印了。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 15:40:00 [只看该作者]

那你可以尝试一次一次的print,而不是最后一次性print。也就是一行print一次。

 

或者试试这样 print 改成

 

Dim ps As new System.Drawing.Printing.PrinterSettings
doc.Print(ps)     '打印

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
jjjeyes
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2684 威望:0 精华:0 注册:2011/10/29 16:26:00
  发帖心情 Post By:2018/9/26 17:03:00 [只看该作者]

你的意思是说,把最后一行的:
doc.Print() ‘直接打印
直接换成:
Dim ps As new System.Drawing.Printing.PrinterSettings 
doc.Print(ps)     '打印

我刚试过,没有出现“打印进程”窗口。但是还是等了40多秒才开始打印!

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 17:08:00 [只看该作者]

那就一行一行打印吧,每次循环生成一个doc,print一次。


 回到顶部
帅哥哟,离线,有人找我吗?
jjjeyes
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2684 威望:0 精华:0 注册:2011/10/29 16:26:00
  发帖心情 Post By:2018/9/26 23:03:00 [只看该作者]

 还有一个问题,如3楼,为什么生成的打印预览后,按打印会成为其他的排版形式?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/26 23:16:00 [只看该作者]

以下是引用jjjeyes在2018/9/26 23:03:00的发言:
 还有一个问题,如3楼,为什么生成的打印预览后,按打印会成为其他的排版形式?

 

预览后打印,有一个不兼容的地方,就是无法设置打印的方向。你可以在打印窗口弹出打印的时候选择 纵向或者横向 来改变。

 

这个是一致以来的bug,没办法处理的。


 回到顶部