posts - 129, comments - 17, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于发票打印

Posted on 2005-10-24 16:50 woow 阅读(573) 评论(0)  编辑 收藏 引用 所属分类: 学习


http://sgreport.yeah.net
http://www.uepoch.com
众合打表,完美支持数据类表格、不规则表格、嵌套表格、票据套打等
在c/s下与在b/s下效果完全一致
首创web打印在服务端运行组件,客户端得到的是纯html页面,而打印显示效果与c/s下完全一致,包括斜线之类的特殊效果

其实你可以用printer.currentx及printer.currenty来控制要打印的文字的位置。
当然,这得调试好久好久。


你可以用一下华表,或者直接用excel吧,那样打出来的效果也挺好的。

我有的
你可以设置一个数据库表,专门用来设置打印位置及打印与否

在程序中做一个设置界面和打印界面,输出时直接调用打印界面。

要的话,请找80027576,给分才行

精确控制打印机的走纸要使用打印机的指令集

自定义纸张,可以先在windows中定义好宽度和高度,然后打发票时调用api使打印机使用自定义纸打印,打报表时使用a4(a3)纸打印。如果相差太远,可加入调整参数,存入数据库,调整好就可正常打印了,下次就不用调整了,你可以程序中加入打印位置矫正功能,使打印机只在某个固定位置打印一个冒号,然后调整参数,直到使冒号位置与预定的位置相同,就算调好了。我也试过在程序中定义自定义纸大小,但也不成功。关于你说的打印完后自动进纸的问题,可参考打印机说明书设置一下即可,每张票打完后自动进到撕纸位置,撕下发票不管它,打下一张时它会自动退回正确位置。如果你还不明白,请去我的主页下载一个“门诊收费系统“,我做的,支持套打发票,其中的详细帮助可供你参考,

这是我以前问过的关于自定义纸张的一个问题
http://www.csdn.net/expert/topic/657/657650.xml?temp=.2023126
likesome(梦龙)和fuxc(Michael)的回答都可以实现。
注意如果是fuxc(Michael)的方法,最好选中纸型立即打印,如果中间插入别的操作可能会打印的纸型不正确。
当时没有解决打印完一张发票后走纸到撕纸位置,不过打印机上有一个走纸键可以走到撕纸位置,也就没再处理。

简单的方法是将ScaleMode 属性设为毫米,不用计算
然后用尺子量就可以了(如果要比例就ScaleHeight ,scalewidth求比例)
打印完调用EndDoc和KillDoc结束打印

只要驱动程序支持自定义纸张,就应能对hight和width设置

Public Sub leavecard_print()
  If MsgBox("打印发货单?", vbQuestion + vbOKCancel, "提示") = vbOK Then
    Dim yy As String
    Dim mm As String
    Dim dd As String
    Dim fpath As String
    On Error GoTo mylable
    mydoc.Close
    appwd.Quit
mylable:
    Call del_doc
    yy = Year(CDate(RTrim(T_date.Text)))
    mm = Month(CDate(RTrim(T_date.Text)))
    dd = Day(CDate(RTrim(T_date.Text)))
    Printer.CurrentX = 0
    Printer.CurrentY = 0
    Printer.Font.name = "宋体"
    Printer.Font.Size = 14
    Printer.CurrentY = Printer.CurrentY + 550
    Printer.CurrentX = 2400
    Printer.Print "浙江华峰实业有限公司" '公司名称
    Printer.Font.name = "宋体"
    Printer.Font.Size = 11
    Printer.CurrentY = 1170
    Printer.CurrentX = 2300
    Printer.Print yy + "     " + mm + "    " + dd '年月日
    Printer.CurrentY = 1638
    Printer.CurrentX = 2400
    Printer.Print Cb_comp.Text  '提货单位
    Printer.CurrentY = 1638
    Printer.CurrentX = 7900
    Printer.Print T_link_man.Text '提货人
    Printer.CurrentY = 2308
    Printer.CurrentX = 2400
    Printer.Print "普通等级/" + T_degree.Text   '等级
    Printer.CurrentY = 2308
    Printer.CurrentX = 5200
    Printer.Print T_breed_code.Text  '编号
    Printer.CurrentY = 2308
    Printer.CurrentX = 8000
    Printer.Print T_store_name.Text    '仓位号
    Printer.CurrentY = 2938
    Printer.CurrentX = 2800
    Printer.Print T_bill_number.Text '提货单号
    Printer.CurrentY = 2938
    Printer.CurrentX = 7500
    Printer.Print T_amount.Text + "  吨" '提货数量
    Printer.CurrentY = 3608 '4308
    Printer.CurrentX = 2800
    Printer.Print T_vehi_comp.Text '承运单位
    Printer.CurrentY = 3608
    Printer.CurrentX = 7500
    Printer.Print T_vehi_tool.Text  '运输工具
    Printer.CurrentY = 4908 '6208
    Printer.CurrentX = 7800
    Printer.Print Cb_makeout_man.Text '开单人
    Printer.EndDoc
    Call Sleep(4000)
    GoTo mylab0
mylab0:
        On Error GoTo mylab1
        Open "LPT1:" For Output As #1
        For i = 0 To 16
            Print #1, ""
        Next
       Close #1
      Exit Sub
mylab1:
  Err.Clear
  Call Sleep(4000)
  GoTo mylab0
End If
End Sub

只有注册用户登录后才能发表评论。