Using a POS-printer (EPSON TM-U210B) in Delphi-app.

Posted on 2001-08-16
Last Modified: 2007-11-27

I am developing an application that uses the EPSON TM-U210B printer. This is a POS-printer (POS=Point Of Sales).

On the EPSON-website, I have found the specific driver and also some example source code to access the printer's functions.

However, these examples are written in Visual Basic.

For example, the printer has a special function to cut off the paper. In VB the code is like:

Printer.FontSize = 10
Printer.FontName = "control"
Printer.Print "F"

OK, I have tried to translate this into Delphi-code by using these lines:

with Printer do
  Canvas.Font.Size := 10;
  Canvas.Font.Name := 'control';

However, this is not working very well. Maybe I made a big mistake by trying to translate the VB-code without asking any help to you guys...

Furthermore, by using the canvas it seems like the printer is very fast running out of memory. Someway it is only possible to add about 20 lines into the canvas-text, or it will delete the last (few) lines.

I hope there is someone who can help me with this.
If you need to have some additional information, please ask!

Thank you in advance.

Question by:roosiedb
  • 3
  • 2
LVL 40

Accepted Solution

RQuadling earned 200 total points
Comment Utility
Printing with these printers is a strange affair in Windows.

Whilst you can use the Windows printer drivers, I have found that writing direct to the port to be far easier.

Assuming you have the printing working, then, to get the cutter working, you will need to identify the port that the printer is connected to, open it, send the cutter code and close the port.

Something like ...

  Device, Driver, Port: Array[0..255] Of Char;
  DeviceMode: THandle;

ComboBox1.Items.Text := Printer.Printers.Text;
Printer.PrinterIndex := ComboBox1.ItemIndex;

Reg := TRegistry.Create;

sPort := Reg.ReadString('Port');

Then, using standard file writing, send the string

#27 + 'i' for Full Cut
#27 + 'm' for Partial Cut.


Richard Quadling.

Expert Comment

Comment Utility
The best way to print on Matrix printer AFAIK is using writeln commands, it's faster and allow you to use the printer commands, take a look at the following:

procedure TForm1.Button1Click(Sender: TObject);
F : TextFile; i : integer;
AssignFile(F,'LPT1');  //Assign the file to the port
Writeln(F,'Test line - 0');
Writeln(F,'Test Line - 1');
Writeln(F, #27#69 + 'Bold Line' + #27#70);
Writeln(F, #15 + 'Compressed Mode Line' + #18);
Writeln(F,#12);        // Eject page

//Demonstrates the usage of the justify function of the printer!
procedure TForm1.Button1Click(Sender: TObject);
  cJustif = #27#97#51;
  cEject = #12;
  { Font Size }
  c10cpi = #18;
  c12cpi = #27#77;
  c17cpi = #15;
  cIExpanded = #14;
  cFExpanded = #20;
  { Font Format }
  cIBold = #27#71;
  cFBold = #27#72;
  cIItalic = #27#52;
  cFItalic = #27#53;
  Text: string;
  F: TextFile;
  Text := c10cpi +
  'This is a test for EPSON LX-300 Printer. ' +
  'This procedure ilustrates the usage of the JUSTIFY function of the printer' +
  'without loosing the font format: ' +
  cIbold + 'BOLD - Bold, ' + cFbold +
  cIItalic + 'ITALIC - Italic, ' + cFItalic +
  c17cpi + 'Condensed (17cpi), ' + c10cpi +
  c12cpi + '12 cpi, ' + c10cpi +
  cIExpanded + 'Expanded.' + cFExpanded +
  ' Remenber This is only a simple and incomplete sample' +
  'you can Do much more if u want to.';
  AssignFile(F, 'LPT1');
  WriteLn(F, cJustif, Texto);
  WriteLn(F, cEject);

Hope this helps!


Author Comment

Comment Utility
It was very difficult to choose between the proposed answers, however, RQuadling's solution worked after I added some code from the other comment. I don't understand because the printer's manual says that #27 + 'f' is cutting off paper, not #27 + 'i' or 'm'... But, as I said, it worked.

I have graded your solution as "average" because I still had to find out what you mean by "using standard file writing" (example?). And I still don't understand why I need to access the registry for just a simple printing job...

I hope you appreciate my honesty here and that you don't kill me???  :-)

Anyway, thank you for your help...
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

LVL 40

Expert Comment

Comment Utility
There is a difference between using the windows drivers and writing to the port directly.

In answer to your points though.

The windows drivers uses a wierd font called "Control" to talk to the printer. The characters you send using this font are very specific. And to be honest with you, I've never got them working as easily as I have with the normal control codes. Control codes aka escape sequences/control strings, normally start with an ESC (char 27) and normally contain keyboard enterable characters. But not always. Also, it is sometimes necessary to send NUL (char 0). This can be quite hard for some languages/programming.

The case of the letters is VERY important! F is not f.

ESC 'f' m n, deals with the delay for handling things like cheque printing or any other bit of paper shoved in. (m and n are delays).

I do not know if ESC 'F' is a real sequence for the TM series.

Sorry about the "standard file writing". Should have done an example.

Thanks for the points though.

If I where you, try and get hold of the Operator's manual for your printer. Normally, they contain the control strings in the appendix along with a full description. From what I can tell, the codes, when applicable, have the same meaning across the entire TM series (I've been doing this for around 11 years and that still holds true, but I think the new TM-HL series may not!).


Richard Quadling.

Author Comment

Comment Utility
Maybe that's what I didn't understand quite well: in the manual there was some example in Visual Basic, with something like: printer.font = "Control". And after that: printer.print "F". And now I am not using the Control-font, that explains everything!! Thank you.

Author Comment

Comment Utility
I have posted another question about this EPSON printer problem. Could you please review this new question for me?


Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now