[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Printing plain text with CUPS



On Wed, Mar 30, 2005 at 04:54:55PM -0500, John Kerr Anderson wrote:
> 
> I have an Epson LX-300+ dot matrix printer and I only want to print plain 
> text to it.  I used the "raw" queue, but then it never sends a form feed 
> to the printer after each job.
> 
> Can anyone explain how to add a form feed string so that the printer does 
> it after each job?

Until someone comes up with a solution showing how to make CUPS append
the form feed itself, you could simply try the following:

$ echo -ne "\f" | cat yourtextfile - | lp -o raw -

If you feel that's too cumbersome to type every time, you can put it in
small wrapper script

#!/bin/sh
echo -ne "\f" | cat "$@" - | lp -o raw -

which you could name 'lpraw' or something, and place in some directory
along your searchpath, e.g. /usr/local/bin/.  (Don't forget to make it
executable.)  Then simply type

$ lpraw yourtextfile

You can also pipe stuff into it (like in "cat yourtextfile | lpraw"),
in case some other app outputs the text on stdout.

Of course, you could alternatively put a function definition in your
shell startup

lpraw() {
    echo -ne "\f" | cat "$@" - | lp -o raw -
}

The problem with the above approaches is - if you print several files
in one go (i.e. "lpraw file1 file2 file3") - there's just _one_ form
feed appended at the very end of all files.  This may or may not be
what you want.  If you need a seperate form feed after each file, then
you could modify the script to read

#!/bin/sh
for file in "$@"; do
  echo -ne "\f" | cat "$file" - | lp -o raw -
done

Or, if you're not averse to slightly more obfuscated code

#!/bin/sh
perl -pe '$_.="\f" if eof' "$@" | lp -o raw -

...which would concatenate all input files, with form feeds appended
individually, before the stream is piped into a single call of lp.

Or... dozens of other ways.  Heh, this is unix... you get the idea :)

Almut



Reply to: