On Thu, Oct 23, 2003 at 04:28:41PM +1000, Robert William Hutton wrote: > Corey Hickey wrote: > > >Currently, if I try to print a text file by using: > >$ lpr text.txt > >I get a stairstep effect > > This is due to the difference between Unix text format and the DOS text > format. Unix uses LF (linefeed) as the line terminator; DOS uses LFCR > (linefeed-character return). With an HP printer, sending just an LF > makes the printer advance to the next line. A CR is required to return > the printing to the beginning of the line. >
I am working with an old HP_670C (understandig PCL 3) using following printing command for text files: "pr -o 16 <text_file> | lpr" -------------------------- "pr -o 16 .." left margin = 16 chars adding file header + formfeed my '/etc/printcap' has this entry (remove dash lines): ------------------------------------------------------ lp|hp deskjet printer condensed w/ formfeed :lp=/dev/lp0 :sd=/var/spool/lpd/lp :af=/var/log/lp-acct :lf=/var/log/lp-errs #-------------------------- :if=/usr/local/sbin/lp/hpdj #-------------------------- :pl#60 :pw#100 :mx#0 :sh :sf :rw : ----------------------------------------------------- The C-source of my 'hpdj' filter (see printcap line) using internal printer commands to be more flexible: ----------------------------------------------------- (compile: "cc -O2 -o hpdj hpdj.c") (compact 'hpdj': "strip hpdj") // HP DeskJet Printer Filter: Add CarriageReturn to LineFeed // ========================================================== // \wwf 20.01.03 // bin file = "/usr/local/sbin/lp/hpdj" // reference in /etc/printcap: // printcap: add "if=/usr/local/sbin/lp/hpdj" to printer config // ------------------------------------------------------------- // (left margin: "pr -o 16 <text_file> | lpr) // (pr gererates formfeed) #include <stdio.h> #define CR '\r' // CarriageReturn #define LF '\n' // LineFeed #define FF '\f' // FormFeed // Printing Control Commands for HP_670C // ------------------------------------- char RESET[]= {'\x1b','\x45'}; char LFLF[] = {'\x1b','\x26','\x6b','\x30','\x47'}; char CRLF[] = {'\x1b','\x26','\x6b','\x32','\x47'}; char COND[] = {'\x1b','\x26','\x6b','\x32','\x53'}; char ELITE[]= {'\x1b','\x26','\x6b','\x34','\x53'}; char PROP[] = {'\x1b','\x28','\x73','\x31','\x50'}; int ch; // text input chars int i; // loop counter char writebuf(char *array) { // write Ctrl-chars for (i=0; i<= sizeof(array); i++) // don't write '\0' putc(*array++, stdout); } int main() { writebuf(RESET); // printer writebuf(CRLF); // control writebuf(COND); // commands // writebuf(PROP); // (proportional) fflush(stdout); // force writing while ((ch = getchar()) != EOF) { // read text putchar(ch); // write text } // putchar(FF); // formfeed (uncomment if no paper eject) writebuf(RESET); // reset to standard settings return(0); } (End of source 'hpdj.c' put to this mail) ================================================================== If the printing configuration above won't work for Your HP printer, try ---------------------------------------- The C-source of my 'crlf' filter using external 'carriage_return' feeding ---------------------------------------- (of cource, replace 'hpdj' by 'crlf' in 'printcap' listing above!) (compile: "cc -O2 -o crlf crlf.c") (compact 'crlf': "strip crlf") // HP DeskJet Printer Filter: Add CarriageReturn to LineFeed // ========================================================== // \wwf 02.07.99 // bin file = "/usr/local/sbin/lp/crlff" // /etc/printcap: add "if=/usr/local/sbin/lp/crlff" // to some generic printer config // ---------------------------------------------------------- #include <stdio.h> #define CR '\r' // CarriageReturn #define LF '\n' // LineFeed #define FF '\f' // FormFeed int ch; // text input chars int main () { while ((ch = getchar()) != EOF) { // read text if (ch == LF) putchar(CR); // LineFeed putchar(ch); // write text } // putchar(FF); // FormFeed better via "pr" cmd! return(0); } (End of source 'crlf.c' put to this mail) ================================================================== ---------------------------------------------------- To print "*.html" files, convert them to text first: ---------------------------------------------------- Convert (tabular) html files to text ==================================== html2text -nobs -o <file>.txt <file>.html -nobs Do not use backspaces for boldface and underlining ----------------------------------------------- To print "Umlaute", you may have to use recode: ----------------------------------------------- (I put them into my '/etc/alias.sh') alias unix2dos='recode lat1..ibmpc' alias dos2unix='recode ibmpc..lat1' Usage: "recode lat1..ibmpc < input.file > output.file" -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]