VB6 を使用して、シリアル ポート経由で Zebra ラベル プリンターに画像を印刷しようとしています。さまざまなファイル形式 (BMP のさまざまなビット深度) を試しましたが、ビット深度 4 の画像に最も近くなりました (実際に印刷されたものは、使用している画像とはあまり似ていません)。
いずれにせよ、プリンターは白黒しか印刷できないため、ビット深度 1 が必要になると思いますが、ファイルを送信しても出力が得られません。これは、プリンターがより多くのデータを期待しているため、印刷を開始していないためだと思います。私が現在持っているコードは次のとおりです。
Private Type BITMAPFILEHEADER
bfType As Integer
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type
Private Sub cmdImage_Click()
Dim BMPFileHeader As BITMAPFILEHEADER
Dim BMPInfoHeader As BITMAPINFOHEADER
Dim BMPRGBQuad() As RGBQUAD
Dim fFile As Integer
Dim bImage() As Byte
Dim padding As Integer
fFile = FreeFile
Open "img1.bmp" For Binary Access Read As fFile
Get fFile, , BMPFileHeader
Get fFile, , BMPInfoHeader
Select Case BMPInfoHeader.biBitCount
Case 1
ReDim BMPRGBQuad(1)
Case 4
ReDim BMPRGBQuad(15)
Case 8
ReDim BMPRGBQuad(255)
End Select
If BMPInfoHeader.biBitCount < 24 Then
Get fFile, , BMPRGBQuad()
End If
ReDim bImage(BMPInfoHeader.biSizeImage)
Get fFile, , bImage
Close fFile
padding = 32 - ((BMPInfoHeader.biWidth * BMPInfoHeader.biBitCount) Mod 32)
If padding = 32 Then padding = 0
padding = padding \ BMPInfoHeader.biBitCount
com.output = "N" & vblf
com.Output = "GW50,50," & (BMPInfoHeader.biWidth + padding) / 8 & "," & BMPInfoHeader.biWidth & ","
com.Output = bImage
Send vbLf & "P1,1"
End Sub
参照用の Zebra Web サイトのサポート記事は次のとおりです。
プリンターは私のコマンドを受け入れており、正しく接続されています。バーコードなどの印刷に問題はありません。プリンターはTLP2742ですが、EPLを使用するすべてのプリンターでアプローチは同じであると思います。
編集 2: ほとんどが機能するコードを追加しました。これは、上記のコードと同じ問題に関する質問です。