By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,369 Members | 1,188 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,369 IT Pros & Developers. It's quick & easy.

Printer language & sending commands

P: n/a
Hello,

I can't find a way to send printer specific language codes to printer.

Part of my code :
String sString = "B50,0,0,3,1,2,50,B," + "12345678901234567890";
Font fFont = new Font("Arial", 16);
SolidBrush bBrush = new SolidBrush(Color.Black);
PointF pPoint = new PointF(150.0F, 150.0F);
ev.Graphics.DrawString(sString, fFont, bBrush, pPoint);

First part of the sString should tel my printer to print a barcode. But all
I get is the whole sString contens printed out as-it-is.
I assume the problem is that I send graphical representation of sString to
printer and not a sequence of characters.
Should I try Streams or ......?????

Printer is Eltron TLP2046 BarCode Printer

thx,
Damijan the Puzzled
--
Programming today is a race between software engineers striving to build
bigger and better idiot-proof programs, and the Universe trying to produce
bigger and better idiots. So far, the Universe is winning.
Nov 16 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Hi !

You need to send the data raw to the printer, otherwise Windows will eat the control codes alive.

First of all read this article:
HOW TO: Send Raw Data to a Printer by Using Visual C# .NET
http://support.microsoft.com/?kbid=322091

Copy the article code into a classfile.
Then you'll have to do something like the code below. (sorry about the formating )

