Jump to content

Welcome to Geeks to Go - Register now for FREE

Need help with your computer or device? Want to learn new tech skills? You're in the right place!
Geeks to Go is a friendly community of tech experts who can solve any problem you have. Just create a free account and post your question. Our volunteers will reply quickly and guide you through the steps. Don't let tech troubles stop you. Join Geeks to Go now and get the support you need!

How it Works Create Account
Photo

ESC/P Printer Codes


  • Please log in to reply

#1
TheQuickBrownFox

TheQuickBrownFox

    Member

  • Member
  • PipPipPip
  • 714 posts
My intention is to move the "cursor" on the printer several spaces to the right.
According to Epson's ESC/P manual:

ESC $ Set absolute horizontal print position
27 36 nL nH

Notes
· Set the defined unit with the ESC ( U command.


So...me taking a guess, I execute the ff code:
out.write("123456789");
//out.write(10);  // line feed
out.write(27); // esc
out.write(40); // (
out.write(85); // U
out.write(1);  // nl
out.write(0);  // nh
out.write(5);  // m
out.write(27); // esc
out.write(36); // $
out.write(120); // move 2 inches
out.write(120); // move 2 inches
out.write("!@#$%^&*()");
out.write(12); // form feed
out.write(7);  // beep
out.flush();

Expected output:
1234567890                   		!@#$%^&*()

Actual output:
1234567890!@#$%^&*()

What am I doing wrong?

Thanks. :cool:
  • 0

Advertisements


#2
Spike

Spike

    nOoB

  • Member
  • PipPipPipPip
  • 1,357 posts
Hey again Sera,

So I must be honest haven't really had experience with dev for printers... But I have looked into it a bit and hopefully I can help a little.... It looks like your values for setting the "absolute print position" is incorrect... Value for nL and nH don't make sense according to a function I came across when trying to learn more about the topic. It looks like if values nL and nH are the same, they basically cancel each other out. Here is the function that I trust will come in handy:
private static final float CM_PER_INCH = 2.54f;

public void setAbsoluteHorizontalPosition(float centimeters) {
        //pre: centimenters >= 0 (cm)
        //post: sets absolute horizontal print position to x centimeters from left margin
        float inches = centimeters / CM_PER_INCH;
        int units_low = (int) (inches * 60) % 256;
        int units_high = (int) (inches * 60) / 256;
        
        pstream.print(ESC);
        pstream.print($);
        pstream.print((char) units_low);
        pstream.print((char) units_high);
}

So in your case you would like to set the position 2 inches from the left margin, using the function above should result in the same thing... But to adapt for the code you have written this section should look like this when setting absolute position:
out.write(27); // esc
out.write(36); // $
out.write(120); // move 2 inches
out.write(0); // This is the value that needed to change

That's about it, give it a try and let me know if it works... Unfortunately I have no way of testing this, also it looks like its working fine for you but just to make sure send a return sequence before flushing (If it results in error, just remove it)
out.write("\n\r"); 
out.flush();

I really hope I helped a litte bit, here is a refrence to where I got that function from. Maybe you can find other functions that might prove useful to you or use the whole class all together:
http://code.google.c...rinter.java?r=2

Here's another useful reference:
http://webpages.char...inks/esc_p2.htm

Peace Out Posted Image
  • 1

#3
TheQuickBrownFox

TheQuickBrownFox

    Member

  • Topic Starter
  • Member
  • PipPipPip
  • 714 posts
Hi spike_hacker_inc,

Your response was perfect!
Thanks so much for the help.
It's really true that sometimes, all you need is someone with a fresh perspective on things to see the problem.

Peace Out :cool:
  • 0






Similar Topics

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

As Featured On:

Microsoft Yahoo BBC MSN PC Magazine Washington Post HP