使用fnthex32把汉字转换为图形点阵后,调用^XG打印输出到条码打印机,怎样旋转90度。谢谢。

解决方案 »

  1.   

    fnthex32把汉字转换为图形点阵?? 需要那么麻烦吗?直接把汉字放到Text1或Label, 将Text1或Label1存为图片再旋转90度,再打印Picture1不就好了吗?如果使条码旋转,则先将Text1或文字变量转为Code39 EAN13等条码图型画到Picture1,再旋转,再打印.
      

  2.   

    你的字库是什么格式的,cbm666你的做法也是俺的做法,但未必是楼主的做法。俺以前的字库每32个字节表示汉字,每两个字节表示一行,一共16行。
      

  3.   

    呵呵, 我参展出差在外26号才回去不然我便可以贴出"楼主可能需要的"代码了, 出差前刚刚替公司完成了楼主的需求旋转90与180度并将字体放大24*24 24*48 48*48... 这主要看楼主的条码打印机不同而有不同的代码写法, 一种是送出打印位置XY,与名称信息,字体字号与旋转角度等,由条码机自动转换为条码打印, 另种是需我们自己先转换为条码后再送出至打印机打印.只有劳驾 Jennyvenus 同志先费心一下帮楼主解决啦.
      

  4.   

    谢谢各位,确实可以使用cbm666的做法,但如何截取窗体为图片再旋转呢,有没有代码
    [email protected]
      

  5.   

    我主要zpl脚本来打印的,我贴出来大家一起学习Dim MAX_BUFFER As Integer, nCount As Integer
    Dim cBuf As String * 21000
    Dim temp, temp1 As String
    nCount = GETFONTHEX(txtpm.Text, "宋体", "chnstr02", 0, 30, 0, 1, 0, cBuf)
    temp = Mid(cBuf, 1, nCount)nCount = GETFONTHEX(cmbdj.Text, "宋体", "chnstr01", 0, 30, 0, 1, 0, cBuf)
    temp1 = Mid(cBuf, 1, nCount)Dim filehandle    As Integer
    Dim labelstring As Stringlabelstring = labelstring & "^XA"
    labelstring = labelstring & "^CW1"
    labelstring = labelstring & "^FWR"labelstring = labelstring & "^FO250,180^A0,40,40^FD" & txtXh.Text & "^FS"
    labelstring = labelstring & "^FO350,180^A0,40,40^FD" & txtjz.Text & " Kg^FS"
    labelstring = labelstring & "^FO450,180^A0,40,40^XGchnstr01,1,1^FS"
    labelstring = labelstring & "^FO520,180^A0,40,40^FD" & cmbPh.Text & "^FS"
    labelstring = labelstring & "^FO600,180^A0,40,40^FWR^XGchnstr02,1,1^FS"'打印图片labelstring = labelstring & "^FO350,630^A0,40,40^FD" & txtMz.Text & " Kg^FS"
    labelstring = labelstring & "^FO450,630^A0,40,40^FD" & cmbTs.Text & "^FS"
    labelstring = labelstring & "^FO520,630^A0,40,40^FD" & cmbNx.Text & "^FS"
    labelstring = labelstring & "^FO600,630^A0,40,40^FD" & txtGg.Text & "^FS"
    labelstring = labelstring & "^FO100,900^A0N^BY4^BIN,100,Y,N"
    labelstring = labelstring & "^FD" & txtXh.Text & "^FS"
    labelstring = labelstring & "^XZ"
    'labelstring = "^XA^FO250,180^A0,40,40^FDABCEDE^FS^XZ"filehandle = FreeFile
    'Open "LPT1 " For Output As filehandle
    'Print #filehandle, labelstring
    'Close filehandleOpen "LPT1:" For Binary Access Write As #1
            Put #1, , temp
            Put #1, , temp1
            Put #1, , labelstring
    Close #1 
      

  6.   

    旋转有一个极简单但是速度慢的做法。for j = 0 to 高
       for i = 0 to 宽
          p = point( i, j )
         pset( j, i ), p
       next j
    next i
      

  7.   

    Option ExplicitPrivate Function xuanzhuan(ByVal fnt As String) As String
        Dim a(0 To 31) As Long
        Dim b(0 To 15, 0 To 15) As Long
        
        Dim i As Long
        Dim j As Long
        Dim k As Long
        
        fnt = Replace(fnt, " ", "")
        Dim l As Long
        
        l = Len(fnt)
        l = Int(l / 2) * 2      '取整
        
        Dim p As String
        
        For i = 1 To l - 2 Step 2
            p = Mid(fnt, i, 2)
            a(Int(i / 2)) = Val("&h" & p)
        Next i
        
        Dim bit As Byte
        For i = 0 To 15     '16行
            For j = 0 To 1      '每行2字节
                For k = 7 To 0 Step -1
                    bit = a(i * 2 + j) \ (2 ^ k) '取出来一个bit,从高位开始取
                    bit = bit And 1
                    Debug.Print bit;
                    '往b()里面放
                    If bit Then
                        'b(15 - (1 - j) * 8 - k, (15 - i)) = 1          '右转90度
                        b((1 - j) * 8 + k, i) = 1               '左转90度
                    End If
                Next k
            Next j
            Debug.Print
        Next i
        Debug.Print
        For i = 0 To 15     '16行
            For j = 0 To 15      '16个
                Debug.Print b(i, j);
            Next j
            Debug.Print
        Next i
        Debug.Print
        
        Dim ss As String
        Dim tt As Long
        Dim r As String
        For i = 0 To 15
            For j = 0 To 1
                tt = 0
                For k = 7 To 0 Step -1
                    If b(i, j * 8 + k) Then
                        tt = tt Or 2 ^ k
                    End If
                Next k
                If tt < 16 Then
                    ss = ss & "0" & Hex$(tt)
                Else
                    ss = ss & Hex$(tt)
                End If
            Next j
            'Debug.Print
        Next i
        
        xuanzhuan = ss
    End FunctionPrivate Sub Command1_Click()
        Dim s As String
        Dim i As Long
        
        For i = 0 To 15
            s = s & "F0"
        Next i
        For i = 0 To 15
            s = s & "00"
        Next i
        's = "F0F0..............0000"
        '旋转完应该是
        
        Debug.Print xuanzhuan(s)
    End Sub
      

  8.   

    '添加 Picture1 Picture2 Text1 Command1Option Explicit
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Const Pi = 3.1415926
    Dim i%, X%, Y%, X1%, Y1%, X2#, Y2#, X3#, y3#, JiaoDu#, HuDu#, hMemDc&, lngDesktopHwnd&, lngDesktopDC&
    Private Sub Form_Activate()
       Command1.Caption = "旋 转"
       '设置窗体属性并置中
       Me.BorderStyle = 0 : Me.Caption = ""
       Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
       '设置 Picture1 属性
       With Picture1
          .ScaleMode = vbPixels
          .AutoRedraw = True
          .Width = Text1.Width
          .Height = Text1.Height
          .Left = Screen.Width
       End With
       '设置 Picture2 属性
       With Picture2
          .ScaleMode = vbPixels
          .AutoRedraw = True
          .Width = Text1.Width * 1.1
          .Height = Text1.Width * 1.1
       End With
       '设置 Text1 属性
       With Text1
          .BackColor = vbBlue
          .ForeColor = vbWhite
          .FontSize = 20
       End With
    End SubPrivate Sub Command1_Click()
       '抓取 Text1的图片
       lngDesktopHwnd = GetDesktopWindow
       lngDesktopDC = GetDC(lngDesktopHwnd)
       Call BitBlt(Picture1.hdc, 0, 0, Text1.Width, Text1.Height, lngDesktopDC, (Me.Left + Text1.Left) \ 15, (Me.Top + Text1.Top) \ 15, vbSrcCopy)
       Picture1.Picture = Picture1.Image
       '************** 开始旋转 ***************
       For i = 0 To 360 Step 5
          DoEvents
          Picture2.Cls
          JiaoDu = i '旋转角度
          If JiaoDu = 360 Then JiaoDu = 0
          HuDu = JiaoDu * Pi / 180 'VB是以弧度来计算的,所以要先将角度转为弧度.
          For X = 0 To Picture2.ScaleWidth
             X1 = X - Picture2.ScaleWidth \ 2
             For Y = 0 To Picture2.ScaleHeight
                Y1 = Y - Picture2.ScaleHeight \ 2
                X2 = X1 * Cos(-HuDu) + Y1 * Sin(-HuDu)
                Y2 = Y1 * Cos(-HuDu) - X1 * Sin(-HuDu)
                X3 = X2 + Picture1.ScaleWidth \ 2
                y3 = Y2 + Picture1.ScaleHeight \ 2
                If X3 > 0 And X3 < Picture1.ScaleWidth - 1 And y3 > 0 And y3 < Picture1.ScaleHeight - 1 Then Picture2.PSet (X, Y), Picture1.Point(X3, y3)
             Next Y
          Next X
       Next i
    End Sub
      

  9.   

    用“chnstr02”时有错?
    不用这个参数正常,该怎么办