From: Pepito Grillo on 7 Sep 2009 04:13 Hi. We have to develop a SW to print labels using a Zebra LP2824 printer, which conects to the PC by USB. How may I send the ZPL commands to print what I am supposed to? Is it possible to use fonts like Arial, Times New Roman, etc? Thx in advance.
From: Mike Williams on 8 Sep 2009 03:30 On 7 Sep, 09:13, Pepito Grillo <bar...(a)gmail.com> wrote: > We have to develop a SW to print labels using a Zebra > LP2824 printer, which conects to the PC by USB. I don't use Label Printers myself but you should be able to use your Zebra either by printing stuff to it in the normal way using the VB Printer Object or alternatively by sending data (text, control codes, etc, etc) directly to the printer. The former method probably severely limits what you can do with Label Printers, but is very easy. The latter method enables you to do anything that the printer is capable of, but it requires an in depth knowledge of the various control codes and/or language that your printer understands. I would imagine that printers such as a Zebra Label Printer would come with various user and programming manuals. Do you have these? If not then you should be able to download them in pdf format from the Zebra website. I've just had a quick look and I can see a few different manuals available at: http://www.zebra.com/id/zebra/na/en/index/resource_library/manuals.html > Is it possible to use fonts like Arial, > Times New Roman, etc? As I've said, I've never actually used a Label Printer but I imagine that if your requirements are limited and if you use the VB Printer Object then Windows will allow you to use such fonts and will rasterise them for you and send them to the printer as graphics. However, for most real world tasks on a Label Printer I imagine you will almost certainly need to address the Zebra directly instead of using the VB Printer Object, in which case I'm sure there will be details in one or other of the available manuals explaining how to use such fonts. I've just downloaded and had a very quick look at some of the Zebra LP2824 manuals and it would appear that it has five standard built in fonts, all of which are mono spaced. It does however have the capability of downloading TrueType fonts into its memory and there is some ZebraDesigner Font Downloader software which I imagine will take all the hard work out of that task for you and make it very easy. Once you've uploaded the required TrueType fonts (Arial, Times New Roman or whatever) to your Zebra printer then it should be able to use them and print them very quickly. I imagine that you already have the ZebraDesigner Font Downloader software, but if not then you should be able to obtain it from Zebra, perhaps as a free download. I'm sure there will be Zebra control codes that also enable you to perform such a task anyway, but the Zebra software will obviously be the easier option. > How may I send the ZPL commands to print > what I am supposed to? You won't be able to use the standard VB Printer Object to do stuff like that so you will need to bypass the standard Windows drivers and instead send raw data direct to your printer, as in the following example which can send raw data to any connected printer, including USB connected printers. I've used a String in the example to contain the data sent to the printer and you'll be able to include any necessary control codes etc in the string, but you can easily amend it to use a Byte Array instead if you prefer. As I've already said, I've never actually used a Zebra printer or any other Label Printer and so I don't offhand know what control codes it accepts or whether it requires any initialisation string, so in the example I've just sent some text followed by a standard FormFeed character. I don't know whether the FormFeed character will work with your Zebra, or if it will print the text in its default font without any other initialisation codes, but if any part of it does not work then you will be able to send it the appropriate Zebra Escape sequence instead (either by building the required code bytes into a VB string or by using a Byte array). I'm afraid all this is mostly guesswork at the moment because I don't have a suitable printer on which to try my code but it'll give you a start. In fact I answered your question simply because I saw the word "Zebra" in it and I remember quite some time ago answering some questions about a Zebra printer (questions about page size or printable area or precise positioning of printed elements or something like that as far as I recall?). It was either on this newsgroup or on the microsoft.public.vb.general.discussion group. I don't remember the details now or whether there was anything in it that may also be of interest to you, but it might be worth checking the archives (I can't seem to see it at the moment myself). Anyway, here's the "direct to printer" sample code. It should (hopefully) print "Hello World" and eject the label on your Zebra, although you will be able to use the same code to send anything you wish, including the various control codes. The code as it stands simply sends the data to whatever happens to currently be your Windows default printer, so you will need to set the Zebra as your default printer to try it. It will be very easy to amend it though (if you wish to do so) in such a way that the code picks out the Zebra whether it is your default printer or not. Paste the code into a new VB project (one Form with a Command Button on it) and run the project and click the button. Let me know if it works. By the way, I use VB6 myself and I notice you are using VB5 but I think the code should still work okay in VB5 because I haven't used any VB6 specific stuff in it. Mike Option Explicit Private Declare Function OpenPrinter Lib "winspool.drv" _ Alias "OpenPrinterA" (ByVal pPrinterName As String, _ phPrinter As Long, ByVal pDefault As Long) As Long Private Declare Function StartDocPrinter Lib "winspool.drv" _ Alias "StartDocPrinterA" (ByVal hPrinter As Long, _ ByVal Level As Long, pDocInfo As DOCINFO) As Long Private Declare Function StartPagePrinter Lib "winspool.drv" _ (ByVal hPrinter As Long) As Long Private Declare Function WritePrinter Lib "winspool.drv" _ (ByVal hPrinter As Long, pBuf As Any, _ ByVal cdBuf As Long, pcWritten As Long) As Long Private Declare Function ClosePrinter Lib "winspool.drv" _ (ByVal hPrinter As Long) As Long Private Declare Function EndDocPrinter Lib "winspool.drv" _ (ByVal hPrinter As Long) As Long Private Declare Function EndPagePrinter Lib "winspool.drv" _ (ByVal hPrinter As Long) As Long Private Type DOCINFO pDocName As String pOutputFile As String pDatatype As String End Type Private Sub Command1_Click() Dim myPrinter As Long, myDoc As Long, MyDocInfo As DOCINFO Dim sWrite As String, charsWritten As Long, retVal As Long retVal = OpenPrinter(Printer.DeviceName, myPrinter, 0) If retVal = 0 Then MsgBox "Printer Not found" Exit Sub End If MyDocInfo.pDocName = "Any Name" MyDocInfo.pOutputFile = vbNullString MyDocInfo.pDatatype = vbNullString myDoc = StartDocPrinter(myPrinter, 1, MyDocInfo) Call StartPagePrinter(myPrinter) ' ' send whatever you wish here sWrite = "Hello World." & vbCrLf retVal = WritePrinter(myPrinter, ByVal sWrite, _ Len(sWrite), charsWritten) ' sWrite = vbFormFeed retVal = WritePrinter(myPrinter, ByVal sWrite, _ Len(sWrite), charsWritten) retVal = EndPagePrinter(myPrinter) retVal = EndDocPrinter(myPrinter) retVal = ClosePrinter(myPrinter) End Sub
From: Martin Trump on 9 Sep 2009 13:27 Pepito Grillo wrote: > Hi. > > We have to develop a SW to print labels using a Zebra LP2824 printer, > which conects to the PC by USB. How may I send the ZPL commands to > print what I am supposed to? Is it possible to use fonts like Arial, > Times New Roman, etc? Pepito, please regard this as utterly unreliable, just a guess. I don't know what ZPL means. It really needs an expert, not me :-) I have an HP printer, this works for me. Option Explicit Private Sub Form_Load() Dim i As Long For i = 0 To Printers.Count - 1 If InStr(Printers(i).DeviceName, "hp") Then Exit For End If Next i Set Printer = Printers(i) Printer.FontSize = 18 Printer.Print "ABC*" Printer.EndDoc End Sub Regards
From: Mike Williams on 9 Sep 2009 15:17 On 9 Sep, 18:27, Martin Trump <mar...(a)wmeadow.demon.co.uk> wrote: > Pepito <snip> I have a HP printer, this works for me. > <snip> > Printer.FontSize = 18 > Printer.Print "ABC*" > Printer.EndDoc Hi Martin. Nice to see you are still out and about. How's it going up there in Trump Towers these days :-) Your suggested code which uses the installed Windows printer drivers for the Zebra (via the VB Printer Object) will almost certainly work with the Zebra in much the same way as they work with your HP, and so probably will many of the other various Printer Object methods (True Type font selection, printer's bar code fonts, font size, text output, line graphics, etc). In my own response I sort of skipped over those functions (with just a brief mention of them) and I concentrated on giving the OP code to allow him to use the alternative method of bypassing the Zebra Windows printer driver and instead sending raw data directly to the printer, since this will allow him to send it the ZPL commands that he specifically asked for. > I don't know what ZPL means <snip> The ZPL to which the OP is referring is as far as I know is a small proprietry language specifically designed for controlling Zebra label printers. I've downloaded the printer manuals from the Zebra web page, just out of interest, and they are for something called for EPL and EPL2 (after a bit of Googling it appears that Zebra was at one point in time called Eltron, hence the E instead of the Z). It's not really a programming language, but more of a straightforward printer control set, something similar to the Epson EscP and NEC and various other printer control languages that became industry standards when the old fashioned impact dot matrix printers were in common use. Essentially you control the printer by sending it various control characters and codes (what we used to call Escape sequences in the old days!). In this way you can gain complete control over the printer and make it do things that it would not be able to do using the VB Printer Object methods. I don't have any experience of controlling Zebra printers or other label printers of course, having never used one, but I imagine it will be similar in many ways to the way that I used to drive my old Citizen dot matrix printer about twenty five years ago! Mike
|
Pages: 1 Prev: Creating the same effect as Outlook's grouped messages window Next: DBgrid in VB6 |