我在VB中通过printer行销售单据的打印,由于随着客户购卖东西的多少来动态生成单据的长度(有可能很窄,也有可能比较长),在刚开始时用printer的各种命令设好要打印单据格式和数据后,用printer.enddoc命令来送往打印机打印时,即使 一两条记录它也要走完一页纸(而客户的要求则是打在什么地方便停在那里,下一客户单了就跟在后面打印)。后经查阅资讯,说将printer.papersize设为256(自定义大小),再通过printer.heigth  printer.width 设为计算后的值就可以了。可程序在执行到printer.papersize=256却提示“无效属性值”错误,也就是无法完成。后又查到说该方法只能在98下正确实现,而在2000/XP下需要通过一些别的办法来实现,可都没有给出详细的实现方法(我指在VB程序中)。那位知道如何通过VB在2000下实现打印纸大小的动态设置,或通过printer进行不规则长度连续打印的好办法,快帮帮我吧!明天就要给交货了,很急的!!!····

解决方案 »

  1.   

    vbPRPSLetter 1 信笺, 8 1/2 x 11 英寸
    vbPRPSLetterSmall 2 +A611 小型信笺, 8 1/2 x 11 英寸
    vbPRPSTabloid 3 小型报, 11 x 17 英寸
    vbPRPSLedger 4 分类帐, 17 x 11 英寸
    vbPRPSLegal 5 法律文件, 8 1/2 x 14 英寸
    vbPRPSStatement 6 声明书,5 1/2 x 8 1/2 英寸
    vbPRPSExecutive 7 行政文件,7 1/2 x 10 1/2 英寸
    vbPRPSA3 8 A3, 297 x 420 mm
    vbPRPSA4 9 A4, 210 x 297 mm
    vbPRPSA4Small 10 A4小号, 210 x 297 mm
    vbPRPSA5 11 A5, 148 x 210 mm
    vbPRPSB4 12 B4, 250 x 354 mm
    vbPRPSB5 13 B5, 182 x 257 mm
    vbPRPSFolio 14 对开本, 8 1/2 x 13 英寸
    vbPRPSQuarto 15 四开本, 215 x 275 mm
    vbPRPS1&H14 16 10 x 14 英寸
    vbPRPS11x17 17 11 x 17 英寸
    vbPRPSNote 18 便条,8 1/2 x 11 英寸
    vbPRPSEnv9 19 #9 信封, 3 7/8 x 8 7/8 英寸
    vbPRPSEnv10 20 #10 信封, 4 1/8 x 9 1/2 英寸
    vbPRPSEnv11 21 #11 信封, 4 1/2 x 10 3/8 英寸
    vbPRPSEnv12 22 #12 信封, 4 1/2 x 11 英寸
    vbPRPSEnv14 23 #14 信封, 5 x 11 1/2 英寸
    vbPRPSCSheet 24 C 尺寸工作单
    vbPRPSDSheet 25 D 尺寸工作单
    vbPRPSESheet 26 E 尺寸工作单
    vbPRPSEnvDL 27 DL 型信封, 110 x 220 mm
    vbPRPSEnvC3 29 C3 型信封, 324 x 458 mm
    vbPRPSEnvC4 30 C4 型信封, 229 x 324 mm
    vbPRPSEnvC5 28 C5 型信封, 162 x 229 mm
    vbPRPSEnvC6 31 C6 型信封, 114 x 162 mm
    vbPRPSEnvC65 32 C65 型信封,114 x 229 mm
    vbPRPSEnvB4 33 B4 型信封, 250 x 353 mm
    vbPRPSEnvB5 34 B5 型信封,176 x 250 mm
    vbPRPSEnvB6 35 B6 型信封, 176 x 125 mm
    vbPRPSEnvItaly 36 信封, 110 x 230 mm
    vbPRPSEnvMonarch 37 信封大王, 3 7/8 x 7 1/2 英寸
    vbPRPSEnvPersonal 38 信封, 3 5/8 x 6 1/2 英寸
    vbPRPSFanfoldUS 39 U.S. 标准复写簿, 14 7/8 x 11 英寸
    vbPRPSFanfoldStdGerman 40 德国标准复写簿, 8 1/2 x 12 英寸
    vbPRPSFanfoldLglGerman 41 德国法律复写簿, 8 1/2 x 13 英寸
    vbPRPSUser 256 用户定义看看这里有没有你需要的大小!!
      

  2.   

    http://support.microsoft.com/default.aspx?scid=kb;EN-US;282474
      

  3.   

    vbPRPSUser 256 用户定义     在2000下根本没法用。提示“无效属性值”
    帮忙啊!最好是以前实战检验过的方法。
      

  4.   

    由于windows2000/NT系列不支持自定义纸张的设置,如果想进行自定义纸张的设置,请到“开始”-》“设置”-》“打印”,进入“打印机”界面后,不要选择任何的项目,此时设置“文件”菜单下的“服务器属性”,选择“创建新格式”同时设置“宽度”和“高度”等值(与自定义纸张的数值一致),再在“格式描述”中输入你要的名字,最后点击“保存格式”。这张所谓的自定义格式纸张才可以用,其它设置方法同以前
      

  5.   

    Private Type POINTAPI
        x As Long
        y As Long
    End Type
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    Private Type PAGESETUPDLG
        lStructSize As Long
        hwndOwner As Long
        hDevMode As Long
        hDevNames As Long
        flags As Long
        ptPaperSize As POINTAPI
        rtMinMargin As RECT
        rtMargin As RECT
        hInstance As Long
        lCustData As Long
        lpfnPageSetupHook As Long
        lpfnPagePaintHook As Long
        lpPageSetupTemplateName As String
        hPageSetupTemplate As Long
    End Type
    Private Declare Function PAGESETUPDLG Lib "comdlg32.dll" Alias "PageSetupDlgA" (pPagesetupdlg As PAGESETUPDLG) As LongPrivate Sub Command1_Click()
      ShowPageSetupDlg
    End SubPrivate Function ShowPageSetupDlg() As Long
        Dim m_PSD As PAGESETUPDLG
        'Set the structure size
        m_PSD.lStructSize = Len(m_PSD)
        'Set the owner window
        m_PSD.hwndOwner = Me.hWnd
        'Set the application instance
        m_PSD.hInstance = App.hInstance
        'no extra flags
        m_PSD.flags = 0    'Show the pagesetup dialog
        If PAGESETUPDLG(m_PSD) Then
            ShowPageSetupDlg = 0
        Else
            ShowPageSetupDlg = -1
        End If
    End Function
      

  6.   

    根据记录数据打印相应长度你可以直接对print 对象写代码
      

  7.   

    “根据记录数据打印相应长度你可以直接对print 对象写代码”
    楼上能不能说的详细点,或给出具体的实现。谢谢了
      

  8.   

    前提条件:使用水晶报表
    dim x as long
    dim y as long x=自定纸宽
    y=自定纸高
    oReport.SetUserPaperSize x, y
    set ReportViewer.ReportSource=oReport
    ReportViewer.Show