关于Datareport打印自定义纸张的奇怪问题

hnhjz 2007-12-27 08:37:38
自定义纸张的格式为:
宽:21cm
长:14cm
注意:是宽>长,所以datareport会自动识别后将打印方向变为横向(就是要通过代码来纠正这一点)。
但是因为纸只有这么长,所以一定要纵向打印才符合要求。

在Datareport中设置打印方向为纵向打印,在预览时显示纸张宽度不够;设置为横向打印,则打印出来走纸方向为横向,不对。
在Datareport打印或者预览之前,通过打印机对话框修改打印方向为纵向打印,则打印出来的结果才是正确的。

因为是大量票据打印,不可能要求操作员每次都去人工调整打印方向,这种问题怎么解决?明明正确的打印方向是纵向,宽度也够。

环境:VB SP6,XP,打印机:EPSON EPSON LQ-300K+II

以前有人在这上面问到过,但我参考方法没有成功,望各位赐教。
http://topic.csdn.net/u/20070608/10/79dd3cde-5ffb-49bc-9dfa-7103929b36c5.html
...全文
790 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyehuahong 2010-07-27
  • 打赏
  • 举报
回复
上面那位先生,你电话是多少啊?方便联系一下,电话教一下吗?
shuisjshuisj 2008-01-09
  • 打赏
  • 举报
回复
hnhjz,你有没有现成的ActiveReport安装软件哦,发一个给我好吗?我的邮箱是shuisj@sohu.com 我昨天下了一个,但是没法安装,谢谢你啊!
hnhjz 2008-01-09
  • 打赏
  • 举报
回复
通过我的总结:DataReport应该无法解决这个问题。

幸亏用了Active Report2.0 一切问题都搞定了
左右边距在File-page setup里设置,关于中文字体为什么会是倒的,也在那里设置Normal的字体就可以了。

非常感谢vbman2003的帮忙~ 辛苦你了,谢谢!!!
hnhjz 2008-01-08
  • 打赏
  • 举报
回复
我下载了一个1.1版本,不好用,昨天试了,打出的汉字变成乱码。
试过2.0的版本,设置左右边距又不行。
请问vbman2003 ,你有没有好用的版本啊??能不能给我发一份呢
hejianzh@163.com
谢谢。。。。。。
幻影时空 2008-01-08
  • 打赏
  • 举报
回复
宽:21cm
长:14cm (14.5)

这指应该的规格应该是叫A5纸吧? 呵呵!

换个纸的类型不就行了吗?