(Note: The SendDocTo Printer is my addon to the article, where I have added a few methods so I could
pass a memorystream, and stream from a embedded resource file etc.
I have a lot of experience with Eltron Orion/2443 and Zebra 2443/2444 and DataMax label printers,
but almost everything I've done is done in Delphi. I've jsut started porting this stuff to C#
myself. Anyway, if you're stucked - contact me and I can see if I can help you - no garantee though
:)
<snip>
private void btnPrint2_Click(object sender, System.EventArgs e)
{
PrintDialog pd = new PrintDialog();
pd.PrinterSettings = new PrinterSettings();
if (DialogResult.OK == pd.ShowDialog(this))
{
MemoryStream memStrm = new MemoryStream();
StreamWriter sw = new StreamWriter(memStrm);
sw.WriteLine("\x02L");
sw.WriteLine("H07");
sw.WriteLine("D11");
sw.WriteLine("19110080200002510K Ny linje");
sw.WriteLine("19110080100002510K OHM 1/4 WATT");
sw.Flush();
sw.WriteLine("1a6210000000050590PCS");
sw.WriteLine("E");
sw.WriteLine("");
sw.Flush();

memStrm.Position = 0;
LabelPrint.SendDocToPrinter(pd.PrinterSettings.Pri nterName,memStrm);
sw.Close();

</snip>

<snip2>
private void btn3_Click(object sender, System.EventArgs e)
{
PrintDialog pd = new PrintDialog();
pd.PrinterSettings = new PrinterSettings();
if (DialogResult.OK == pd.ShowDialog(this))
{
string p = pd.PrinterSettings.PrinterName;
LabelPrint.SendStringToPrinter(p,"\x02L"); // ^BL
LabelPrint.SendStringToPrinter(p,"H07");
LabelPrint.SendStringToPrinter(p,"D11");
LabelPrint.SendStringToPrinter(p,"1911008010000251 0K OHM 1/4 WATT");
LabelPrint.SendStringToPrinter(p,"1a62100000000505 90PCS");
LabelPrint.SendStringToPrinter(p,"E");
LabelPrint.SendStringToPrinter(p,"");
}
}
</snip2>
On Tue, 6 Jul 2004 14:38:31 +0200, "Vlki" <damijan.gradiser_at_neckermann_si> wrote:
Hello,

I can't find a way to send printer specific language codes to printer.

Part of my code :
String sString = "B50,0,0,3,1,2,50,B," + "12345678901234567890";
Font fFont = new Font("Arial", 16);
SolidBrush bBrush = new SolidBrush(Color.Black);
PointF pPoint = new PointF(150.0F, 150.0F);
ev.Graphics.DrawString(sString, fFont, bBrush, pPoint);

First part of the sString should tel my printer to print a barcode. But all
I get is the whole sString contens printed out as-it-is.
I assume the problem is that I send graphical representation of sString to
printer and not a sequence of characters.
Should I try Streams or ......?????

Printer is Eltron TLP2046 BarCode Printer

thx,
Damijan the Puzzled


Best wishes
Kai Bohli
ka***********@online.no
Norway
Nov 16 '05 #2

P: n/a
"Kai Bohli" <ka****@online.nospam> ha scritto nel messaggio
news:71********************************@4ax.com...
Hi !

You need to send the data raw to the printer, otherwise Windows will eat the control codes alive.
First of all read this article:
HOW TO: Send Raw Data to a Printer by Using Visual C# .NET
http://support.microsoft.com/?kbid=322091

Copy the article code into a classfile.
Then you'll have to do something like the code below. (sorry about the formating )
(Note: The SendDocTo Printer is my addon to the article, where I have added a few methods so I could pass a memorystream, and stream from a embedded resource file etc.
I have a lot of experience with Eltron Orion/2443 and Zebra 2443/2444 and DataMax label printers, but almost everything I've done is done in Delphi. I've jsut started porting this stuff to C# myself. Anyway, if you're stucked - contact me and I can see if I can help you - no garantee though :)


Hi,
I'm trying to print on an Eltron TLP2247. Using the example that you
suggest, nothing appen on the printer.
How can i sent EPL command do the printer?

Thnks
EMA
Nov 16 '05 #3

P: n/a
Hi Emanuele !

Sorry for the late answer. The sample that I posted was for a Datamax printer. So in Eltron/Zebra,
it should go something like this:

char sn = '"';
MemoryStream memStrm = new MemoryStream();
StreamWriter sw = new StreamWriter(memStrm);
sw.WriteLine("\n"); // new line to start command structure
sw.WriteLine("N"); // clear image memory from last printed label
sw.WriteLine("X0,0,4,752,584"); // draw a box
sw.WriteLine("LO0,144,752,4"); // draw a line
sw.WriteLine("A40,400,1,1,1,1,N," + sn + "Made in Norway" + sn);
sw.WriteLine("B280,440,0,1,2,3,96,B," + sn + "S 000001" + sn); // write a barcode
sw.Flush();
sw.WriteLine("P1"); // print 1 label
sw.WriteLine(""); // empty line
sw.Flush();

memStrm.Position = 0;
LabelPrint.SendDocToPrinter(pd.PrinterSettings.Pri nterName,memStrm);
sw.Close();

The sample above is simple, but it's all I had time to do now. Not that you should add a method to
the article file called SendDocToPrinter. I've posted the code below:
<code for the SendDocToPrinter function>
public static bool SendDocToPrinter( string szPrinterName, MemoryStream ms)
{
// Open the file.
//FileStream fs = new FileStream(szFileName, FileMode.Open);
// Create a BinaryReader on the file.
BinaryReader br = new BinaryReader(ms);
// Dim an array of bytes big enough to hold the file's contents.
Byte []bytes = new Byte[ms.Length];
bool bSuccess = false;
// Your unmanaged pointer.
IntPtr pUnmanagedBytes = new IntPtr(0);
int nLength;

nLength = Convert.ToInt32(ms.Length);
// Read the contents of the file into the array.
bytes = br.ReadBytes( nLength );
// Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength);
// Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength);
// Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength);
// Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes);
return bSuccess;
}
</code for the SendDocToPrinter function>

I'm trying to print on an Eltron TLP2247. Using the example that you
suggest, nothing appen on the printer.
How can i sent EPL command do the printer?

Thnks
EMA

Best wishes
Kai Bohli
ka***********@online.no
Norway
Nov 16 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.