用"A5"纸的类型, 使用 "横向" 就是可以满足了吧? 应该.... 我没有看太多讨论的内容:!(

只是小猜一下!
vbman2003 2008-01-06
  • 打赏
  • 举报
回复
呵呵,这样的问题还不少。不过我的那些DataReport报表都是以前写的了。后来做报表一直在用ActiveReport,你也可以试一下这个,比DataReport好使许多
hnhjz 2008-01-06
  • 打赏
  • 举报
回复
还有这个贴子也是:http://topic.csdn.net/t/20050818/17/4217142.html
vbman2003 2008-01-06
  • 打赏
  • 举报
回复
还有,你要在DataReport_Initialize事件中去掉所有Orientation属性的相关代码
vbman2003 2008-01-06
  • 打赏
  • 举报
回复
我的环境和你一样。VB6+SP6+XP
我已经清楚你的意思了
在Activate事件中设置一下Me.Orientation=rptOrientPortrait纵向打印,这在不使用show方法,直接用无预览打印:
datareport1.printreport false方式下是可以的。 用show方法有时第一次打印不成功,很郁闷
你测试下吧

hnhjz 2008-01-06
  • 打赏
  • 举报
回复
shuisjshuisj 的问题跟我的一样,你有没有解决啊??
http://topic.csdn.net/u/20071225/20/576b39c7-bcb4-4cc9-a4e3-3094076674c1.html
hnhjz 2008-01-06
  • 打赏
  • 举报
回复
VB.NET code
Private Sub DataReport_Activate()
Me.Orientation = rptOrientPortrait
End Sub

我这儿这样就可以了
不过在打印预览中依然是横向打印哦,不过打印就正确了
.......我用你的报表测试的,但愿你那儿也行


-----------------------------------------
你用的是VB.net吧,我用的是VB6.0+SP6才有这样的问题。
hnhjz 2008-01-06
  • 打赏
  • 举报
回复
谢谢vbman2003 的回复,真是辛苦你了,呵呵
不过试过你上面的代码了,还是不行。

宽*高为21*14,宽大于高,设计和预览的时候看上去肯定是横向的,这是对的,但打印时,一定不要横向出纸,我需要的是,打印时,走纸方向是纵向的,也就是出纸的方向跟纸上的字的方向是一致的,
否则横向打印的话,打印的时候,出纸方向跟字的方向是垂直的,字会顺时钟旋转了九十度,也就是打完整个一页后,实际打印出来的宽度才14(没有达到原本的宽21),高为21,这样就会占到原本只有14CM高度的两张纸上了,而且打印出来的效果也不对。

纠其原因就是因为不知是打印机还是DataReport,因为识别到自定义纸张的宽大于高,所以自动将原本设置好的纵向走纸变成了横向走纸,导致这个错误的发生。打印时,每次都需要用户把打印方向改回纵向才能打印正确。

这样说,应该明白我的意思了吧,可能实在是很少人碰到过这样的问题,所以怎么说也不会到底怎么回事,但只要试过肯定明白了。
shuisjshuisj 2008-01-06
  • 打赏
  • 举报
回复
你有没有现成下载了的ActiveReport,给我一个好吗?我们一起研究吧
我的邮箱:shuisj@sohu.com
vbman2003 2008-01-06
  • 打赏
  • 举报
回复
这样试试

Private Sub DataReport_Activate()
Me.Orientation = rptOrientPortrait
End Sub

我这儿这样就可以了
不过在打印预览中依然是横向打印哦,不过打印就正确了
.......我用你的报表测试的,但愿你那儿也行
竟然有这样的事,datareport啊想说受你是件不容易的事......呵呵
shuisjshuisj 2008-01-06
  • 打赏
  • 举报
回复
哦,是吗?我还没有试呢
我用报表也是2007年才开始用的,ActiveReport我还没有用过呢
我明天也下载ActiveReport来试一下
hnhjz 2008-01-06
  • 打赏
  • 举报
回复
楼上的兄弟,不用试了,我试过了,不行。

辛苦vbman2003了,非常感谢你的热情帮助,非常谢谢!!!!

我现在也改用ActiveReport了,但是存在一个问题就是:

因为中间有某些数据要进行人为的处理,所以我需要将一个记录集(rst1)中的数据动态地加入到另一个Recordset中(rst2),其中有append增加字段的操作,然后将rst2赋给ADO对象,即:
DataControl1.datasource=rst2
然后再加入字段的属性(或者在属性里设置也一样)
field1.datasource=DataControl1
field1.DataField=id
但是显示的时候不知道为什么,总是只显示rst2中的最后一条记录,根据调试的时候,rst2.recordcount=8,应该有8条记录才对。

哪位兄弟能帮忙指教一下啊,我也是刚用这个报表,不熟。
shuisjshuisj 2008-01-06
  • 打赏
  • 举报
回复
我的问题就是一直没有解决.
不预览直接打印可以呀???很难想象,还要在报表的Activate中设置一下方向就可以,我回去再试一下.
不过还要非常谢谢vbman2003!!!!,给了我们很多指点.
vbman2003 2008-01-06
  • 打赏
  • 举报
回复
恩恩,我好象也遇到这个问题了,明白你说什么了
我刚才在自己家里的机器上试了下,和你那个图对上了.......
vbman2003 2008-01-06
  • 打赏
  • 举报
回复
我是真晕了,这么多人有这样的问题,看来我是没遇到过你们所说的问题,所以我没明白你们的意思,上面我也是瞎说,嘿嘿.......

我这儿用的24*14自动连续进纸,报表宽度24(预览时看了下打印机是横向打印),走纸高度14,销售采购单据,每天打印单据近千,一切正常。
我给其它公司做的datareport也都正常
郁闷......

试了下楼主的代码,如果报表是21宽度,当然应该是横向打印,无论是用LQ680还LQ300,,自动连续进纸,走纸打印都正常。




有点不死心,再看LZ的问题:
---------------------------------------------------------------------------------------------------------------
自定义纸张的格式为:
宽:21cm
长:14cm
注意:是宽> 长,所以datareport会自动识别后将打印方向变为横向(就是要通过代码来纠正这一点)。
但是因为纸只有这么长,所以一定要纵向打印才符合要求。
----------------------------------------------------------------------------------------------------------------

这句话非常不解:“但是因为纸只有这么长,所以一定要纵向打印才符合要求。”
你这个纸张,横向打印报表宽度是21,走纸长度是14。这不是你想要的结果?

还有并不是“datareport会自动识别后将打印方向变为横向”,这个是打印机识别的,不管你当前纸张是宽大于高或者是高大于宽,只要你打印方向大于走纸方向就是横向打印,打印方向小于走纸方向就是纵向打印。就如你的情况,报表宽度要21,走纸高度14,,就是横向打印,即使你将纸张定义为14*21也是如此,当然当你这样14*21定义纸张后,你必须在报表代码中设置横向打印,不然就会报报表宽度大于纸张宽度的错误。

就说这些了,我是实在帮不上你了......




vbman2003 2008-01-06
  • 打赏
  • 举报
回复
找到我datareport报表程序的源码了
全部是用Rpt.PrintReport False方法无预览直接打印
经测试,用Rpt.PrintReport 方法打印报表,不存在Rpt.Show预览报表,然后打印出现的打印不正确的问题
先前也没弄清LZ所说的情况,乱说一气,在此说声抱歉


加载更多回复(40)

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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